机器学习常见面试题整理,机器学习

作者:亚搏app官网    发布时间:2020-02-09 13:35    浏览:76 次

[返回]

监督学习可把标记的训练数据转化为经过调优的预测模型。

By Kubi Code

机器学习是人工智能的一个分支,包括从数据中自动创建模型的算法。从高层次上讲,机器学习有四种:监督学习、无监督学习、强化学习和主动机器学习。由于强化学习和主动机器学习相对较新,因此此类列表有时会省略它们。你也可以把半监督学习添加到列表中,也不算错。

文章目录

什么是监督学习?

  1. 1. 有监督学习和无监督学习的区别
  2. 2. 正则化
  3. 3. 过拟合
    1. 3.1. 产生的原因
    2. 3.2. 解决方法
  4. 4. 泛化能力
  5. 5. 生成模型和判别模型
  6. 6. 线性分类器与非线性分类器的区别以及优劣
    1. 6.1. 特征比数据量还大时,选择什么样的分类器?
    2. 6.2. 对于维度很高的特征,你是选择线性还是非线性分类器?
    3. 6.3. 对于维度极低的特征,你是选择线性还是非线性分类器?
  7. 7. ill-condition病态问题
  8. 8. L1和L2正则的区别,如何选择L1和L2正则
  9. 9. 特征向量的归一化方法
  10. 10. 特征向量的异常值处理
  11. 11. 越小的参数说明模型越简单
  12. 12. svm中rbf核函数与高斯和函数的比较
  13. 13. KMeans初始类簇中心点的选取
    1. 13.1. 选择批次距离尽可能远的K个点
    2. 13.2. 选用层次聚类或者Canopy算法进行初始聚类
  14. 14. ROC、AUC
    1. 14.1. ROC曲线
    2. 14.2. AUC
    3. 14.3. 为什么要使用ROC和AUC
  15. 15. 测试集和训练集的区别
  16. 16. 优化Kmeans
  17. 17. 数据挖掘和机器学习的区别
  18. 18. 备注

监督学习是从带有正确答案的经过标记的训练数据开始的。在学习过程之后,将得到一个经过调优的权重集的模型,这可以用于预测尚未标记的类似数据的答案。

有监督学习和无监督学习的区别

  • 有监督学习:对具有标记的训练样本进行学习,以尽可能对训练样本集外的数据进行分类预测。(LR,SVM,BP,RF,GBRT)
  • 无监督学习:对未标记的样本进行训练学习,比发现这些样本中的结构知识。(KMeans,DL)

你想要的是训练一个没有过度拟合或者欠拟合的高精度模型。高精度意味着你已经优化了损失函数。在分类问题的情景中,准确性是模型产生正确输出的示例的比例。

正则化

正则化是针对过拟合而提出的,以为在求解模型最优的是一般优化最小的经验风险,现在在该经验风险上加入模型复杂度这一项(正则化项是模型参数向量的范数),并使用一个rate比率来权衡模型复杂度与以往经验风险的权重,如果模型复杂度越高,结构化的经验风险会越大,现在的目标就变为了结构经验风险的最优化,可以防止模型训练过度复杂,有效的降低过拟合的风险。

奥卡姆剃刀原理,能够很好的解释已知数据并且十分简单才是最好的模型。

过度拟合意味着模型与它所看到的数据关联过于紧密,以致于不能推广应用到它所没有看到的数据。欠拟合意味着模型不够复杂,无法捕获数据中的潜在趋势。

过拟合

如果一味的去提高训练数据的预测能力,所选模型的复杂度往往会很高,这种现象称为过拟合。所表现的就是模型训练时候的误差很小,但在测试的时候误差很大。

选择损失函数来反映模型的不足之处将损失最小化以找到最佳模型。对于数值问题,损失函数通常是均方误差,也可表示为均方根误差或者均方根偏差。这对应于数据点和模型曲线之间的欧几里得距离。对于分类问题,损失函数可以基于一种度量方法,包括ROC曲线下面积、平均精度、精度恢复和对数损失等。

产生的原因

  1. 因为参数太多,会导致我们的模型复杂度上升,容易过拟合
  2. 权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征.

为了避免过度拟合,通常把标记过的数据分为两组,多数用于训练,少数用于验证和测试。验证集损失一般高于训练集损失,但这是你所关心的,因为不应该表现出对模型的偏见。

解决方法

  1. 交叉验证法
  2. 减少特征
  3. 正则化
  4. 权值衰减
  5. 验证数据

对于小数据集,使用固定的维持集进行测试验证可能会导致统计值较低。解决这一问题的一种方法是使用交叉验证方法,其中不同的折叠轮流作为不同训练阶段的维持集。

泛化能力

泛化能力是指模型对未知数据的预测能力

我提到了AUC是ROC曲线下的区域。ROC是接收机工作特性曲线;该术语来自无线电信号分析,但从本质上讲,ROC曲线通过绘制真正值比率与假正值比率的关系来显示分类器的灵敏度。ROC曲线下的区域越大越好,这样,当你使用它作为损失函数的基础时,实际上希望最大化AUC。

生成模型和判别模型

  1. 生成模型:由数据学习联合概率分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型,即生成模型:P(Y|X)= P(X,Y)/ P(X)。(朴素贝叶斯)
    生成模型可以还原联合概率分布p(X,Y),并且有较快的学习收敛速度,还可以用于隐变量的学习
  2. 判别模型:由数据直接学习决策函数Y=f(X)或者条件概率分布P(Y|X)作为预测的模型,即判别模型。(k近邻、决策树)
    直接面对预测,往往准确率较高,直接对数据在各种程度上的抽象,所以可以简化模型

机器学习的数据清理

线性分类器与非线性分类器的区别以及优劣

如果模型是参数的线性函数,并且存在线性分类面,那么就是线性分类器,否则不是。
常见的线性分类器有:LR,贝叶斯分类,单层感知机、线性回归
常见的非线性分类器:决策树、RF、GBDT、多层感知机

SVM两种都有(看线性核还是高斯核)

  • 线性分类器速度快、编程方便,但是可能拟合效果不会很好
  • 非线性分类器编程复杂,但是效果拟合能力强

原始数据都不是很干净。为了更好地应用于机器学习,必须很好地过滤数据。例如,你需要:

特征比数据量还大时,选择什么样的分类器?

线性分类器,因为维度高的时候,数据一般在维度空间里面会比较稀疏,很有可能线性可分

1.查看数据并排除任何有大量缺失数据的列。

对于维度很高的特征,你是选择线性还是非线性分类器?

理由同上

2.再次查看数据,并选择要用于预测的列。特征选择是你在迭代时想要改变的内容。

对于维度极低的特征,你是选择线性还是非线性分类器?

非线性分类器,因为低维空间可能很多特征都跑到一起了,导致线性不可分

3.去掉剩余列中仍缺少数据的所有行。

ill-condition病态问题

训练完的模型测试样本稍作修改就会得到差别很大的结果,就是病态问题(这简直是不能用啊)

4.纠正明显的拼写错误,并合并相同的条目。例如,U.S.、US、USA和美国应合并为一个类别。

L1和L2正则的区别,如何选择L1和L2正则

他们都是可以防止过拟合,降低模型复杂度

  • L1是在loss function后面加上 模型参数的1范数(也就是|xi|)
  • L2是在loss function后面加上 模型参数的2范数(也就是sigma(xi^2)),注意L2范数的定义是sqrt(sigma(xi^2)),在正则项上没有添加sqrt根号是为了更加容易优化

  • L1 会产生稀疏的特征

  • L2 会产生更多地特征但是都会接近于0

L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。L1在特征选择时候非常有用,而L2就只是一种规则化而已。

5.去掉数据超出范围的行。例如,如果你分析纽约市内的出租车行驶路线,想筛选出某些数据行,这些行中的上客和下客经纬度坐标点位于都市区域边界框之外。

特征向量的归一化方法

  1. 线性函数转换,表达式如下:y=(x-MinValue)/(MaxValue-MinValue)
  2. 对数函数转换,表达式如下:y=log10 (x)
  3. 反余切函数转换 ,表达式如下:y=arctan(x)*2/PI
  4. 减去均值,乘以方差:y=(x-means)/ variance

可以做的还有很多,而这将取决于收集的数据。这可能很乏味,但是如果你在机器学习流水线中设置了数据清理步骤,就可以随意修改并重复这一工作。

特征向量的异常值处理

  1. 用均值或者其他统计量代替

机器学习的数据编码与规范化

越小的参数说明模型越简单

过拟合的,拟合会经过曲面的每个点,也就是说在较小的区间里面可能会有较大的曲率,这里的导数就是很大,线性模型里面的权值就是导数,所以越小的参数说明模型越简单。

追加:这个其实可以看VC维相关的东西感觉更加合适

要使用分类数据进行机器分类,需要将文本标签编码为另一种形式。有两种常见的编码方法。

svm中rbf核函数与高斯和函数的比较

高斯核函数好像是RBF核的一种

一种是标签编码,这意味着每个文本标签值都被一个数字替换。另一种是one-hot编码,这意味着每一文本标签值都被转换为包含一个二进制值的列。大多数机器学习框架都具有为你进行转换的功能。一般来说,最好使用one-hot编码,因为标签编码有时会使机器学习算法误认为编码的列是有序的。

KMeans初始类簇中心点的选取

使用数字数据进行机器回归时,通常需要对数据进行规范化。否则,范围较大的数字可能倾向于控制特征向量之间的欧几里得距离,其效果会被放大,但是以牺牲其他字段为代价,并且最陡的下降优化可能难以收敛。机器学习的数据规范化和标准化方法有很多种,包括最小最大规范化、均值规范化、标准化和单位长度缩放等。这一过程通常被称为特征缩放。

选择批次距离尽可能远的K个点

首先随机选取一个点作为初始点,然后选择距离与该点最远的那个点作为中心点,再选择距离与前两个点最远的店作为第三个中心店,以此类推,直至选取大k个

机器学习的特征工程

选用层次聚类或者Canopy算法进行初始聚类

特征是指所观察到的现象中的个体可测量属性或者特性。特征的概念与解释变量概念有关,而解释变量用于线性回归等统计方法。特征向量将一行的所有特征组合成一个数字向量。

ROC、AUC

ROC和AUC通常是用来评价一个二值分类器的好坏

选择特征的一种技巧是选择一组能解释问题的最小独立变量。如果两个变量高度相关,要么它们应组合成一个特征,要么应该删除其中一个。有时人们进行主分量分析,将相关变量转换成一组线性不相关的变量。

ROC曲线

曲线坐标上:

  • X轴是FPR(表示假阳率-预测结果为positive,但是实际结果为negitive,FP/(N))
  • Y轴式TPR(表示真阳率-预测结果为positive,而且的确真实结果也为positive的,TP/P)

那么平面的上点(X,Y):

  • (0,1)表示所有的positive的样本都预测出来了,分类效果最好
  • (0,0)表示预测的结果全部为negitive
  • (1,0)表示预测的错过全部分错了,分类效果最差
  • (1,1)表示预测的结果全部为positive

    针对落在x=y上点,表示是采用随机猜测出来的结果

ROC曲线建立
一般默认预测完成之后会有一个概率输出p,这个概率越高,表示它对positive的概率越大。
现在假设我们有一个threshold,如果p>threshold,那么该预测结果为positive,否则为negitive,按照这个思路,我们多设置几个threshold,那么我们就可以得到多组positive和negitive的结果了,也就是我们可以得到多组FPR和TPR值了
将这些(FPR,TPR)点投射到坐标上再用线连接起来就是ROC曲线了

当threshold取1和0时,分别得到的就是(0,0)和(1,1)这两个点。(threshold=1,预测的样本全部为负样本,threshold=0,预测的样本全部为正样本)

人们用来构造新特征或者减少特征向量维数的一些转换其实很简单。例如,把死亡年份与出生年份相减,就得到了死亡年龄,这是寿命和死亡率分析的主要独立变量。在其他情况下,特征构造可能不那么明显。

AUC

AUC(Area Under Curve)被定义为ROC曲线下的面积,显然这个面积不会大于1(一般情况下ROC会在x=y的上方,所以0.5<AUC<1).

AUC越大说明分类效果越好

常用的机器学习算法

为什么要使用ROC和AUC

因为当测试集中的正负样本发生变化时,ROC曲线能基本保持不变,但是precision和recall可能就会有较大的波动。

有几十种机器学习算法,从线性回归和逻辑回归到深度神经网络和集成,复杂程度各不相同。而一些最常见的算法包括:

测试集和训练集的区别

训练集用于建立模型,测试集评估模型的预测等能力

线性回归,又名最小二乘回归。

优化Kmeans

使用kd树或者ball tree(这个树不懂)
将所有的观测实例构建成一颗kd树,之前每个聚类中心都是需要和每个观测点做依次距离计算,现在这些聚类中心根据kd树只需要计算附近的一个局部区域即可

逻辑回归。

数据挖掘和机器学习的区别

机器学习是数据挖掘的一个重要工具,但是数据挖掘不仅仅只有机器学习这一类方法,还有其他很多非机器学习的方法,比如图挖掘,频繁项挖掘等。感觉数据挖掘是从目的而言的,但是机器学习是从方法而言的。

线性判别分析。

备注

题目主要来源于网络,答案主要来源于网络或者《统计学习方法》,还有自己一小部分的总结,如果错误之处敬请指出
如果想要了解关于常见模型的东东可以看这篇机器学习常见算法个人总结(面试用)文章

决策树。

朴素贝叶斯。

K最近邻居,又名KNN。

学习向量量化,又名LVQ。

支持向量机,又名SVM。

随机森林,一种打包集成算法。

提升方法,包括AdaBoost和XGBoost,是一种集成算法,可以创建一系列模型,其中每个增量模型都试图纠正前一个模型的错误。

神经网络。

超参数调整

超参数是自由变量,而不是机器学习模型中被调整的权重。超参数随算法的不同而不同,但通常包括学习速率,该参数用于控制批量计算错误后所应用的校正深度。

一些产品化的机器学习平台现在提供自动超参数调整功能。本质上,你告诉系统想要改变哪些超参数,可能想要优化什么指标,系统会在允许的次数范围内扫描这些超参数。

扫描超参数的搜索算法主要有三种:贝叶斯优化、网格搜索和随机搜索。贝叶斯优化往往是最有效的。你能够很容易地在代码中实现自己的超参数扫描功能即使你所使用的平台没有自动执行。

总之,监督学习把标记过的训练数据转化为经过调优的预测模型。在此过程中,你应该清理数据并使之规范化,设计一组线性不相关的特征参数,并尝试使用多种算法来找到最佳模型。

作者:Martin Heller是InfoWorld的特约编辑和审稿人。他曾是一名网络和Windows编程顾问,1986年至2010年间开发过数据库、软件和网站。

编译:Charles

原文网址:-learning-explained.html

责任编辑:周星如

搜索