机器学习面试总结



一、LR 面试常见问题

1.基础篇

1: 请写一下LR的cost function和梯度下降参数迭代公式

 

2. 高级篇

1:请推导一下LR的cost function公式

 

2:为什么逻辑回归比线性回归要好?

逻辑回归和线性回归首先都是广义的线性回归,

其次经典线性模型的优化目标函数是最小二乘,而逻辑回归则是似然函数,

另外线性回归在整个实数域范围内进行预测,敏感度一致,而分类范围,需要在[0,1]。逻辑回归就是一种减小预测范围,将预测值限定为[0,1]间的一种回归模型,因而对于这类问题来说,逻辑回归的鲁棒性比线性回归的要好

 

 

基于Batch的算法(Batch-GD, LBFGS, OWLQN)都是可以进行无损的并行化的。而基于SGD的算法(Ad Predictor, FTRL-Proximal)都只能进行有损的并行化。

并行化的工具MPI和OpenMP

6. LR为什么sigmoid函数。个函数有什么点和缺点?什么不用其他函数?

知乎解答:https://www.zhihu.com/question/35322351

有两种解释:

1.  伯努利分布 和 指数分布簇

假设lable 服从伯努利分布,然后推导至指数分布簇的形式,可以得出 LR 模型

 

2. 假设 x 服从正太分布, y服从 二项分布时,计算条件概率可以推导出 sigmoid函数

 

 

特点总结:

逻辑回归的优点:
1.实现简单;
2.分类计算量小、速度快,存储资源低
缺点:
1、容易欠拟合,一般准确度不太高
2、只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分;

二、常见的参数优化方法

博客:https://blog.csdn.net/qq_23052951/article/details/55274112

1. 梯度下降 和 随机梯度下降

2. 共轭梯度法:

3. 特点:

1)  梯度下降只考虑一阶导数,收敛慢,牛顿法考虑了二阶导数,收敛虽然快了,但是需要计算和存储hession矩阵

2) 其基本思想是把共轭性与最速下降方法相结合,利用已知点处的梯度构造一组共轭方向,并沿这组方向进行搜素,求出目标函数的极小点。

 

4. 牛顿法和拟牛顿法

在拟牛顿法中有两个重要的方法,一个是DFPDavidonFletcherPowell三人的首字母)方法,由Davidon1959)提出,FeletherPowell1963)发展,一个就是BFGS方法。下面分别来讨论一下。

L-BFGS算法对BFGS 的改进

特点:法要比梯度下降法更具有全局判断能力

梯度法从初始点的领域开始判断,在局部进行下降,然后步步逼近极值,往往是走之字型的。
牛顿法在二阶导数的作用下,从函数的凸性出发,直接搜索怎样到达极值点,也就是说在选择方向时,不仅考虑当前坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。

 

5. OWLQN 算法: 主要解决 L1 处不可求导的问题(具体细节就不知道了)

 

附录:

  1. SVM相关面试题

  1. 分类:线性可分支持向量机、线性支持向量机、非线性支持向量机

    线性可分支持向量机:w b 唯一,这时,解是唯一的。另一方面,此时的分隔超平面所产生的分类结果是最鲁棒的,对未知实例的泛化能力最强

    线性支持向量机:可以证明 w 的解唯一,b的解不唯一,而是存在一个区间

    2、为什么能将 函数间隔固定为 1(亲自推导一遍)?

  2. 与LR的区别

      相同:(1)lr svm 都是分类算法

             (2) 如果不考虑核函数,LR 和SVM 都是线性分类

            (3) 都是监督学习

            (4) 都是判别模型

    不同 : (1) 损失函数不同

             LR的损失函数

            

     

    SVM 的损失函数

      

    (2)SVM 只考虑边界附近的点,LR考虑的是全局(远离边界的点也有作用)

    (3) 解决非线性问题时,SVM 可以采取核函数机制

    (4) SVM的核函数自带正则(LR不带吗

  1. SVM 中 为什么将原始问题变为 对偶问题:

一、是对偶问题往往更易求解(当我们寻找约束存在时的最优点的时候,约束的存在虽然减小了需要搜寻的范围,但是却使问题变得更加复杂。为了使问题变得易于处理,我们的方法是把目标函数和约束全部融入一个新的函数,即拉格朗日函数,再通过这个函数来寻找最优点。

二、自然引入核函数,进而推广到非线性分类问题。

 

4.为什么引入软间隔:

作用:解决某些样本点不能满足函数间隔大于等于1的约束条件,为了解决这个问题,可以对每个样本点引入一个松弛变量,使函数间隔加上松弛变量大于等于1,这就是 线性支持向量机的原理,它的损失函数等价于 合页损失函数

 

 

 

  1. 为什么SVM要引入核函数?

     

     

    核值的矩阵K 称为Gram 矩阵,它是对称的,半正定的。

     

    5、常用的核函数

以下是几种常用的核函数表示:

线性核(Linear Kernel)

 

多项式核(Polynomial Kernel)

 

径向基核函数(Radial Basis Function)

 

也叫高斯核(Gaussian Kernel),因为可以看成如下核函数的领一个种形式:

 

径向基函数是指取值仅仅依赖于特定点距离的实值函数,也就是。任意一个满足特性的函数 Φ都叫做径向量函数,标准的一般使用欧氏距离,尽管其他距离函数也是可以的。所以另外两个比较常用的核函数,幂指数核,拉普拉斯核也属于径向基核函数。此外不太常用的径向基核还有ANOVA核,二次有理核,多元二次核,逆多元二次核。
幂指数核(Exponential Kernel)

 

拉普拉斯核(Laplacian Kernel)

 

ANOVA核(ANOVA Kernel)

 

二次有理核(Rational Quadratic Kernel)

 

多元二次核(Multiquadric Kernel)

 

逆多元二次核(Inverse Multiquadric Kernel)

 

另外一个简单实用的是Sigmoid核(Sigmoid Kernel)

 

以上几种是比较常用的,大部分在SVM,SVM-light以及RankSVM中可用参数直接设置。还有其他一些不常用的,如小波核,贝叶斯核,可以需要通过代码自己指定。

  1. svm RBF核函数的具体公式?

     

    注:核函数的选择要满足 正定核的原则

  2. 为什么SVM对缺失数据敏感?数据某一维度的缺失

    SVM的 基本原理是:在特征空间下,找一个线性可分的超平面,某些特征的缺失,将严重影响模型的训练。

  3. SVM是用的是哪个库?Sklearn/libsvm中的SVM都有什么参数可以调节?

     

  4. SVM如何处理多分类问题?

 

四、提升方法

1.提升方法的基本思路:

PAC(probably approximately correct): 概率近似正确

一个类,如果存在一个多项式的学习算法能够学习它,并且正确率很高,则称为强可学习,反之,如果学习的效果仅比随机猜测略好,那么成为弱可学习

基本思路:从弱学习算法出发,反复学习,得到一系列的弱分类器

提升方法需要解决的问题:1.如何在每一轮改变训练数据的权值或概率分布

                        (误分时,计算分类误差率时的权重)

                        2.如何将 弱分类器组合成一个强分类器

2.adaboost

adaboost 的解决思路:问题1的解决:提高那些被前一轮弱分类器错误分类样本的权值,而降低正确分类的样本权值。

问题2的解决:adaboost采取加权多数表决的方法。具体为,加大分类误差率小的弱分类权值,使其在表决中起较大的作用,减小分类器误差率大的弱分类器的权值

注:Adaboost 的训练误差是以指数速率下降的(与m有关, m为训练出的树的个数)

  1. Adaboost 算法的解释

    模型: 加法模型

    损失函数:指数函数

    学习算法:前向分布算法 

  2. 提升树

    分类模型:指数损失函数

    回归问题:平方误差损失函数

    当采用平方误差损失函数时,每一颗树的更新为 拟合数据的残差

五、梯度提升(GBDT)与XGBoost

为什么提出: 当损失函数时 平方损失 和 指数损失函数时,每一步优化很简单,但对于一般的损失函数而言,往往每一步优化并不是那么容易。

https://blog.csdn.net/qq_28031525/article/details/70207918

https://blog.csdn.net/leyounger/article/details/78771791

梯度提升解决了这个问题:

利用损失函数的负梯度 作为回归问题,提升树算法中的残差的 近似值,拟合一个回归树。

特点:

优点:

  1. GBDT具有挖掘有效的特征、实现特征的效果。

  1. 在相对较少的调参时间下,预测的准确度较高。

    A预测值 + A的残差 = A实际值

     

    缺点:当然由于它是Boosting,因此基学习器之前存在串行关系,难以并行训练数据。

     

    归问题线/线性),相logistic regression仅能用于线性回归,GBDT的适用面非常广。亦可用于二分类问题阈值,大于阈值为正例,反之为负例)。

  1. 传统的GBDT以CART树作为基学习器,XGBoost还支持线性分类器,这个时候XGBoost相当于L1和L2正则化的逻辑斯蒂回归(分类)或者线性回归(回归);

  2. 传统的GBDT在优化的时候只用到一阶导数信息,XGBoost则对代价函数进行了二阶泰勒展开,得到一阶和二阶导数;

  3. XGBoost在代价函数中加入了正则项,用于控制模型的复杂度。从权衡方差偏差来看,它降低了模型的方差,使学习出来的模型更加简单,放置过拟合,这也是XGBoost优于传统GBDT的一个特性;

  4. shrinkage(缩减),相当于学习速率(XGBoost中的eta)。XGBoost在进行完一次迭代时,会将叶子节点的权值乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。(GBDT也有学习速率);

  5. 列抽样。XGBoost借鉴了随机森林的做法,支持列抽样,不仅防止过 拟合,还能减少计算;

  6. 对缺失值的处理。对于特征的值有缺失的样本,XGBoost还可以自动 学习出它的分裂方向;

  7. XGBoost工具支持并行。Boosting不是一种串行的结构吗?怎么并行 的?注意XGBoost的并行不是tree粒度的并行,XGBoost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。XGBoost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),XGBoost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代 中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。

    XGboost:

     

      

五、LR和gbdt结合

概念LR这种线性模型很容易并行化,处理上亿条训练样本不是问题,但线性模型学习能力有限,需要大量特征工程预先分析出有效的特征、特征组合,从而去接增LR的非线性学能力。

LR模型中的特征合很关 但又无法直接通特征笛卡尔积解决,只能依靠人工经验,耗耗力同并不一定会来效果提升

   GBDTGradient Boost Decision Tree)是一种常用的非线性模型[6][7][8][9],它基于集成学中的boosting思想[10],每次迭代都在减少残差的梯度方向新建立一决策,迭代多少次就会生成多少决策GBDT的思想使其具有天然优势可以发现多种有区分性的特征以及特征合,决策的路径可以直接作LR输入特征使用,省去了人工寻找特征、特征组合的步骤

GBDT模型的特点,非常适合用来挖掘有效的特征、特征

猜你喜欢

转载自blog.csdn.net/qq_16761099/article/details/80455699
今日推荐