机器学习面试题

1. SVM、LR、决策树的对比?

  • LR实现简单,训练速度非常快,但是模型较为简单。
  • 决策树容易过拟合,需要进行剪枝等。
  • SVM既可以用于分类问题,也可以用于回归问题,并且可以通过核函数快速的计算,

常见的损失函数

  • 常见的损失误差有五种:
    1. 铰链损失(Hinge Loss):主要用于支持向量机(SVM) 中;
    1. 互熵损失 (Cross Entropy Loss,Softmax Loss ):用于Logistic 回归与Softmax 分类中;
    • 逻辑回归的损失函数:假设样本服从伯努利分布(0-1分布),然后求得满足该分布的似然函数,接着取对数求极值等
    1. 平方损失(Square Loss):主要是最小二乘法(OLS)中;
    • 平方损失函数:假设样本的误差项是白噪声,在正态分布的条件下推导得到。
    1. 指数损失(Exponential Loss) :主要用于Adaboost 集成学习算法中;
    1. 其他损失(如0-1损失,绝对值损失)

优化函数角度

  • soft margin(软间隔)的SVM用的是hinge loss,
    • 软间隔:现实中很容易出现一个没办法把点严格区分的情况。那么如果我们想用svm处理这个问题,就想办法让svm能容忍这种错误,具体做法就是在目标函数添加错误累加项,然后加一个系数C,控制对错误的容忍度,并且在约束中添加错误容忍度的约束。如果对偶化处理得到的软svm问题和之前的svm问题相比,各个α多了上界C(之前只要大于等于0就行了)。
    • hing loss:铰链损失,用来解决间距最大化的问题,如果被正确分类,损失是0,否则损失就是 1−Mi(w)。
  • 带L2正则化的LR对应的是cross entropy loss,另外adaboost对应的是exponential loss。
    • LR的训练速度要高于SVM。
    • LR对异常点敏感,SVM和决策树对异常点不太敏感,因为只关心support vector;
    • LR和SVM对缺失值都很敏感,决策树对缺失值不敏感(叶子节点投票解决)。
    • LR可以预测概率,而SVM不可以,SVM依赖于数据测度,需要先做归一化,LR一般不需要。
    • SVM可以将特征映射到无穷维空间,但是LR不可以,一般小数据中SVM比LR更优一点。

2. GBDT 和随机森林的区别?

  • Bagging + 决策树(CART) = 随机森林

  • Boostin + 决策树(CART回归树) = GBDT

  • 随机森林采用的是bagging的思想,bagging又称为bootstrap aggreagation,通过在训练样本集中进行有放回的采样得到多个采样集,基于每个采样集训练出一个基学习器,再将基学习器结合。

  • Bagging + 决策树 = 随机森林

  • 随机森林(Random Forest,简称RF)是Bagging的一个扩展变体。 RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。具体来说,传统决策树在选择划分属性时是在当前结点的属性集合(假定有d个属性)中选择一个最优属性;而在RF中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。随机选择一个属性用于划分。这样进一步增强了模型的泛化能力.

  • GBDT通过多轮迭代,每轮迭代产生一个弱分类器,每轮的分类器是在上一轮分类器的残差基础上进行训练,每一迭代中根据错误更新样本权重。

  • GBDT的思想可以用一个通俗的例子解释,假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。

  • 随机森林是并行方法,GBDT是串行方法。

  • 随机森林和GBDT李的弱分类器通常使用的决策树,从而对异常值,连续值,缺失值不敏感。

  • 相对于决策树的泛化能力更好,随机深林引入随机性,而GBDT学习上一轮的残差。

随机森林的变种

extra trees

  • extra trees是RF的一个变种, 原理几乎和RF一模一样,仅有区别有:
    • 1) 对于每个决策树的训练集,RF采用的是随机采样bootstrap来选择采样集作为每个决策树的训练集,而extra
      trees一般不采用随机采样,即每个决策树采用原始训练集。
    • 2) 在选定了划分特征后,RF的决策树会基于信息增益,基尼系数,均方差之类的原则,选择一个最优的特征值划分
      点,这和传统的决策树相同。但是extra trees比较的激进,他会随机的选择一个特征值来划分决策树。
    • 从第二点可以看出,由于随机选择了特征值的划分点位,而不是最优点位,这样会导致生成的决策树的规模一般会大
      于RF所生成的决策树。也就是说,模型的方差相对于RF进一步减少,但是偏倚相对于RF进一步增大。在某些时候,extratrees的泛化能力比RF更好。

Totally Random Trees Embedding

  • Totally Random Trees Embedding(以下简称 TRTE)是一种非监督学习的数据转化方法。它将低维的数据集映射到高维,从而让映射到高维的数据更好的运用于分类回归模型。
  • 我们知道,在支持向量机中运用了核方法来将低维的数据集映射到高维,此处TRTE提供了另外一种方法。
    • (1)TRTE在数据转化的过程也使用了类似于RF的方法,建立T个决策树来拟合数据。
    • (2)当决策树建立完毕以后,数据集里的每个数据在T个决策树中叶子节点的位置也定下来了。
    • 比如我们有3颗决策树,每个决策树有5个叶子节点,某个数据特征 划分到第一个决策树的第2个叶子节点,第二个决策树的第3个叶子节点,第三个决策 树的第5个叶子节点。则x映射后的特征编码为(0,1,0,0,0, 0,0,1,0,0, 0,0,0,0,1), 有15维的高维特征。这里特征维度之间加上空格是为了强调三颗决 策树各自的子编码。

3. 如何判断函数凸或非凸?什么是凸优化?

  • 定义
  • 几何角度。二阶导数在区间上非负,就称为凸函数。

4. 如何解决类别不平衡问题?

  • 有些情况下训练集中的样本分布很不平衡,例如在肿瘤检测等问题中,正样本的个数往往非常的少。从线性分类器的角度,在用对新样本进行分类的时候,事实上在用预测出的y值和一个y值进行比较。几率反映了正例可能性和反例可能性的比值,阈值0.5恰好表明分类器认为正反的可能性相同。
  • 在样本不均衡的情况下,应该是分类器的预测几率高于观测几率就判断为正例,因此应该是时预测为正例,这种策略称为rebalancing。

但是训练集并不一定是真实样本总体的无偏采样,通常有三种做法,

* 权重法。我们可以对训练集里的每个类别加一个权重class weight。如果该类别的样本数多,那么它的权重就低,反之则权重就高。sklearn中,绝大多数分类算法都有class weight和 sample weight可以使用
* 采样法常用的也有两种思路,
    * 一种是对类别样本数多的样本做欠采样,直到类别中的样本数一致为止。
    * 一种是对类别样本数少的样本做过采样, 直到类别中的样本数一致为止,最后再去拟合模型。
* SMOTE算法。上述两种常用的采样法很简单,但是都有个问题,就是采样后 改变了训练集的分布,可能导致泛化能力差 。
    * 基本思想是对少数类样本进行分析并根据少数类样本人工合成新样本添加到数据集中。比如,该类别的候选合成集合有两个样本(X1,Y1),(X2,Y2) ,那么SMOTE采样后,可以得到一个新的训练样本((X1+X2)/2,Y1 ).

5. 解释对偶的概念。

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

6. 如何进行特征选择?

为什么要进行特征的选择

* 首先在现实任务中我们会遇到维数灾难的问题(样本密度非常稀疏),若能从中选择一部分特征,那么这个问题能大大缓解。
    * 维数灾难:随着维数的增加,算法的效果并没有更好。
    * (1)维数增多会导致样本密度降低(n个样本在边长为w的p维空间中,样本的密度为:n/pow(w,p)),导致结果容易过拟合。
    * (2)维数增多会带来高维空间数据稀疏化问题(在p维空间中,为了保持k的拟合覆盖率,需要pow(1/p,x)=k样本数),导致结果容易过拟合。
    * (3)维数增多样本远离中心点,导致边缘样本密集过高,无法拟合
* 另外就是去除不相关特征会降低学习任务的难度,增加模型的泛化能力。

常见的特征选择方式有过滤式,包裹式和嵌入式,filter,wrapper和embedding。

* Filter。 先对数据集进行特征选择,再训练学习器。
    * 特征的方差
    * 相关系数。主要用于输出连续值的监督学习算法中
    * 假设检验。检验某个特征分布和输出值分布之间的相关性。有卡方,F,T检验
    * 信息熵。利用决策树的的思想。
    * 在没有什么思路的 时候,可以优先使用卡方检验和互信息来做特征选择。
    
* Wrapper。使用一个机器学习模型来进行多轮训练,每轮训练后,消除若干权值系数的对应的特征,再基于新的特征集进行下一轮训练。在sklearn中,可以使用RFE函数来选择特征,通常计算量比较大。
    *  SVM-RFE算法来讨论这个特征选择的思路。这个算法以支持向量机来做RFE的机器学习模型选择特征。它在第一轮           训练的时候,会选择所有的特征来训练,得到了分类的超平面 后,如果有n个特征,那么RFE�SVM会选择出 中分           量的平方值 最小的那个序号i对应的特征,将其排除,在第二类的时候,特征数就剩下n-1个了,我们继续用这           n-1个特征和输出值来训练SVM,同样的,去掉 最小的那个序号i对应的特征。以此类推,直到剩下的特征数满足           我们的需求为止。
* 嵌入式。它和RFE的区别是它不是通过不停的筛掉特征来进行训练,而是使用的都是特征全集。在sklearn中,使用SelectFromModel函数来选择特征。例如L1正则化更易于获得稀疏解,而L2正则化更不容易过拟合。
    *  最常用的是使用L1正则化和L2正则化来选择特征。我们讲到正则化惩罚项越大,那么模型的系数就会越小。当正           则化惩罚项大到一定的程度的时候,部分特征系数会变成0,当正则化惩罚项继续增大到一定程度时,所有的特           征系数都会趋于0. 但是我们会发现一部分特征系数会更容易先变成0,这部分系数就是可以筛掉的。也就是说,           我们选择特征系数较大的特征。常用的L1正则化和L2正则化来选择特征的基学习器是逻辑回归
* 寻找高级特征
    * 若干项特征加和: 我们假设你希望根据每日销售额得到一周销售额的特征。将最近的7天的销售额相加得到。
    * 若干项特征之差: 假设你已经拥有每周销售额以及每月销售额两项特征,可以求一周前一月内的销售额。
    * 若干项特征乘积: 假设你有商品价格和商品销量的特征,那么就可以得到销售额的特征。
    * 若干项特征除商: 假设你有每个用户的销售额和购买的商品件数,那么就是得到该用户平均每件商品的销售额

7. 为什么会产生过拟合,有哪些方法可以预防或克服过拟合?

  • 一般在机器学习中,将学习器在训练集上的误差称为训练误差,在测试集上的误差称为测试误差,在新样本上的误差称为泛化误差。

  • 显然我们希望得到泛化误差小的学习器,但是我们事先并不知道新样本,因此实际上往往努力使测试误差最小化。然而,当学习器将训练样本学的太好的时候,往往可能把训练样本自身的特点当做了潜在样本具有的一般性质。这样就会导致泛化性能下降,称之为过拟合,相反,欠拟合一般指对训练样本的一般性质尚未学习好,在训练集上仍然有较大的误差。

  • 欠拟合:一般来说欠拟合更容易解决一些,例如增加模型的复杂度,增加决策树中的分支,增加神经网络中的训练次数等等。

  • 过拟合:一般认为过拟合是无法彻底避免的,因为机器学习面临的问题一般是np-hard,所以会牺牲一些泛化能力。过拟合的解决方案一般有增加样本数量,对样本进行降维,降低模型复杂度,利用先验知识(L1,L2正则化),利用cross-validation,early stopping等等。

8. 什么是偏差与方差?

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

9. 神经网络的原理,如何进行训练?

  • 一般而言认为神经网络是由单个的神经元和不同神经元之间的连接构成,不够的结构组成不同的神经网络。最常见的神经网络一般称为多层前馈神经网络,除了输入和输出层,中间隐藏层的个数被称为神经网络的层数。BP算法是训练神经网络中最著名的算法,其本质是梯度下降和链式法则。

10. 介绍卷积神经网络,和 DBN 有什么区别?

  • 卷积神经网络的特点是卷积核,CNN中使用了权共享,通过不断的上采用和卷积得到不同的特征表示,采样层又称为pooling层,基于局部相关性原理进行亚采样,在减少数据量的同时保持有用的信息。DBN是深度信念网络,每一层是一个RBM,整个网络可以视为RBM堆叠得到,通常使用无监督逐层训练,从第一层开始,每一层利用上一层的输入进行训练,等各层训练结束之后再利用BP算法对整个网络进行训练。

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

  • 在一些情况下,我们得到的观察数据有未知的隐含数据,此时我们未知的有隐含数据和模型参数,因而无法直接用最大似然估计得到模型分布的参数。由于求和的项数将随着隐变量的数目指数上升,会给梯度计算带来麻烦。

  • 用EM算法求解的模型一般有GMM或者协同过滤,k-means其实也属于EM。

  • 基本思想。既然我们无法直接求出模型分布参数,那么我们可以先猜想隐含数据(EM算法的E步),接着基于观察数据和猜测的隐含数据一起来极大化对数似然,求解我们的模型参数(EM算法的M步)。由于我们之前的隐藏数据是猜测的。此时得到的模型参数一般还不是我们想要的结果。不过没关系,我们基于当前得到的模型参数,继续猜测隐含数据(EM算法的E步),然后继续极大化对数似然,求解我们的模型参数(EM算法的M步)。以此类推,不断的迭代下去,直到模型分布参数基本无变化,算法收敛,找到合适的模型参数。

  • EM算法可以保证收敛到一个稳定点,但是却不能保证收敛到全局的极大值点,因此它是局部最优的算法,当然,如果我们的优化目标是凸的,则EM算法可以保证收敛到全局最大值,这点和梯度下降法这样的迭代算法相同。

12. 用 EM 算法推导解释 Kmeans。

  • k-means在运行之前需要进行归一化处理,不然可能会因为样本在某些维度上,数据过大导致距离计算失效。
  • k-means中每个样本所属的类就可以看成是一个隐变量,在E步中,我们固定每个类的中心,通过对每一个样本选择最近的类来优化目标函数,
  • 在M步,重新更新每个类的中心点,该步骤可以通过对目标函数求导实现,最终可得新的类中心就是类中样本的均值。

13. 用过哪些聚类算法,解释密度聚类算法。

  • K-Means算法.算法思想,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大.
    • 初始随机给定K个簇中心, 按照最邻近原则把待分类样本点分到各个簇。
    • 然后按平均法重新计算各个簇的质心, 从而确定新的簇心。
    • 一直迭代, 直到簇心的移动距离小于某个给定的值。

初始化优化K-Means++。

  • k个初始化的质心的位置选择对最后的聚类结果和运行时间都有很大的影响,因此需要选择合适的k个质心。
    • a) 从输入的数据点集合中随机选择一个点作为第一个聚类中心.
    • b) 对于数据集中的每一个点 ,计算它与聚类中心中最近聚类中心的距离.
    • c) 选择一个新的数据点作为新的聚类中心,选择的原则是: 较大的点,被选取作为聚类中心的概率较大.
    • d) 重复b和c直到选择出k个聚类质心.
    • e) 利用这k个质心来作为初始化质心去运行标准的K-Means算法.

距离计算优化elkan K-Means

大样本优化Mini Batch K-Means。

  • 一般是通过随机无放回采样得到的,为了增加算法的准确性,一般用不同的随机采样集来得到聚类簇,选择其中最优的聚类簇。

  • 密度聚类算法的基本思想通过样本分布的紧密程度决定其类别。同一类别的样本,他们之间的紧密相连的。将所有各组紧密相连的样本划为各个不同的类别,则我们就得到了最终的所有聚类类别结果。

  • 密度聚类算法的流程

    • (1)任意选择一个没有类别的核心对象作为种子,然后找到所有这个核心对象能够密度可达的样本集合,即为一个聚类簇。
    • (2)继续选择另一个没有类别的核心对象去寻找密度可达的样本集合,这样就得到另一个聚类簇。
    • (3)一直运行到所有核心对象都有类别为止。
  • DBSCAN最大的不同就是不需要输入类别数,可以对任意形状的稠密数据集进行聚类(K-Means之类的聚类算法一般只适用于凸数据集)。

  • 对数据集中的异常点不敏感,可以同来检测异常点。如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合。

14. 解释贝叶斯公式和朴素贝叶斯分类。

  • 一所学校里面有 60% 的男生,40% 的女生。男生总是穿长裤,女生则一半穿长裤一半穿裙子。然而,假设你走在校园中,迎面走来一个穿长裤的学生,你能够推断出他(她)是男生的概率是多大吗?

  • 朴素贝叶斯分类算法利用贝叶斯定理来预测一个未知类别的样本属于各个类别的可能性,选择其中可能性最大的一个类别作为该样本的最终类别。

  • 特征之间的条件独立性假设,显然这种假设不符合实际,这也是名称中“朴素”的由来.

  • 容易实现,没有复杂的求导和矩阵运算,因此效率很高。对缺失数据不太敏感,算法也比较简单,常用于文本分类。

15. L1和L2正则化的作用,解释。

  • 两者都起到防止过拟合作用。L1偏向于参数稀疏性,L2偏向于参数分布较为稠密。

  • 拟合过程中通常都倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。

  • L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择。

    • 稀疏矩阵指的是很多元素为0,只有少数元素是非零值的矩阵,即得到的线性回归模型的大部分系数都是0
  • L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合。

    • 梯度下降法中,求解梯度下降的距离。与L2正则化的迭代公式相比,每一次迭代,θj都要先乘以一个小于1的因子,从而使得θj不断减小,因此总得来看,θ是不断减小的。

16. KNN和k-means聚类由什么不同?

  • KNN是一种监督学习算法,而k-means 是非监督的。这两种算法看起来很相似,都需要计算样本之间的距离。knn算法需要事先已有标注好的数据,当你需要对未标注的数据进行分类时,统计它附近最近的k个样本,将其划分为样本数最多的类别中。k-means聚类只需要一些未分类的数据点和阀值,算法会逐渐将样本点进行分成族类。

17. 解释一下ROC曲线的原理

  • ROC曲线是真正率(y)和假正率(x)在不同的阀值下之间的图形表示关系。通常用作权衡模型的敏感度与模型对一个错误分类报警的概率。
  • 真正率表示:(实际为正例,预测为正例 )/(实际为正例)
  • 假正率表示:(实际为反例,预测为正例 )/(实际为反例)
  • (0,0)点表示所有样本都被预测为负,此时阀值很大。
  • (1,1)点表示所有样本都被预测为正,此时阀值很小。

18. P-R曲线

  • P-R曲线就是精确率precision作为纵坐标轴,召回率recall作为横坐标轴的曲线。
  • p表示(实际为正例,预测为正例 )/(预测为正例)
  • R表示(实际为正例,预测为正例 )/(实际为正例)

19. 解释SVM

  • SVM关心是那些离超平面很近的点,这些点很容易被误分类。如果我们可以让离超平面比较近的点尽可能的远离超平面,那么我们的分类效果会好有一些.
  • SVM的模型是让所有点到超平面的距离大于一定的距离,也就是所有的分类点要在各自类别的支持向量两边。用数学表达式表示出来。
  • 然后转化为最优化问题,在通过拉格朗日函数将我优化目标转化为无约束的优化函数。在运用SMO算法求解参数。
  • 非线性可分情况,软间隔,进行坐标变化。引入核函数。常见的:多项式核函数、指数核函数、高斯核函数。

20. 第一类误差和第二类误差有什么区别?

  • 第一类误差:假设为真的情况下,作出了拒绝原假设的一种错误推断。
  • 第二类误差:假设为假的情况下,做出了接受原假设的一种错误判断。

21. 概率和似然有什么区别?

  • 概率和似然都是指随机事件的可能性,但在统计学中,概率和似然有截然不同的用法。
  • 概率描述了已知参数时的随机变量的输出结果;
  • 似然描述了已知随机变量输出结果时,未知参数的可能取值。
  • 我们总是对随机变量的取值谈概率,而在非贝叶斯统计的角度下,参数是一个实数而非随机变量,所以我们一般不谈一个参数的概率,而说似然。

22. 什么是深度学习,它与机器学习算法之间有什么联系?

  • 深度学习是机器学习的一个子领域,它关心的是参照神经学科的理论构建神经网络,使用反向传播对大量未标注或半结构化的数据进行建模。从这个角度看,深度学习可以看成一种非监督学习算法,通过使用神经网络学习数据的表示。

23. 生成模型与判别模型有什么区别?

  • 生成模型会学习数据的分布;判别模型学习的是不同类型数据之间的区别,不学习数据内部特点。在分类问题上,判别模型会优于生成模型。
  • 判别模型求解的思路是:条件分布——>模型参数后验概率最大——->(似然函数\cdot 参数先验)最大——->最大似然
  • 生成模型的求解思路是:联合分布——->求解类别先验概率和类别条件概率
  • 常见的生成方法有混合高斯模型、朴素贝叶斯法和隐形马尔科夫模型等,常见的判别方法有SVM、LR等

24 交叉检验如何用在时间序列数据上?

  • 与标准的k-folds 交叉检验不同,数据不是随机分布的,而是具有时序性的。如果模式出现在后期,模型仍然需要选择先前时间的数据,尽管前期对模式无影响。我们可以如下这么做:
  • fold1:training[1], test[2]
  • fold2:training[1 2], test[3]
  • fold3:training[1 2 3], test[4]
  • fold4:training[1 2 3 4], test[5]
  • fold5:training[1 2 3 4 5], test[6]

25. 如何对决策树进行剪枝(预剪枝,后剪枝)?

  • 剪枝是决策树发生过拟合后,为了降低模型复杂度,提高模型准确率的一种做法。可以分为自上而下和自下而上两种。
  • 常见的方法有:误差降低剪枝(REP),悲观剪枝(PEP)和代价复杂度剪枝(CCP)。

REP

* 既然完全的决策树会对训练集产生过度拟合,那么就再找一个测试数据集来纠正它。 
* (1)对于完全决策树中的每一个非叶子节点的子树,尝试着把它替换成一个叶子节点,该叶子节点的类别我们用子树中存在最多的那个类来代替,这样就产生了一个简化决策树。
* (2)然后比较这两个决策树在测试数据集中的表现,如果简化决策树在测试数据集中的错误比较少,并且该子树里面没有包含另外一个具有类似特性的子树,那么该子树就可以替换成叶子节点。
* (3)该算法自底而上的方式遍历所有的子树,直至没有任何子树可以替换时,算法就可以终止。
* REP方法很直接,但是需要一个额外的测试数据集,为了解决这个问题,于是就提出了悲观剪枝(PEP)。
* 简单的来说就是对树的每一个结点进行剪枝,如果剪掉某个结点会提高模型准确率,那么将其剪掉。

REP方法是一种比较简单的后剪枝的方法,在该方法中,可用的数据被分成两个样例集合:一个训练集用来形成学习到的决策树,一个分离的验证集用来评估这个决策树在后续数据上的精度,确切地说是用来评估修剪这个决策树的影响。

* 这个方法的动机是:即使学习器可能会被训练集中的随机错误和巧合规律所误导,但验证集合不大可能表现出同样的随机波动。所以验证集可以用来对过度拟合训练集中的虚假特征提供防护检验。
* 因为训练集合的过拟合,使得验证集合数据能够对其进行修正,反复进行上面的操作,从底向上的处理结点,删除那些能够最大限度的提高验证集合的精度的结点,直到进一步修剪有害为止(有害是指修剪会减低验证集合的精度)。
* REP是最简单的后剪枝方法之一,不过由于使用独立的测试集,原始决策树相比,修改后的决策树可能偏向于过度修剪。这是因为一些不会再测试集中出现的很稀少的训练集实例所对应的分枝在剪枝过如果训练集较小,通常不考虑采用REP算法。
* 尽管REP有这个缺点,不过REP仍然作为一种基准来评价其它剪枝算法的性能。它对于两阶段决策树学习方法的优点和缺点提供了了一个很好的学习思路。由于验证集合没有参与决策树的创建,所以用REP剪枝后的决策树对于测试样例的偏差要好很多,能够解决一定程度的过拟合问题。

PEP

ccp

  • 代价复杂度选择节点表面误差率增益值最小的非叶子节点,删除该非叶子节点的左右子节点,若有多个非叶子节点的表面误差率增益值相同小,则选择非叶子节点中子节点数最多的非叶子节点进行剪枝。

26. 什么是F1数,怎么使用它?

  • F1数是衡量模型性能的一个指标。它是模型精准率和召回率的加权平均,1表示最好,0表示最差。在分类问题中有时精准率和召回率不会同时都高,那么我们可以使用F1数。

27. 什么时候你应该使用分类而不是回归?

  • 分类会产生离散的数值,使得数据严格的分为不同类。回归会得到连续的值。当你需要知道你的数据明确的属于那些类时你可以用分类。

28. 如何确保你的模型没有过拟合?

  • 过度拟合的训练数据以及数据携带的噪音,对于测试数据会带来不确定的推测。有如下三种方法避免过拟合:

  • 保持模型尽可能地简单:通过考量较少的变量和参数来减少方差,达到数据中消除部分噪音的效果。

  • 使用交叉检验的手段如:k-folds cross-validation。

  • 使用正则化的技术如:LASSO方法来惩罚模型中可能导致过拟合的参数。

RF与GBDT之间的区别

(1)相同点

* 都是由多棵树组成
* 最终的结果都是由多棵树一起决定

(2)不同点

* 组成随机森林的树可以分类树也可以是回归树,而GBDT只由回归树组成
* 组成随机森林的树可以并行生成,而GBDT是串行生成
* 随机森林的结果是多数表决表决的,而GBDT则是多棵树累加之和
* 随机森林对异常值不敏感,而GBDT对异常值比较敏感
* 随机森林是通过减少模型的方差来提高性能,而GBDT是减少模型的偏差来提高性能的
* 随机森林不需要进行数据预处理,即特征归一化。而GBDT则需要进行特征归一化

29. GBDT与xgboost的对比

* xgboost能自动利用cpu的多线程,而且适当改进了gradient boosting,加了剪枝,控制了模型的复杂程度.
* 传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这时xgboost相当于带L1和L2正则化项。
* 传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。
* xgboost在代价函数里加入了正则项,用于控制模型的复杂度。使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。正则项里包含了树的叶子节点个数。
* 列抽样(column subsampling)。xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。
*  xgboost工具支持并行。注意xgboost的并行不是tree粒度的并行,xgboost也是一次迭代完才能进行下一次迭代的。xgboost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
* 可并行的近似直方图算法。树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,所以xgboost还提出了一种可并行的近似直方图算法,用于高效地生成候选的分割点。

*随机森林优点:对于很多数据集表现良好,精确度较高;不易过拟合;可得到变量的重要性排序;既能处理离散型数据,也能处理连续型数据;不需要归一化;能够很好的处理缺失数据;易并行化。

30. 为什么要归一化呢?

* 1)归一化后加快了梯度下降求最优解的速度;
* 2)归一化有可能提高精度。

31. L1范式和L2方式的区别

  • (1)L1范式是对应参数向量绝对值之和
  • (2)L1范式具有稀疏性
  • (3)L1范式可以用来作为特征选择,并且可解释性较强
  • (4)L2范式是对应参数向量的平方和,再求平方根
  • (5)L2范式是为了防止机器学习的过拟合,提升模型的泛化能力

32. 优化算法及其优缺点

  • (1)批量梯度下降
    • 优点:准确度高
    • 缺点:收敛速度较慢
  • (2)随机梯度下降
    • 优点:收敛速度较快
    • 缺点:准确率低
  • (3)mini_batch梯度下降
    • 综合随机梯度下降和批量梯度下降的优缺点,提取的一个中和的方法。
  • (4)牛顿法
    • 牛顿法在迭代的时候,需要计算Hessian矩阵,当维度较高的时候,计算Hessian矩阵比较困难。
  • (5)拟牛顿法
    • 拟牛顿法是为了改进牛顿法在迭代过程中,计算Hessian矩阵而提取的算法,它采用的方式是通过逼近Hessian的方式来进行求解。
  • (6)共轭梯度
  • (7)启发式的优化算法
    • 启发式的优化算法有遗传算法,粒子群算法等。这类算法的主要思想就是设定一个目标函数,每次迭代根据相应的策略优化种群。直到满足什么样的条件为止。

33. 坐标轴下降法和梯度下降的求极值比较

a) 坐标轴下降法在每次迭代中在当前点处 沿一个坐标方向进行一维搜索 ,固定其他的坐标方向,找到一个函数的局部极小值。而梯度下降总是沿着梯度的负方向求函数的局部最小值
b) 坐标轴下降优化方法是一种非梯度优化算法。在整个过程中依次循环使用不同的坐标方向进行迭代,一个周期的一维搜索迭代过程相当于一个梯度下降的迭代。
c) 梯度下降是利用目标函数的导数来确定搜索方向的,该梯度方向可能不与任何坐标轴平行。而坐标轴下降法法是利用当前坐标方向进行搜索,不需要求目标函数的导数,只按照某一坐标方向进行搜索最小值
d) 两者都是迭代方法,且每一轮迭代,都需要O(mn)的计算量(m为样本数,n为系数向量的维度)

你可能感兴趣的:(机器学习面试题)