AI工程师基础知识100题

 

100道AI基础面试题

1、协方差和相关性有什么区别?

解析:

相关性是协方差的标准化格式。协方差本身很难做比较。例如:如果我们计算工资($)和年龄(岁)的协方差,因为这两个变量有不同的度量,所以我们会得到不能做比较的不同的协方差。

为了解决这个问题,我们计算相关性来得到一个介于-1和1之间的值,就可以忽略它们各自不同的度量。

 

2、xgboost如何寻找最优特征?是有放回还是无放回的呢?

解析:

xgboost在训练的过程中给出各个特征的增益评分,最大增益的特征会被选出来作为分裂依据, 从而记忆了每个特征对在模型训练时的重要性-- 从根到叶子中间节点涉及某特征的次数作为该特征重要性排序. xgboost属于boosting集成学习方法, 样本是不放回的, 因而每轮计算样本不重复. 另一方面, xgboost支持子采样,也就是每轮计算可以不使用全部样本, 以减少过拟合. 进一步地, xgboost 还有列采样, 每轮计算按百分比随机采样一部分特征, 既提高计算速度又减少过拟合。

 

3、谈谈判别式模型和生成式模型?

解析:

判别方法:由数据直接学习决策函数Y = f(X),或者由条件分布概率P(Y|X)作为预测模型,即判别模型。
生成方法:由数据学习联合概率密度分布函数P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型,即生成模型。
由生成模型可以得到判别模型,但由判别模型得不到生成模型。 

常见的判别模型有:K近邻、SVM、决策树、感知机、线性判别分析(LDA)、线性回归、传统的神经网络、逻辑斯蒂回归、boosting、条件随机场

常见的生成模型有:朴素贝叶斯、隐马尔可夫模型、高斯混合模型、文档主题生成模型(LDA)、限制玻尔兹曼机

 

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

解析:

线性和非线性是针对,模型参数和输入特征来讲的;比如输入x,模型y=ax+ax^2那么就是非线性模型,如果输入是x和X^2则模型是线性的。
线性分类器可解释性好,计算复杂度较低,不足之处是模型的拟合效果相对弱些。
非线性分类器效果拟合能力较强,不足之处是数据量不足容易过拟合、计算复杂度高、可解释性不好。
常见的线性分类器有:LR,贝叶斯分类,单层感知机、线性回归
常见的非线性分类器:决策树、RF、GBDT、多层感知机
SVM两种都有(看线性核还是高斯核)

 

5、L1和L2正则先验分别服从什么分布

解析:

面试中遇到的,L1和L2正则先验分别服从什么分布,L1是拉普拉斯分布,L2是高斯分布。引用自:@齐同学

先验就是优化的起跑线, 有先验的好处就是可以在较小的数据集中有良好的泛化性能,当然这是在先验分布是接近真实分布的情况下得到的了,从信息论的角度看,向系统加入了正确先验这个信息,肯定会提高系统的性能。

 

6、简单介绍下logistics回归?

解析:

逻辑回归(Logistic Regression)是机器学习中的一种分类模型,由于算法的简单和高效,在实际中应用非常广泛。
比如在实际工作中,我们可能会遇到如下问题:预测一个用户是否点击特定的商品
判断用户的性别
预测用户是否会购买给定的品类

判断一条评论是正面的还是负面的

 

7、说一下Adaboost,权值更新公式。当弱分类器是Gm时,每个样本的的权重是w1,w2...,请写出最终的决策公式。

解析:

给定一个训练数据集T={(x1,y1), (x2,y2)…(xN,yN)},其中实例,而实例空间,yi属于标记集合{-1,+1},Adaboost的目的就是从训练数据中学习一系列弱分类器或基本分类器,然后将这些弱分类器组合成一个强分类器。

 

8、经常在网上搜索东西的朋友知道,当你不小心输入一个不存在的单词时,搜索引擎会提示你是不是要输入某一个正确的单词,比如当你在Google中输入“Julw”时,系统会猜测你的意图:是不是要搜索“July”,如下图所示:

 

这叫做拼写检查。
根据谷歌一员工写的文章显示,Google的拼写检查基于贝叶斯方法。请说说的你的理解,具体Google是怎么利用贝叶斯方法,实现"拼写检查"的功能。

 

解析:

用户输入一个单词时,可能拼写正确,也可能拼写错误。如果把拼写正确的情况记做c(代表correct),拼写错误的情况记做w(代表wrong),那么"拼写检查"要做的事情就是:在发生w的情况下,试图推断出c。换言之:已知w,然后在若干个备选方案中,找出可能性最大的那个c,也就是求的最大值。

 

9、为什么朴素贝叶斯如此“朴素”?

解析:

因为它假定所有的特征在数据集中的作用是同样重要和独立的。正如我们所知,这个假设在现实世界中是很不真实的,因此,说朴素贝叶斯真的很“朴素”。

朴素贝叶斯模型(Naive Bayesian Model)的朴素(Naive)的含义是"很简单很天真"地假设样本特征彼此独立. 这个假设现实中基本上不存在, 但特征相关性很小的实际情况还是很多的, 所以这个模型仍然能够工作得很好。

 

10、请大致对比下plsa和LDA的区别

解析:

文档d产生主题z的概率,主题z产生单词w的概率都是两个固定的值。

 

11、请详细说说EM算法

解析:    

了解过EM算法的同学可能知道,EM算法是数据挖掘十大算法,可谓搞机器学习或数据挖掘的基本绕不开,但EM算法又像数据结构里的KMP算法,看似简单但又貌似不是一看就懂,想绕开却绕不开的又爱又恨,可能正在阅读此文的你感同身受。

 

 

12、KNN中的K如何选取的?

解析:

关于什么是KNN,

KNN中的K值选取对K近邻算法的结果会产生重大影响。如李航博士的一书「统计学习方法」上所说:

如果选择较小的K值,就相当于用较小的领域中的训练实例进行预测,“学习”近似误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带来的问题是“学习”的估计误差会增大,换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合;
如果选择较大的K值,就相当于用较大领域中的训练实例进行预测,其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误,且K值的增大就意味着整体的模型变得简单。 

 

K=N,则完全不足取,因为此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的累,模型过于简单,忽略了训练实例中大量有用信息。
    

 

在实际应用中,K值一般取一个比较小的数值,例如采用交叉验证法(简单来说,就是一部分样本做训练集,一部分做测试集)来选择最优的K值。

 

13、防止过拟合的方法

解析:

过拟合的原因是算法的学习能力过强;一些假设条件(如样本独立同分布)可能是不成立的;训练样本过少不能对整个空间进行分布估计。

处理方法: 

1 早停止:如在训练中多次迭代后发现模型性能没有显著提高就停止训练 

2 数据集扩增:原有数据增加、原有数据加随机噪声、重采样 

3 正则化,正则化可以限制模型的复杂度 

4 交叉验证 

5 特征选择/特征降维

6 创建一个验证集是最基本的防止过拟合的方法。我们最终训练得到的模型目标是要在验证集上面有好的表现,而不训练集

 

14、机器学习中,为何要经常对数据做归一化

解析:

机器学习模型被互联网行业广泛应用,如排序(参见:排序学习实践http://www.cnblogs.com/LBSer/p/4439542.html)、推荐、反作弊、定位(参见:基于朴素贝叶斯的定位算法http://www.cnblogs.com/LBSer/p/4020370.html)等。

 

一般做机器学习应用的时候大部分时间是花费在特征处理上,其中很关键的一步就是对特征数据进行归一化。 

为什么要归一化呢?

很多同学并未搞清楚,维基百科给出的解释:

1)归一化后加快了梯度下降求最优解的速度;

2)归一化有可能提高精度。

下面再简单扩展解释下这两点。

 

15、什么最小二乘法?

解析:

我们口头中经常说:一般来说,平均来说。如平均来说,不吸烟的健康优于吸烟者,之所以要加“平均”二字,是因为凡事皆有例外,总存在某个特别的人他吸烟但由于经常锻炼所以他的健康状况可能会优于他身边不吸烟的朋友。而最小二乘法的一个最简单的例子便是算术平均。

最小二乘法(又称最小平方法)是一种数学优化技术。

它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。

 

16、梯度下降法找到的一定是下降最快的方向么?

解析:

梯度下降法并不一定是全局下降最快的方向,它只是目标函数在当前的点的切平面(当然高维问题不能叫平面)上下降最快的方向。在practical implementation中,牛顿方向(考虑海森矩阵)才一般被认为是下降最快的方向,可以达到superlinear的收敛速度。梯度下降类的算法的收敛速度一般是linear甚至sublinear的(在某些带复杂约束的问题)。by林小溪(https://www.zhihu.com/question/30672734/answer/139689869)。

 

一般解释梯度下降,会用下山来举例。假设你现在在山顶处,必须抵达山脚下(也就是山谷最低处)的湖泊。但让人头疼的是,你的双眼被蒙上了无法辨别前进方向。

 

17、简单说说贝叶斯定理

解析:

在引出贝叶斯定理之前,先学习几个定义: 条件概率(又称后验概率)就是事件A在另外一个事件B已经发生条件下的发生概率。条件概率表示为P(A|B),读作“在B条件下A的概率”。  

 

比如,在同一个样本空间Ω中的事件或者子集A与B,如果随机从Ω中选出的一个元素属于B,那么这个随机选择的元素还属于A的概率就定义为在B的前提下A的条件概率,所以:P(A|B) = |A∩B|/|B|,接着分子、分母都除以|Ω|得到

 

18、怎么理解决策树、xgboost能处理缺失值?而有的模型(svm)对缺失值比较敏感。

解析:

本题解析来源:https://www.zhihu.com/question/58230411 

首先从两个角度解释你的困惑: 

工具包自动处理数据缺失不代表具体的算法可以处理缺失项 对于有缺失的数据:以决策树为原型的模型优于依赖距离度量的模型 回答中也会介绍树模型,如随机森林(Random Forest)和xgboost如何处理缺失值。文章最后总结了在有缺失值时选择模型的小建议。

 

19、标准化与归一化的区别?

解析:

简单来说,标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,将样本的特征值转换到同一量纲下。 归一化是依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为“单位向量”。 

20、随机森林如何处理缺失值?

解析:

解析一@Yieshah:

众所周知,机器学习中处理缺失值的方法有很多,然而,由题目“随机森林如何处理缺失值”可知,问题关键在于随机森林如何处理,所以先简要介绍下随机森林吧。 随机森林是由很多个决策树组成的,首先要建立Bootstrap数据集,即从原始的数据中有放回地随机选取一些,作为新的数据集,新数据集中会存在重复的数据,然后对每个数据集构造一个决策树,但是不是直接用所有的特征来建造决策树,而是对于每一步,都从中随机的选择一些特征,来构造决策树,这样我们就构建了多个决策树,组成随机森林,把数据输入各个决策树中,看一看每个决策树的判断结果,统计一下所有决策树的预测结果,Bagging整合结果,得到最终输出。 那么,随机森林中如何处理缺失值呢?根据随机森林创建和训练的特点,随机森林对缺失值的处理还是比较特殊的。 

 

首先,给缺失值预设一些估计值,比如数值型特征,选择其余数据的中位数或众数作为当前的估计值,然后,根据估计的数值,建立随机森林,把所有的数据放进随机森林里面跑一遍。记录每一组数据在决策树中一步一步分类的路径,然后来判断哪组数据和缺失数据路径最相似,引入一个相似度矩阵,来记录数据之间的相似度,比如有N组数据,相似度矩阵大小就是N*N,如果缺失值是类别变量,通过权重投票得到新估计值,如果是数值型变量,通过加权平均得到新的估计值,如此迭代,直到得到稳定的估计值。 其实,该缺失值填补过程类似于推荐系统中采用协同过滤进行评分预测,先计算缺失特征与其他特征的相似度,再加权得到缺失值的估计,而随机森林中计算相似度的方法(数据在决策树中一步一步分类的路径)乃其独特之处。 

 

解析二 

方法一(na.roughfix)简单粗暴,对于训练集,同一个class下的数据,如果是分类变量缺失,用众数补上,如果是连续型变量缺失,用中位数补。

方法二(rfImpute)这个方法计算量大,至于比方法一好坏?不好判断。先用na.roughfix补上缺失值,然后构建森林并计算proximity matrix,再回头看缺失值,如果是分类变量,则用没有缺失的观测实例的proximity中的权重进行投票。如果是连续型变量,则用proximity矩阵进行加权平均的方法补缺失值。然后迭代4-6次,这个补缺失值的思想和KNN有些类似12。

 

21、随机森林如何评估特征重要性?

解析:

衡量变量重要性的方法有两种,Decrease GINI 和Decrease Accuracy: 

1) Decrease GINI: 对于回归问题,直接使用argmax(VarVarLeftVarRight)作为评判标准,即当前节点训练集的方差Var减去左节点的方差VarLeft和右节点的方差VarRight。 

2) Decrease Accuracy:对于一棵树Tb(x),我们用OOB样本可以得到测试误差1;然后随机改变OOB样本的第j列:保持其他列不变,对第j列进行随机的上下置换,得到误差2。至此,我们可以用误差1-误差2来刻画变量j的重要性。基本思想就是,如果一个变量j足够重要,那么改变它会极大的增加测试误差;反之,如果改变它测试误差没有增大,则说明该变量不是那么的重要。

 

22、优化Kmeans?

解析:

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

 

23、KMeans初始类簇中心点的选取。

解析:

k-means++算法选择初始seeds的基本思想就是:初始的聚类中心之间的相互距离要尽可能的远。
1. 从输入的数据点集合中随机选择一个点作为第一个聚类中心
2. 对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x)
3. 选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大
4. 重复2和3直到k个聚类中心被选出来
5. 利用这k个初始的聚类中心来运行标准的k-means算法

 

24、解释对偶的概念。

解析:

一个优化问题可以从两个角度进行考察,一个是primal 问题,一个是dual 问题,就是对偶问题,一般情况下对偶问题给出主问题最优值的下界,在强对偶性成立的情况下由对偶问题可以得到主问题的最优下界,对偶问题是凸优化问题,可以进行较好的求解,SVM中就是将primal问题转换为dual问题进行求解,从而进一步引入核函数的思想。

 

25、如何进行特征选择?

解析:

特征选择是一个重要的数据预处理过程,主要有两个原因:一是减少特征数量、降维,使模型泛化能力更强,减少过拟合;二是增强对特征和特征值之间的理解
常见的特征选择方式: 

1. 去除方差较小的特征 

2. 正则化。1正则化能够生成稀疏的模型。L2正则化的表现更加稳定,由于有用的特征往往对应系数非零。 

3. 随机森林,对于分类问题,通常采用基尼不纯度或者信息增益,对于回归问题,通常采用的是方差或者最小二乘拟合。一般不需要feature engineering、调参等繁琐的步骤。

它的两个主要问题,

1是重要的特征有可能得分很低(关联特征问题),

2是这种方法对特征变量类别多的特征越有利(偏向问题)。 

4. 稳定性选择。

是一种基于二次抽样和选择算法相结合较新的方法,选择算法可以是回归、SVM或其他类似的方法。它的主要思想是在不同的数据子集和特征子集上运行特征选择算法,不断的重复,最终汇总特征选择结果,比如可以统计某个特征被认为是重要特征的频率(被选为重要特征的次数除以它所在的子集被测试的次数)。理想情况下,重要特征的得分会接近100%。稍微弱一点的特征得分会是非0的数,而最无用的特征得分将会接近于0。

 

26、衡量分类器的好坏?

解析:

 这里首先要知道TP、FN(真的判成假的)、FP(假的判成真)、TN四种(可以画一个表格)。 

 几种常用的指标: 

精度precision = TP/(TP+FP) = TP/~P (~p为预测为真的数量) 

召回率recall = TP/(TP+FN) = TP/ P

 F1值:2/F1 = 1/recall + 1/precision 

ROC曲线:ROC空间是一个以伪阳性率(FPR,false positive rate)为X轴,真阳性率(TPR, true positive rate)为Y轴的二维坐标系所代表的平面。其中真阳率TPR = TP / P = recall, 伪阳率FPR = FP / N 

 

27、机器学习和统计里面的auc的物理意义是啥?

解析:

auc是评价模型好坏的常见指标之一,本题解析来自:https://www.zhihu.com/question/39840928 

 

分三部分,第一部分是对AUC的基本介绍,包括AUC的定义,解释,以及算法和代码,第二部分用逻辑回归作为例子来说明如何通过直接优化AUC来训练,第三部分,内容完全由@李大猫原创——如何根据auc值来计算真正的类别,换句话说,就是对auc的反向工程。 

 

1、什么是AUC?AUC是一个模型评价指标,只能用于二分类模型的评价,对于二分类模型,还有很多其他评价指标,比如logloss,accuracy,precision。如果你经常关注数据挖掘比赛,比如kaggle,那你会发现AUC和logloss基本是最常见的模型评价指标。

 

28、数据预处理。

解析:

1.缺失值,填充缺失值fillna:

i. 离散:None,

ii. 连续:均值。 

iii. 缺失值太多,则直接去除该列 

2. 连续值:离散化。有的模型(如决策树)需要离散值 

3. 对定量特征二值化。核心在于设定一个阈值,大于阈值的赋值为1,小于等于阈值的赋值为0。如图像操作 

4. 皮尔逊相关系数,去除高度相关的列

 

29、观察增益gain, alpha和gamma越大,增益越小?

解析:

xgboost寻找分割点的标准是最大化gain. 考虑传统的枚举每个特征的所有可能分割点的贪心法效率太低,xgboost实现了一种近似的算法。大致的思想是根据百分位法列举几个可能成为分割点的候选者,然后从候选者中计算Gain按最大值找出最佳的分割点。

 

它的计算公式分为四项, 可以由正则化项参数调整(lamda为叶子权重平方和的系数, gama为叶子数量):
 

第一项是假设分割的左孩子的权重分数,第二项为右孩子, 第三项为不分割总体分数, 最后一项为引入一个节点的复杂度损失
由公式可知, gama越大gain越小, lamda越大, gain可能小也可能大.
原问题是alpha而不是lambda, 这里paper上没有提到, xgboost实现上有这个参数. 上面是我从paper上理解的答案,下面是搜索到的:
https://zhidao.baidu.com/question/2121727290086699747.html?fr=iks&word=xgboost+lamda&ie=gbk
lambda[默认1]权重的L2正则化项。(和Ridge regression类似)。 

 

这个参数是用来控制XGBoost的正则化部分的。虽然大部分数据科学家很少用到这个参数,但是这个参数在减少过拟合上还是可以挖掘出更多用处的。

11、alpha[默认1]权重的L1正则化项。(和Lasso regression类似)。 可以应用在很高维度的情况下,使得算法的速度更快。
gamma[默认0]在节点分裂时,只有分裂后损失函数的值下降了,才会分裂这个节点。Gamma指定了节点分裂所需的最小损失函数下降值。 这个参数的值越大,算法越保守。
引用自@AntZ

 

30、什麽造成梯度消失问题?

解析:

Yes you should understand backdrop-Andrej Karpathy

How does the ReLu solve the vanishing gradient problem?
神经网络的训练中,通过改变神经元的权重,使网络的输出值尽可能逼近标签以降低误差值,训练普遍使用BP算法,核心思想是,计算出输出与标签间的损失函数值,然后计算其相对于每个神经元的梯度,进行权值的迭代。

梯度消失会造成权值更新缓慢,模型训练难度增加。造成梯度消失的一个原因是,许多激活函数将输出值挤压在很小的区间内,在激活函数两端较大范围的定义域内梯度为0,造成学习停止。

 

31、到底什么是特征工程?

解析:

首先,大多数机器学习从业者主要在公司做什么呢?不是做数学推导,也不是发明多高大上的算法,而是做特征工程,

 

34、数据不平衡问题

 

解析:

这主要是由于数据分布不平衡造成的。解决方法如下:

采样,对小样本加噪声采样,对大样本进行下采样
数据生成,利用已知样本生成新的样本
进行特殊的加权,如在Adaboost中或者SVM中
采用对不平衡数据集不敏感的算法
改变评价标准:用AUC/ROC来进行评价
采用Bagging/Boosting/ensemble等方法

在设计模型的时候考虑数据的先验分布

 

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

解析:

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

http://blog.sina.com.cn/s/blog_178bcad000102x70r.html

 

 

36、常见的分类算法有哪些?他们各自的优缺点是什么?

解析:

贝叶斯分类法 

优点: 

1)所需估计的参数少,对于缺失数据不敏感。 

2)有着坚实的数学基础,以及稳定的分类效率。    

 缺点:

 1)假设属性之间相互独立,这往往并不成立。(喜欢吃番茄、鸡蛋,却不喜欢吃番茄炒蛋)。 

2)需要知道先验概率。 

3)分类决策存在错误率。 

 

 决策树  

 优点: 

1)不需要任何领域知识或参数假设。 

2)适合高维数据。 

3)简单易于理解。 

4)短时间内处理大量数据,得到可行且效果较好的结果。 

5)能够同时处理数据型和常规性属性。  

 缺点: 

1)对于各类别样本数量不一致数据,信息增益偏向于那些具有更多数值的特征。 

2)易于过拟合。 

3)忽略属性之间的相关性。 

4)不支持在线学习。 

 

 支持向量机       

优点: 

1)可以解决小样本下机器学习的问题。 

2)提高泛化性能。 

3)可以解决高维、非线性问题。超高维文本分类仍受欢迎。 

4)避免神经网络结构选择和局部极小的问题。      

缺点: 

1)对缺失数据敏感。 

2)内存消耗大,难以解释。 

3)运行和调差略烦人。 

 

 K近邻   

优点: 

1)思想简单,理论成熟,既可以用来做分类也可以用来做回归; 

2)可用于非线性分类; 

 3)训练时间复杂度为O(n); 

4)准确度高,对数据没有假设,对outlier不敏感;

 缺点: 

1)计算量太大 

2)对于样本分类不均衡的问题,会产生误判。 

3)需要大量的内存。 

4)输出的可解释性不强。 

 

 Logistic回归    

优点: 

1)速度快。

 2)简单易于理解,直接看到各个特征的权重。 

3)能容易地更新模型吸收新的数据。 

4)如果想要一个概率框架,动态调整分类阀值。    

 缺点: 

特征处理复杂。需要归一化和较多的特征工程。

 

神经网络 

优点: 

1)分类准确率高。 

2)并行处理能力强。 

3)分布式存储和学习能力强。 

4)鲁棒性较强,不易受噪声影响。      

 缺点: 

1)需要大量参数(网络拓扑、阀值、阈值)。 

2)结果难以解释。 

3)训练时间过长。 

 

 Adaboost 

优点: 

1)adaboost是一种有很高精度的分类器。 

2)可以使用各种方法构建子分类器,Adaboost算法提供的是框架。 

3)当使用简单分类器时,计算出的结果是可以理解的。而且弱分类器构造极其简单。

 4)简单,不用做特征筛选。

 5)不用担心overfitting。  

缺点:
对outlier比较敏感

 

37、常见的监督学习算法有哪些?

解析:

感知机、svm、人工神经网络、决策树、逻辑回归

 

38、说说常见的优化算法及其优缺点?

解析:

温馨提示:在回答面试官的问题的时候,往往将问题往大的方面去回答,这样不会陷于小的技术上死磕,最后很容易把自己嗑死了。 简言之 

1)随机梯度下降 优点:可以一定程度上解决局部最优解的问题 缺点:收敛速度较慢 

2)批量梯度下降 优点:容易陷入局部最优解 缺点:收敛速度较快 

3)mini_batch梯度下降 综合随机梯度下降和批量梯度下降的优缺点,提取的一个中和的方法。 

4)牛顿法 牛顿法在迭代的时候,需要计算Hessian矩阵,当维度较高的时候,计算 Hessian矩阵比较困难。 

5)拟牛顿法 拟牛顿法是为了改进牛顿法在迭代过程中,计算Hessian矩阵而提取的算法,它采用的方式是通过逼近Hessian的方式来进行求解。

 

39、特征向量的归一化方法有哪些?

解析:

线性函数转换,表达式如下:y=(x-MinValue)/(MaxValue-MinValue) 

对数函数转换,表达式如下:y=log10 (x) 

反余切函数转换 ,表达式如下:y=arctan(x)*2/PI 

减去均值,除以方差:y=(x-means)/ variance

 

40、RF与GBDT之间的区别与联系?

解析:

1)相同点:都是由多棵树组成,最终的结果都是由多棵树一起决定。 

2)不同点: 

a 组成随机森林的树可以分类树也可以是回归树,而GBDT只由回归树组成 

b 组成随机森林的树可以并行生成,而GBDT是串行生成 

c 随机森林的结果是多数表决表决的,而GBDT则是多棵树累加之和 

d 随机森林对异常值不敏感,而GBDT对异常值比较敏感 

e 随机森林是减少模型的方差,而GBDT是减少模型的偏差f 随机森林不需要进行特征归一化。而GBDT则需要进行特征归一化

 

 

42、请比较下EM算法、HMM、CRF

解析:

这三个放在一起不是很恰当,但是有互相有关联,所以就放在这里一起说了。注意重点关注算法的思想。 

(1)EM算法   

EM算法是用于含有隐变量模型的极大似然估计或者极大后验估计,有两步组成:

E步,求期望(expectation);

M步,求极大(maxmization)。

本质上EM算法还是一个迭代算法,通过不断用上一代参数对隐变量的估计来对当前变量进行计算,直到收敛。   

注意:EM算法是对初值敏感的,而且EM是不断求解下界的极大化逼近求解对数似然函数的极大化的算法,也就是说EM算法不能保证找到全局最优值。对于EM的导出方法也应该掌握。

 

(2)HMM算法   

隐马尔可夫模型是用于标注问题的生成模型。有几个参数(π,A,B):初始状态概率向量π,状态转移矩阵A,观测概率矩阵B。称为马尔科夫模型的三要素。 

马尔科夫三个基本问题: 概率计算问题:给定模型和观测序列,计算模型下观测序列输出的概率。–》前向后向算法 学习问题:已知观测序列,估计模型参数,即用极大似然估计来估计参数。–》Baum-Welch(也就是EM算法)和极大似然估计。 

预测问题:已知模型和观测序列,求解对应的状态序列。–》近似算法(贪心算法)和维比特算法(动态规划求最优路径) 

 

(3)条件随机场CRF   

给定一组输入随机变量的条件下另一组输出随机变量的条件概率分布密度。条件随机场假设输出变量构成马尔科夫随机场,而我们平时看到的大多是线性链条随机场,也就是由输入对输出进行预测的判别模型。求解方法为极大似然估计或正则化的极大似然估计。 之所以总把HMM和CRF进行比较,主要是因为CRF和HMM都利用了图的知识,但是CRF利用的是马尔科夫随机场(无向图),而HMM的基础是贝叶斯网络(有向图)。而且CRF也有:概率计算问题、学习问题和预测问题。大致计算方法和HMM类似,只不过不需要EM算法进行学习问题。 

 

(4)HMM和CRF对比   

其根本还是在于基本的理念不同,一个是生成模型,一个是判别模型,这也就导致了求解方式的不同。

 

 

43、带核的SVM为什么能分类非线性问题?

解析:

核函数的本质是两个函数的內积,通过核函数将其隐射到高维空间,在高维空间非线性问题转化为线性问题, SVM得到超平面是高维空间的线性分类平面, 如图:

 

其分类结果也视为低维空间的非线性分类结果, 因而带核的SVM就能分类非线性问题。

 

 

44、请说说常用核函数及核函数的条件

 

解析:

我们通常说的核函数指的是正定和函数,其充要条件是对于任意的x属于X,要求K对应的Gram矩阵要是半正定矩阵。RBF核径向基,这类函数取值依赖于特定点间的距离,所以拉普拉斯核其实也是径向基核。SVM关键是选取核函数的类型,常用核函数主要有线性内核,多项式内核,径向基内核(RBF),sigmoid核。

 

线性核函数

 

线性核,主要用于线性可分的情况,我们可以看到特征空间到输入空间的维度是一样的,其参数少速度快,对于线性可分数据,其分类效果很理想,因此我们通常首先尝试用线性核函数来做分类,看看效果如何,如果不行再换别的 多项式核函数

 

多项式核函数

 

可以实现将低维的输入空间映射到高纬的特征空间,但是多项式核函数的参数多,当多项式的阶数比较高的时候,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度会大到无法计算。 高斯(RBF)核函数

 

高斯径向基函数

 

是一种局部性强的核函数,其可以将一个样本映射到一个更高维的空间内,该核函数是应用最广的一个,无论大样本还是小样本都有比较好的性能,而且其相对于多项式核函数参数要少,因此大多数情况下在不知道用什么核函数的时候,优先使用高斯核函数。 

 

sigmoid核函数

 

采用sigmoid核函数,支持向量机实现的就是一种多层神经网络。 

 

因此,在选用核函数的时候,如果我们对我们的数据有一定的先验知识,就利用先验来选择符合数据分布的核函数;如果不知道的话,通常使用交叉验证的方法,来试用不同的核函数,误差最下的即为效果最好的核函数,或者也可以将多个核函数结合起来,形成混合核函数。 

 

在吴恩达的课上,也曾经给出过一系列的选择核函数的方法: 如果特征的数量大到和样本数量差不多,则选用LR或者线性核的SVM; 如果特征的数量小,样本的数量正常,则选用SVM+高斯核函数; 如果特征的数量小,而样本的数量很大,则需要手工添加一些特征从而变成第一种情况。

 

 

45、请具体说说Boosting和Bagging的区别

解析:

(1)Bagging之随机森林   

随机森林改变了决策树容易过拟合的问题,这主要是由两个操作所优化的:   

1)Boostrap从袋内有放回的抽取样本值   

2)每次随机抽取一定数量的特征(通常为sqr(n))。   

分类问题:采用Bagging投票的方式选择类别频次最高的   

回归问题:直接取每颗树结果的平均值。 

 

常见参数 误差分析 优点 缺点

1、树最大深度 

2、树的个数 

3、节点上的最小样本数 

4、特征数(sqr(n))  oob(out-of-bag)
将各个树的未采样样本作为预测样本统计误差作为误分率      可以并行计算
不需要特征选择
可以总结出特征重要性
可以处理缺失数据
不需要额外设计测试集        在回归上不能输出连续结果 

 (2)Boosting之AdaBoost 
Boosting的本质实际上是一个加法模型,通过改变训练样本权重学习多个分类器并进行一些线性组合。而Adaboost就是加法模型+指数损失函数+前项分布算法。Adaboost就是从弱分类器出发反复训练,在其中不断调整数据权重或者是概率分布,同时提高前一轮被弱分类器误分的样本的权值。最后用分类器进行投票表决(但是分类器的重要性不同)。 

 (3)Boosting之GBDT 
将基分类器变成二叉树,回归用二叉回归树,分类用二叉分类树。和上面的Adaboost相比,回归树的损失函数为平方损失,同样可以用指数损失函数定义分类问题。但是对于一般损失函数怎么计算呢?GBDT(梯度提升决策树)是为了解决一般损失函数的优化问题,方法是用损失函数的负梯度在当前模型的值来模拟回归问题中残差的近似值。
注:由于GBDT很容易出现过拟合的问题,所以推荐的GBDT深度不要超过6,而随机森林可以在15以上。 

 (4)Boosting之Xgboost 
这个工具主要有以下几个特点:
支持线性分类器
可以自定义损失函数,并且可以用二阶偏导
加入了正则化项:叶节点数、每个叶节点输出score的L2-norm
支持特征抽样
在一定情况下支持并行,只有在建树的阶段才会用到,每个节点可以并行的寻找分裂特征。

 

46、逻辑回归相关问题

解析:

(1)公式推导一定要会 

(2)逻辑回归的基本概念   

这个最好从广义线性模型的角度分析,逻辑回归是假设y服从Bernoulli分布。 

(3)L1-norm和L2-norm   

其实稀疏的根本还是在于L0-norm也就是直接统计参数不为0的个数作为规则项,但实际上却不好执行于是引入了L1-norm;而L1norm本质上是假设参数先验是服从Laplace分布的,而L2-norm是假设参数先验为Gaussian分布,我们在网上看到的通常用图像来解答这个问题的原理就在这。   

 

但是L1-norm的求解比较困难,可以用坐标轴下降法或是最小角回归法求解。 

(4)LR和SVM对比   

首先,LR和SVM最大的区别在于损失函数的选择,LR的损失函数为Log损失(或者说是逻辑损失都可以)、而SVM的损失函数为hinge loss。   

其次,两者都是线性模型。   

最后,SVM只考虑支持向量(也就是和分类相关的少数点) 

(5)LR和随机森林区别   

随机森林等树算法都是非线性的,而LR是线性的。LR更侧重全局优化,而树模型主要是局部的优化。 

(6)常用的优化方法   

逻辑回归本身是可以用公式求解的,但是因为需要求逆的复杂度太高,所以才引入了梯度下降算法。   一阶方法:梯度下降、随机梯度下降、mini 随机梯度下降降法。随机梯度下降不但速度上比原始梯度下降要快,局部最优化问题时可以一定程度上抑制局部最优解的发生。  

 

二阶方法:

牛顿法、拟牛顿法:   

这里详细说一下牛顿法的基本原理和牛顿法的应用方式。牛顿法其实就是通过切线与x轴的交点不断更新切线的位置,直到达到曲线与x轴的交点得到方程解。在实际应用中我们因为常常要求解凸优化问题,也就是要求解函数一阶导数为0的位置,而牛顿法恰好可以给这种问题提供解决方法。实际应用中牛顿法首先选择一个点作为起始点,并进行一次二阶泰勒展开得到导数为0的点进行一个更新,直到达到要求,这时牛顿法也就成了二阶求解问题,比一阶方法更快。我们常常看到的x通常为一个多维向量,这也就引出了Hessian矩阵的概念(就是x的二阶导数矩阵)。

 

缺点:牛顿法是定长迭代,没有步长因子,所以不能保证函数值稳定的下降,严重时甚至会失败。还有就是牛顿法要求函数一定是二阶可导的。而且计算Hessian矩阵的逆复杂度很大。 

 

拟牛顿法: 不用二阶偏导而是构造出Hessian矩阵的近似正定对称矩阵的方法称为拟牛顿法。拟牛顿法的思路就是用一个特别的表达形式来模拟Hessian矩阵或者是他的逆使得表达式满足拟牛顿条件。主要有DFP法(逼近Hession的逆)、BFGS(直接逼近Hession矩阵)、L-BFGS(可以减少BFGS所需的存储空间)。

 

47、什么是共线性, 跟过拟合有什么关联?

解析:

共线性:多变量线性回归中,变量之间由于存在高度相关关系而使回归估计不准确。 共线性会造成冗余,导致过拟合。 

解决方法:排除变量的相关性/加入权重正则。 

https://www.zhihu.com/question/41233373/answer/145404190

 

48、机器学习中,有哪些特征选择的工程方法?

解析:

本题解析来源:@jasonfreak,链接:http://www.cnblogs.com/jasonfreak/p/5448385.html 

目录 

1 特征工程是什么? 

2 数据预处理   

2.1 无量纲化     

2.1.1 标准化     

2.1.2 区间缩放法     

2.1.3 标准化与归一化的区别   

2.2 对定量特征二值化   

2.3 对定性特征哑编码   

2.4 缺失值计算   

2.5 数据变换   

2.6 回顾 

 

3 特征选择   

3.1 Filter     

3.1.1 方差选择法     

3.1.2 相关系数法     

3.1.3 卡方检验     

3.1.4 互信息法   

3.2 Wrapper     

3.2.1 递归特征消除法   

3.3 Embedded     

3.3.1 基于惩罚项的特征选择法     

3.3.2 基于树模型的特征选择法   

3.4 回顾 

 

4 降维   

4.1 主成分分析法(PCA)   

4.2 线性判别分析法(LDA)   

4.3 回顾5 总结6 参考资料

 

 

49、用贝叶斯机率说明Dropout的原理

解析:

回想一下使用Bagging学习,我们定义k 个不同的模型,从训练集有替换采样 构造k 个不同的数据集,然后在训练集上训练模型i。 

 

Dropout的目标是在指数 级数量的神经网络上近似这个过程。Dropout训练与Bagging训练不太一样。在Bagging的情况下,所有模型是独立 的。 

 

在Dropout的情况下,模型是共享参数的,其中每个模型继承的父神经网络参 数的不同子集。参数共享使得在有限可用的内存下代表指数数量的模型变得可能。 在Bagging的情况下,每一个模型在其相应训练集上训练到收敛。 在Dropout的情况下,通常大部分模型都没有显式地被训练,通常该模型很大,以致到宇宙毁灭都不 能采样所有可能的子网络。取而代之的是,可能的子网络的一小部分训练单个步骤,参数共享导致剩余的子网络能有好的参数设定。

  

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

解析:

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

1.如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM

2. 如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel 

3. 如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况。

 

51、请问怎么处理特征向量的缺失值

解析:

一方面,缺失值较多.直接将该特征舍弃掉,否则可能反倒会带入较大的noise,对结果造成不良影响。 

另一方面缺失值较少,其余的特征缺失值都在10%以内,我们可以采取很多的方式来处理: 

1) 把NaN直接作为一个特征,假设用0表示; 

2) 用均值填充; 

3) 用随机森林等算法预测填充。

 

52、SVM、LR、决策树的对比。

解析:

模型复杂度:SVM支持核函数,可处理线性非线性问题;LR模型简单,训练速度快,适合处理线性问题;决策树容易过拟合,需要进行剪枝 

损失函数:SVM hinge loss; LR L2正则化; adaboost 指数损失 

数据敏感度:SVM添加容忍度对outlier不敏感,只关心支持向量,且需要先做归一化; LR对远点敏感 

数据量:数据量大就用LR,数据量小且特征少就用SVM非线性核

 

53、什么是ill-condition病态问题?

解析:

训练完的模型,测试样本稍作修改就会得到差别很大的结果,就是病态问题,模型对未知数据的预测能力很差,即泛化误差大。

 

54、简述KNN最近邻分类算法的过程?

解析:

1. 计算测试样本和训练样本中每个样本点的距离(常见的距离度量有欧式距离,马氏距离等); 

2. 对上面所有的距离值进行排序; 

3. 选前k 个最小距离的样本; 

4. 根据这k 个样本的标签进行投票,得到最后的分类类别;

 

 

55、常用的聚类划分方式有哪些?列举代表算法。

 

解析:

1. 基于划分的聚类:K-means,k-medoids,CLARANS。 

2. 基于层次的聚类:AGNES(自底向上),DIANA(自上向下)。 

3. 基于密度的聚类:DBSACN,OPTICS,BIRCH(CF-Tree),CURE。 

4. 基于网格的方法:STING,WaveCluster。 

5. 基于模型的聚类:EM,SOM,COBWEB。

 

56、什么是偏差与方差?

解析:

泛化误差可以分解成偏差的平方加上方差加上噪声。偏差度量了学习算法的期望预测和真实结果的偏离程度,刻画了学习算法本身的拟合能力,方差度量了同样大小的训练集的变动所导致的学习性能的变化,刻画了数据扰动所造成的影响,噪声表达了当前任务上任何学习算法所能达到的期望泛化误差下界,刻画了问题本身的难度。偏差和方差一般称为bias和variance,一般训练程度越强,偏差越小,方差越大,泛化误差一般在中间有一个最小值,如果偏差较大,方差较小,此时一般称为欠拟合,而偏差较小,方差较大称为过拟合。 

 

 

57、采用EM 算法求解的模型有哪些,为什么不用牛顿法或梯度下降法?

解析:

用EM算法求解的模型一般有GMM或者协同过滤,k-means其实也属于EM。EM算法一定会收敛,但是可能收敛到局部最优。由于求和的项数将随着隐变量的数目指数上升,会给梯度计算带来麻烦。

 

58、xgboost怎么给特征评分?

解析:

在训练的过程中,通过Gini指数选择分离点的特征,一个特征被选中的次数越多,那么该特征评分越高。 

 

[python] # feature importance   

print(model.feature_importances_)   

# plot  pyplot.bar(range(len(model.feature_importances_)), model.feature_importances_)   

pyplot.show()  ==========   

# plot feature importance   

plot_importance(model)   

pyplot.show()

 

59、什么是OOB?随机森林中OOB是如何计算的,它有什么优缺点?

解析:

bagging方法中Bootstrap每次约有1/3的样本不会出现在Bootstrap所采集的样本集合中,当然也就没有参加决策树的建立,把这1/3的数据称为袋外数据oob(out of bag),它可以用于取代测试集误差估计方法。 

袋外数据(oob)误差的计算方法如下: 

对于已经生成的随机森林,用袋外数据测试其性能,假设袋外数据总数为O,用这O个袋外数据作为输入,带进之前已经生成的随机森林分类器,分类器会给出O个数据相应的分类,因为这O条数据的类型是已知的,则用正确的分类与随机森林分类器的结果进行比较,统计随机森林分类器分类错误的数目,设为X,则袋外数据误差大小=X/O;这已经经过证明是无偏估计的,所以在随机森林算法中不需要再进行交叉验证或者单独的测试集来获取测试集误差的无偏估计。

 

60、推导朴素贝叶斯分类P(c|d),文档d(由若干word 组成),求该文档属于类别c 的概率, 并说明公式中哪些概率可以利用训练集计算得到

解析:

根据贝叶斯公式P(c|d)=(P(c)P(d|c)/P(d)) 

 

这里,分母P(d)不必计算,因为对于每个类都是相等的。 分子中,P(c)是每个类别的先验概率,可以从训练集直接统计,P(d|c)根据独立性假设,可以写成如下P(d|c)=¥P(wi|c)(¥符号表示对d中每个词i在c类下概率的连乘),P(wi|c)也可以从训练集直接统计得到。 至此,对未知类别的d进行分类时,类别为c=argmaxP(c)¥P(wi|c)。

 

 

61、请写出你对VC维的理解和认识

解析:

VC维是模型的复杂程度,模型假设空间越大,VC维越高。某种程度上说,VC维给机器学习可学性提供了理论支撑。

1.测试集合的loss是否和训练集合的loss接近?VC维越小,理论越接近,越不容易overfitting。

2.训练集合的loss是否足够小?VC维越大,loss理论越小,越不容易underfitting。 

我们对模型添加的正则项可以对模型复杂度(VC维)进行控制,平衡这两个部分。

 

62、kmeans聚类中,如何确定k的大小

解析:

这是一个老生常谈的经典问题,面试中也经常问。

K-均值聚类算法首先会随机确定k个中心位置,然后将各个数据项分配给最临近的中心点。待分配完成之后,聚类中心就会移到分配给该聚类的所有节点的平均位置处,然后整个分配过程重新开始。这一过程会一直重复下去,直到分配过程不再产出变化为止。

 

63、请用Python实现下线性回归,并思考下更高效的实现方式

解析:

在数学中,线性规划(Linear Programming,简称LP)问题是目标函数和约束条件都是线性的最优化问题。 

线性规划是最优化问题中的重要领域之一。很多运筹学中的实际问题都可以用线性规划来表述。线性规划的某些特殊情况,例如网络流、多商品流量等问题,都被认为非常重要,并有大量对其算法的专门研究。很多其他种类的最优化问题算法都可以分拆成线性规划子问题,然后求得解。 

在历史上,由线性规划引申出的很多概念,启发了最优化理论的核心概念,诸如“对偶”、“分解”、“凸性”的重要性及其一般化等。同样的,在微观经济学和商业管理领域,线性规划被大量应用于解决收入极大化或生产过程的成本极小化之类的问题。

 

64、给你一个有1000列和1百万行的训练数据集。这个数据集是基于分类问题的。 经理要求你来降低该数据集的维度以减少模型计算时间。你的机器内存有限。你会怎么做?(你可以自由做各种实际操作假设)

解析:

答:你的面试官应该非常了解很难在有限的内存上处理高维的数据。以下是你可以使用的处理方法: 

1.由于我们的RAM很小,首先要关闭机器上正在运行的其他程序,包括网页浏览器,以确保大部分内存可以使用。

2.我们可以随机采样数据集。这意味着,我们可以创建一个较小的数据集,比如有1000个变量和30万行,然后做计算。

3.为了降低维度,我们可以把数值变量和分类变量分开,同时删掉相关联的变量。对于数值变量,我们将使用相关性分析。对于分类变量,我们可以用卡方检验。

4.另外,我们还可以使用PCA(主成分分析),并挑选可以解释在数据集中有最大偏差的成分。

5.利用在线学习算法,如VowpalWabbit(在Python中可用)是一个可能的选择。 

6.利用Stochastic GradientDescent(随机梯度下降)法建立线性模型也很有帮助。

7.我们也可以用我们对业务的理解来估计各预测变量对响应变量的影响大小。但是,这是一个主观的方法,如果没有找出有用的预测变量可能会导致信息的显著丢失。 

 

65、问2:在PCA中有必要做旋转变换吗? 如果有必要,为什么?如果你没有旋转变换那些成分,会发生什么情况?

解析:

答:是的,旋转(正交)是必要的,因为它把由主成分捕获的方差之间的差异最大化。这使得主成分更容易解释。但是不要忘记我们做PCA的目的是选择更少的主成分(与特征变量个数相较而言),那些选上的主成分能够解释数据集中最大方差。 

 

通过做旋转,各主成分的相对位置不发生变化,它只能改变点的实际坐标。如果我们没有旋转主成分,PCA的效果会减弱,那样我们会不得不选择更多个主成分来解释数据集里的方差。

注意:对PCA(主成分分析)需要了解更多。

 

66、给你一个数据集,这个数据集有缺失值,且这些缺失值分布在离中值有1个标准偏差的范围内。百分之多少的数据不会受到影响?为什么?

解析:

答:这个问题给了你足够的提示来开始思考!由于数据分布在中位数附近,让我们先假设这是一个正态分布。 

我们知道,在一个正态分布中,约有68%的数据位于跟平均数(或众数、中位数)1个标准差范围内的,那样剩下的约32%的数据是不受影响的。 

因此,约有32%的数据将不受到缺失值的影响。

 

67、给你一个癌症检测的数据集。你已经建好了分类模型,取得了96%的精度。为什么你还是不满意你的模型性能?你可以做些什么呢?

解析:

答:如果你分析过足够多的数据集,你应该可以判断出来癌症检测结果是不平衡数据。在不平衡数据集中,精度不应该被用来作为衡量模型的标准,因为96%(按给定的)可能只有正确预测多数分类,但我们感兴趣是那些少数分类(4%),是那些被诊断出癌症的人。 

因此,为了评价模型的性能,应该用灵敏度(真阳性率),特异性(真阴性率),F值用来确定这个分类器的“聪明”程度。如果在那4%的数据上表现不好,我们可以采取以下步骤: 

1.我们可以使用欠采样、过采样或SMOTE让数据平衡。

2.我们可以通过概率验证和利用AUC-ROC曲线找到最佳阀值来调整预测阀值。 

3.我们可以给分类分配权重,那样较少的分类获得较大的权重。 

4.我们还可以使用异常检测。 

 注意:要更多地了解不平衡分类

 

68、解释朴素贝叶斯算法里面的先验概率、似然估计和边际似然估计?

解析:

先验概率就是因变量(二分法)在数据集中的比例。这是在你没有任何进一步的信息的时候,是对分类能做出的最接近的猜测。 

例如,在一个数据集中,因变量是二进制的(1和0)。例如,1(垃圾邮件)的比例为70%和0(非垃圾邮件)的为30%。因此,我们可以估算出任何新的电子邮件有70%的概率被归类为垃圾邮件。 

 

似然估计是在其他一些变量的给定的情况下,一个观测值被分类为1的概率。例如,“FREE”这个词在以前的垃圾邮件使用的概率就是似然估计。边际似然估计就是,“FREE”这个词在任何消息中使用的概率

 

 

69、你正在一个时间序列数据集上工作。经理要求你建立一个高精度的模型。你开始用决策树算法,因为你知道它在所有类型数据上的表现都不错。 后来,你尝试了时间序列回归模型,并得到了比决策树模型更高的精度。 这种情况会发生吗?为什么?

 

解析:

众所周知,时间序列数据有线性关系。另一方面,决策树算法是已知的检测非线性交互最好的算法。 

 

为什么决策树没能提供好的预测的原因是它不能像回归模型一样做到对线性关系的那么好的映射。 

 

因此,我们知道了如果我们有一个满足线性假设的数据集,一个线性回归模型能提供强大的预测。

 

70、给你分配了一个新的项目,是关于帮助食品配送公司节省更多的钱。问题是,公司的送餐队伍没办法准时送餐。结果就是他们的客户很不高兴。 最后为了使客户高兴,他们只好以免餐费了事。哪个机器学习算法能拯救他们?

 

解析:

你的大脑里可能已经开始闪现各种机器学习的算法。但是等等!这样的提问方式只是来测试你的机器学习基础。这不是一个机器学习的问题,而是一个路径优化问题。 

 

机器学习问题由三样东西组成: 

1.模式已经存在。 

2.不能用数学方法解决(指数方程都不行)。

3.有相关的数据。

 

 

71、你意识到你的模型受到低偏差和高方差问题的困扰。应该使用哪种算法来解决问题呢?为什么?

 

解析:

低偏差意味着模型的预测值接近实际值。换句话说,该模型有足够的灵活性,以模仿训练数据的分布。貌似很好,但是别忘了,一个灵活的模型没有泛化能力。这意味着,当这个模型用在对一个未曾见过的数据集进行测试的时候,它会令人很失望。 

 

在这种情况下,我们可以使用bagging算法(如随机森林),以解决高方差问题。bagging算法把数据集分成重复随机取样形成的子集。然后,这些样本利用单个学习算法生成一组模型。接着,利用投票(分类)或平均(回归)把模型预测结合在一起。 

 

另外,为了应对大方差,我们可以: 

1.使用正则化技术,惩罚更高的模型系数,从而降低了模型的复杂性。 

2.使用可变重要性图表中的前n个特征。可以用于当一个算法在数据集中的所有变量里很难寻找到有意义信号的时候。

 

 

72、给你一个数据集。该数据集包含很多变量,你知道其中一些是高度相关的。 经理要求你用PCA。你会先去掉相关的变量吗?为什么?

 

解析:

答:你可能会说不,但是这有可能是不对的。丢弃相关变量会对PCA有实质性的影响,因为有相关变量的存在,由特定成分解释的方差被放大。

例如:在一个数据集有3个变量,其中有2个是相关的。如果在该数据集上用PCA,第一主成分的方差会是与其不相关变量的差异的两倍。此外,加入相关的变量使PCA错误地提高那些变量的重要性,这是有误导性的。

 

 

73、花了几个小时后,现在你急于建一个高精度的模型。结果,你建了5 个GBM(Gradient Boosted Models),想着boosting算法会显示魔力。 不幸的是,没有一个模型比基准模型表现得更好。最后,你决定将这些模型结合到一起。 尽管众所周知,结合模型通常精度高,但你就很不幸运。你到底错在哪里?

 

解析:

答:据我们所知,组合的学习模型是基于合并弱的学习模型来创造一个强大的学习模型的想法。但是,只有当各模型之间没有相关性的时候组合起来后才比较强大。由于我们已经试了5个GBM,但没有提高精度,表明这些模型是相关的。 

 

具有相关性的模型的问题是,所有的模型提供相同的信息。例如:如果模型1把User1122归类为1,模型2和模型3很有可能会做有同样分类,即使它的实际值应该是0,因此,只有弱相关的模型结合起来才会表现更好。

 

 

74、KNN和KMEANS聚类(kmeans clustering)有什么不同?

 

解析:

答:不要被它们的名字里的“K”误导。 

 

你应该知道,这两种算法之间的根本区别是,KMEANS本质上是无监督学习而KNN是监督学习。KMEANS是聚类算法。KNN是分类(或回归)算法。 

 

KMEAN算法把一个数据集分割成簇,使得形成的簇是同构的,每个簇里的点相互靠近。该算法试图维持这些簇之间有足够的可分离性。由于无监督的性质,这些簇没有任何标签。NN算法尝试基于其k(可以是任何数目)个周围邻居来对未标记的观察进行分类。它也被称为懒惰学习法,因为它涉及最小的模型训练。因此,它不用训练数据对未看见的数据集进行泛化。

 

 

75、真阳性率和召回有什么关系?写出方程式。

 

解析:

答:真阳性率=召回。是的,它们有相同的公式(TP / TP + FN)。 注意:要了解更多关于估值矩阵的知识。

 

 

76、你建了一个多元回归模型。你的模型R2为并不如你设想的好。为了改进,你去掉截距项,模型R的平方从0.3变为0.8。 这是否可能?怎样才能达到这个结果?

 

解析:

答:是的,这有可能。我们需要了解截距项在回归模型里的意义。截距项显示模型预测没有任何自变量,比如平均预测。公式R² = 1 – ∑(y – y´)²/∑(y – ymean)²中的y´是预测值。 

 

当有截距项时,R²值评估的是你的模型基于均值模型的表现。在没有截距项(ymean)时,当分母很大时,该模型就没有这样的估值效果了,∑(y – y´)²/∑(y – ymean)²式的值会变得比实际的小,而R2会比实际值大。

 

 

77、在分析了你的模型后,经理告诉你,你的模型有多重共线性。 你会如何验证他说的是真的?在不丢失任何信息的情况下,你还能建立一个更好的模型吗?

 

解析:

答:要检查多重共线性,我们可以创建一个相关矩阵,用以识别和除去那些具有75%以上相关性(决定阈值是主观的)的变量。此外,我们可以计算VIF(方差膨胀因子)来检查多重共线性的存在。 

 

VIF值<= 4表明没有多重共线性,而值> = 10意味着严重的多重共线性。 

 

此外,我们还可以用容差作为多重共线性的指标。但是,删除相关的变量可能会导致信息的丢失。为了留住这些变量,我们可以使用惩罚回归模型,如Ridge和Lasso回归。 

 

我们还可以在相关变量里添加一些随机噪声,使得变量变得彼此不同。但是,增加噪音可能会影响预测的准确度,因此应谨慎使用这种方法。

 

 

78、什么时候Ridge回归优于Lasso回归?

 

解析:

答:你可以引用ISLR的作者Hastie和Tibshirani的话,他们断言在对少量变量有中等或大尺度的影响的时候用lasso回归。在对多个变量只有小或中等尺度影响的时候,使用Ridge回归。 

 

从概念上讲,我们可以说,Lasso回归(L1)同时做变量选择和参数收缩,而ridge回归只做参数收缩,并最终在模型中包含所有的系数。在有相关变量时,ridge回归可能是首选。此外,ridge回归在用最小二乘估计有更高的偏差的情况下效果最好。因此,选择合适的模型取决于我们的模型的目标。

 

 

79、全球平均温度的上升导致世界各地的海盗数量减少。这是否意味着海盗的数量减少引起气候变化?

 

解析:

答:看完这个问题后,你应该知道这是一个“因果关系和相关性”的经典案例。我们不能断定海盗的数量减少是引起气候变化的原因,因为可能有其他因素(潜伏或混杂因素)影响了这一现象。全球平均温度和海盗数量之间有可能有相关性,但基于这些信息,我们不能说因为全球平均气温的上升而导致了海盗的消失。 

 

 注意:多了解关于因果关系和相关性的知识。

 

 

80、如何在一个数据集上选择重要的变量?给出解释。

 

解析:

答:以下是你可以使用的选择变量的方法: 

1.选择重要的变量之前除去相关变量 

2.用线性回归然后基于P值选择变量 

3.使用前向选择,后向选择,逐步选择 

4.使用随机森林和Xgboost,然后画出变量重要性图 

5.使用lasso回归 

6.测量可用的特征集的的信息增益,并相应地选择前n个特征量。

 

 

81、是否有可能捕获连续变量和分类变量之间的相关性?如果可以的话,怎样做?

 

解析:

是的,我们可以用ANCOVA(协方差分析)技术来捕获连续型变量和分类变量之间的相关性。

 

 

82、Gradient boosting算法(GBM)和随机森林都是基于树的算法,它们有什么区别?

 

解析:

答:最根本的区别是,随机森林算法使用bagging技术做出预测。GBM采用boosting技术做预测。在bagging技术中,数据集用随机采样的方法被划分成使n个样本。然后,使用单一的学习算法,在所有样本上建模。接着利用投票或者求平均来组合所得到的预测。 

 

Bagging是平行进行的。而boosting是在第一轮的预测之后,算法将分类出错的预测加高权重,使得它们可以在后续一轮中得到校正。这种给予分类出错的预测高权重的顺序过程持续进行,一直到达到停止标准为止。随机森林通过减少方差(主要方式)提高模型的精度。生成树之间是不相关的,以把方差的减少最大化。在另一方面,GBM提高了精度,同时减少了模型的偏差和方差。 

 

 注意:多了解关于基于树的建模知识。

 

 

83、运行二元分类树算法很容易,但是你知道一个树是如何做分割的吗,即树如何决定把哪些变量分到哪个根节点和后续节点上?

 

解析:

答:分类树利用基尼系数与节点熵来做决定。简而言之,树算法找到最好的可能特征,它可以将数据集分成最纯的可能子节点。树算法找到可以把数据集分成最纯净的可能的子节点的特征量。基尼系数是,如果总体是完全纯的,那么我们从总体中随机选择2个样本,而这2个样本肯定是同一类的而且它们是同类的概率也是1。我们可以用以下方法计算基尼系数:

 

1.利用成功和失败的概率的平方和(p^2+q^2)计算子节点的基尼系数 

2.利用该分割的节点的加权基尼分数计算基尼系数以分割 

 

熵是衡量信息不纯的一个标准(二分类):

 

这里的p和q是分别在该节点成功和失败的概率。当一个节点是均匀时熵为零。当2个类同时以50%对50%的概率出现在同一个节点上的时候,它是最大值。熵越低越好。

 

 

84、你已经建了一个有10000棵树的随机森林模型。在得到0.00的训练误差后,你非常高兴。但是,验证错误是34.23。到底是怎么回事?你还没有训练好你的模型吗?

 

解析:

答:该模型过度拟合。训练误差为0.00意味着分类器已在一定程度上模拟了训练数据,这样的分类器是不能用在未看见的数据上的。 

 

因此,当该分类器用于未看见的样本上时,由于找不到已有的模式,就会返回的预测有很高的错误率。在随机森林算法中,用了多于需求个数的树时,这种情况会发生。因此,为了避免这些情况,我们要用交叉验证来调整树的数量。

 

 

85、你有一个数据集,变量个数p大于观察值个数n。为什么用OLS是一个不好的选择?用什么技术最好?为什么?

 

解析:

答:在这样的高维数据集中,我们不能用传统的回归技术,因为它们的假设往往不成立。当p>nN,我们不能计算唯一的最小二乘法系数估计,方差变成无穷大,因此OLS无法在此使用的。 

 

为了应对这种情况,我们可以使用惩罚回归方法,如lasso、LARS、ridge,这些可以缩小系数以减少方差。准确地说,当最小二乘估计具有较高方差的时候,ridge回归最有效。 

 

 其他方法还包括子集回归、前向逐步回归。

 

 

86、什么是凸包?(提示:想一想SVM) 其他方法还包括子集回归、前向逐步回归。

 

解析:

答:当数据是线性可分的,凸包就表示两个组数据点的外边界。 

 

一旦凸包建立,我们得到的最大间隔超平面(MMH)作为两个凸包之间的垂直平分线。MMH是能够最大限度地分开两个组的线。

 

 

87、我们知道,一位有效编码会增加数据集的维度。但是,标签编码不会。为什么?

 

解析:

答:对于这个问题不要太纠结。这只是在问这两者之间的区别。 

 

用一位有效编码编码,数据集的维度(也即特征)增加是因为它为分类变量中存在的的每一级都创建了一个变量。例如:假设我们有一个变量“颜色”。这变量有3个层级,即红色、蓝色和绿色。 

 

对“颜色”变量进行一位有效编码会生成含0和1值的Color.Red,Color.Blue和Color.Green 三个新变量。在标签编码中,分类变量的层级编码为0和1,因此不生成新变量。标签编码主要是用于二进制变量。

 

 

88、你会在时间序列数据集上使用什么交叉验证技术?是用k倍或LOOCV?

 

解析:

答:都不是。对于时间序列问题,k倍可能会很麻烦,因为第4年或第5年的一些模式有可能跟第3年的不同,而对数据集的重复采样会将分离这些趋势,我们可能最终是对过去几年的验证,这就不对了。 

 

相反,我们可以采用如下所示的5倍正向链接策略: 

fold 1 : training [1], test [2] 

fold 2 : training [1 2], test [3] 

fold 3 : training [1 2 3], test [4] 

fold 4 : training [1 2 3 4], test [5] 

fold 5 : training [1 2 3 4 5], test [6] 

 

1,2,3,4,5,6代表的是年份。

 

 

89、给你一个缺失值多于30%的数据集?比方说,在50个变量中,有8个变量的缺失值都多于30%。你对此如何处理?

 

解析:

答:我们可以用下面的方法来处理: 

 

1.把缺失值分成单独的一类,这些缺失值说不定会包含一些趋势信息。 

2.我们可以毫无顾忌地删除它们。 

3.或者,我们可以用目标变量来检查它们的分布,如果发现任何模式,我们将保留那些缺失值并给它们一个新的分类,同时删除其他缺失值。

 

 

90、买了这个的客户,也买了......”亚马逊的建议是哪种算法的结果?

 

解析:

答:这种推荐引擎的基本想法来自于协同过滤。 

 

协同过滤算法考虑用于推荐项目的“用户行为”。它们利用的是其他用户的购买行为和针对商品的交易历史记录、评分、选择和购买信息。针对商品的其他用户的行为和偏好用来推荐项目(商品)给新用户。在这种情况下,项目(商品)的特征是未知的。 

 注意:了解更多关于推荐系统的知识。

 

 

91、你怎么理解第一类和第二类错误? 

解析:

答:第一类错误是当原假设为真时,我们却拒绝了它,也被称为“假阳性”。第二类错误是当原假设为是假时,我们接受了它,也被称为“假阴性”。 

 在混淆矩阵里,我们可以说,当我们把一个值归为阳性(1)但其实它是阴性(0)时,发生第一类错误。而当我们把一个值归为阴性(0)但其实它是阳性(1)时,发生了第二类错误。

 

92、当你在解决一个分类问题时,出于验证的目的,你已经将训练集随机抽样地分成训练集和验证集。你对你的模型能在未看见的数据上有好的表现非常有信心,因为你的验证精度高。但是,在得到很差的精度后,你大失所望。什么地方出了错?

解析:

答:在做分类问题时,我们应该使用分层抽样而不是随机抽样。随机抽样不考虑目标类别的比例。相反,分层抽样有助于保持目标变量在所得分布样本中的分布。

  

93、请简单阐述下决策树、回归、SVM、神经网络等算法各自的优缺点?

 

正则化算法(Regularization Algorithms) 

集成算法(Ensemble Algorithms)

决策树算法(Decision Tree Algorithm) 

回归(Regression) 

人工神经网络(Artificial Neural Network) 

深度学习(Deep Learning) 

支持向量机(Support Vector Machine) 

降维算法(Dimensionality Reduction Algorithms) 

聚类算法(Clustering Algorithms) 

基于实例的算法(Instance-based Algorithms) 

贝叶斯算法(Bayesian Algorithms) 

关联规则学习算法(Association Rule Learning Algorithms) 

图模型(Graphical Models)

解析:

一、正则化算法(Regularization Algorithms)

 它是另一种方法(通常是回归方法)的拓展,这种方法会基于模型复杂性对其进行惩罚,它喜欢相对简单能够更好的泛化的模型。 

例子: 岭回归(Ridge Regression) 最小绝对收缩与选择算子(LASSO)GLASSO 弹性网络(Elastic Net)

最小角回归(Least-Angle Regression)

优点: 其惩罚会减少过拟合 总会有解决方法 

缺点: 惩罚会造成欠拟合 很难校准

 

94、在应用机器学习算法之前纠正和清理数据的步骤是什么?

解析:

1.将数据导入 

2.看数据:重点看元数据,即对字段解释、数据来源等信息;导入数据后,提取部分数据进行查看 

3.缺失值清洗 

- 根据需要对缺失值进行处理,可以删除数据或填充数据 

- 重新取数:如果某些非常重要的字段缺失,需要和负责采集数据的人沟通,是否可以再获得 

4.数据格式清洗:统一数据的时间、日期、全半角等显示格式 

5.逻辑错误的数据 

- 重复的数据 

- 不合理的值  

6.不一致错误的处理:指对矛盾内容的修正,最常见的如身份证号和出生年月日不对应 不同业务中数据清洗的任务略有不同,比如数据有不同来源的话,数据格式清洗和不一致错误的处理就尤为突出。数据预处理是数据类岗位工作内容中重要的部分。

 

95、什么是K-means聚类算法?

解析:

K-means也是聚类算法中最简单的一种了,但是里面包含的思想却是不一般。最早我使用并实现这个算法是在学习韩爷爷那本数据挖掘的书中,那本书比较注重应用。看了Andrew Ng的这个讲义后才有些明白K-means后面包含的EM思想。    

聚类属于无监督学习,以往的回归、朴素贝叶斯、SVM等都是有类别标签y的,也就是说样例中已经给出了样例的分类。而聚类的样本中却没有给定y,只有特征x,比如假设宇宙中的星星可以表示成三维空间中的点集。聚类的目的是找到每个样本x潜在的类别y,并将同类别y的样本x放在一起。比如上面的星星,聚类后结果是一个个星团,星团里面的点相互距离比较近,星团间的星星距离就比较远了。

 

96、请详细说说文字特征提取

 解析:

很多机器学习问题涉及自然语言处理(NLP),必然要处理文字信息。文字必须转换成可以量化的特征向量。下面我们就来介绍最常用的文字表示方法:词库模型(Bag-of-words model)。 

词库表示法 

词库模型是文字模型化的最常用方法。对于一个文档(document),忽略其词序和语法,句法,将其仅仅看做是一个词集合,或者说是词的一个组合,文档中每个词的出现都是独立的,不依赖于其他词是否出现,或者说当这篇文章的作者在任意一个位置选择一个词汇都不受前面句子的影响而独立选择的。词库模型可以看成是独热编码的一种扩展,它为每个单词设值一个特征值。词库模型依据是用类似单词的文章意思也差不多。词库模型可以通过有限的编码信息实现有效的文档分类和检索。

 

97、请详细说说图像特征提取

解析:

计算机视觉是一门研究如何使机器“看”的科学,让计算机学会处理和理解图像。这门学问有时需要借助机器学习。 

本节介绍一些机器学习在计算机视觉领域应用的基础技术。通过像素值提取特征数字图像通常是一张光栅图或像素图,将颜色映射到网格坐标里。一张图片可以看成是一个每个元素都是颜色值的矩阵。表示图像基本特征就是将矩阵每行连起来变成一个行向量。 

光学文字识别(Optical character recognition,OCR)是机器学习的经典问题。下面我们用这个技术来识别手写数字。 

 

98、了解xgboost么,请详细说说它的原理 

解析:

前言xgboost一直在竞赛江湖里被传为神器,比如时不时某个kaggle/天池比赛中,某人用xgboost于千军万马中斩获冠军。 

而我们的机器学习课程里也必讲xgboost,如寒所说:“RF和GBDT是工业界大爱的模型,Xgboost 是大杀器包裹,Kaggle各种Top排行榜曾一度呈现Xgboost一统江湖的局面,另外某次滴滴比赛第一名的改进也少不了Xgboost的功劳”。 

  

99、请详细说说梯度提升树(GBDT)的原理

 

解析:

 

GBDT主要由三个概念组成:Regression Decistion Tree(即DT),Gradient Boosting(即GB),Shrinkage (算法的一个重要演进分枝,目前大部分源码都按该版本实现)。搞定这三个概念后就能明白GBDT是如何工作的,要继续理解它如何用于搜索排序则需要额外理解RankNet概念,之后便功德圆满。下文将逐个碎片介绍,最终把整张图拼出来。 

一、DT:回归树Regression Decision Tree 提起决策树(DT, Decision Tree) 绝大部分人首先想到的就是C4.5分类决策树。但如果一开始就把GBDT中的树想成分类树,那就是一条歪路走到黑,一路各种坑,最终摔得都要咯血了还是一头雾水。但,这说的就是LZ自己啊有木有。咳嗯,所以说千万不要以为GBDT是很多棵分类树。

 

100、请说说Adaboost 算法的原理与推导

https://blog.csdn.net/haidao2009/article/details/7514787

posted @ 2019-07-20 19:28  Anita-ff  阅读(1854)  评论(0编辑  收藏  举报