逻辑回归面试题

逻辑回归为什么要对特征进行离散化?

在工业界,很少直接将连续值做啥逻辑回归模型的特征输入,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型,优势如下:

1、离散特征的增加和减少都很容易,易于模型的快速迭代

2、稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;

3、离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;

4、离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;

5、特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相 反,所以怎么划分区间是门学问;

6、特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险

模型是使用离散特征还是连续特征,其实是一个“海量离散特征+简单模型” 同 “少量连续特征+复杂模型”的权衡。既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是折腾模型了。通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还须拭目以待。

 

逻辑回归和线性回归的比较?

虽然逻辑回归能够用于分类,但是其本质是线性回归。

1、Logistic 回归是在线性回归的实数范围输出的基础上,在特征到结果的映射中加入了一层sigmoid函数(非线性)映射,将值收敛到了0~1范围内(即先把特征进行线性求和,之后使用sigmoid函数来预测结果),其损失函数也从最小二乘函数变为了对数损失函数,以提供最优化所需要的导数(sigmoid函数是softmax函数的二元特例,其导数均为函数值的f*(1-f)形式)。

2、线性回归优化目标函数是最小二乘,逻辑回归的优化目标函数是似然函数

3、线性回归是在整数域范围内进行预测,敏感度一致,而逻辑回归的分类范围是将输入线性到[0,1]之间了,逻辑回归就是一种减小预测范围,将预测值限定为[0,1]间的一种回归模型。逻辑回归鲁棒性更好,可以轻松处理0/1分类问题。

4、LR往往解决二元0/1分类的问题的,只是它和线性回归耦合的太紧,冠上了回归的名字,若要求多元分类,将sigmoid换为softmax即可。

 

LR与线性回归的区别?

线性回归用来做预测,LR用来做分类。线性回归用来拟合函数,LR用来预测函数。线性回归用最小二乘法计算参数,LR用最大似然估计计算参数。线性回归易受到异常值影响,LR对异常值较好稳定性。

线性回归是解决回归问题。 结果是连续型,主要解决房租预测等问题。

逻辑回归是分类问题,不是回归问题,结果是离散型,主要解决二分类问题。

 

过拟合问题?

对于线性回归或逻辑回归的损失函数构成的模型,可能会有些权重很大,有些权重很小,导致过拟合(就是过分拟合了训练数据),使得模型的复杂度提高,泛化能力较差(对未知数据的预测能力)

问题的主因:过拟合问题往往源自过多的特征

解决方法

1、减少特征数量(减少特征会失去一些信息,即使特征选的很好)

可用人工选择要保留的特征;
模型选择算法;
2、正则化(特征较多时比较有效)

保留所有特征,但减少θ的大小
正则化方法

正则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项或惩罚项。正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化项就越大。

正则项可以取不同的形式,在回归问题中取平方损失,就是参数的L2范数,也可以取L1范数。取平方损失时,模型的损失函数变为:

lambda是正则项系数:

1、如果它的值很大,说明对模型的复杂度惩罚大,对拟合数据的损失惩罚小,这样它就不会过分拟合数据,在训练数据上的偏差较大,在未知数据上的方差较小,但是可能出现欠拟合的现象

2、如果它的值很小说明比较注重对训练数据的拟合,在训练数据上的偏差会小,但是可能会导致过拟合

 

 集成学习面试题

Boosting算法有哪两类,它们之间的区别是什么?

Boosting算法主要有AdaBoost(Adaptive Boost)自适应提升算法和Gradient Boosting梯度提升算法。最主要的区别在于两者如何识别和解决模型的问题。AdaBoost用错分的数据样本来识别问题,通过调整错分数据样本的权重来改进模型。Gradient Boosting主要通过负梯度来识别问题,通过计算负梯度来改进模型。

什么是Bias(偏差)和Error(误差)?

偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力,偏差越大,预测值越偏离真实数据的标签。
方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响,方差越大,预测值的分布越分散。
具体可参考:机器学习中的Bias(偏差),Error(误差),和Variance(方差)有什么区别和联系?.

为什么说Bagging可以减少弱分类器的方差,而Boosting 可以减少弱分类器的偏差?

Bagging就是再取样 (Bootstrap) 然后在每个样本上训练出来的模型取平均,所以是降低模型的variance. Bagging 比如Random Forest 这种先天并行的算法都有这个效果。
Boosting 则是迭代算法,每一次迭代都根据上一次迭代的预测结果对样本进行加权,所以随着迭代不断进行,误差会越来越小,所以模型的 bias 会不断降低。这种算法无法并行,如Adaptive Boosting.

bagging是对许多强(甚至过强)的分类器求平均。在这里,每个单独的分类器的bias都是低的,平均之后bias依然低;而每个单独的分类器都强到可能产生overfitting的程度,也就是variance高求平均的操作起到的作用就是降低这个variance

boosting是把许多弱的分类器组合成一个强的分类器。弱的分类器bias高,而强的分类器bias低,所以说boosting起到了降低bias的作用。variance不是boosting的主要考虑因素。Boosting 则是迭代算法,每一次迭代都根据上一次迭代的预测结果对样本进行加权,所以随着迭代不断进行,误差会越来越小,所以模型的 bias 会不断降低。这种算法无法并行,例子比如Adaptive Boosting

简述 GBDT 算法

GBDT 利用加法模型和前向分步算法实现学习的优化过程。并在优化损失函数时利用损失函数对当前模型的负梯度作为残差的估计,通过不断拟合负梯度的值依次得到各个基分类器

 

GBDT 和 RF 的比较

  • 相同点:
  1. 都是由多棵树组成;最终的结果都由多棵树共同决定。
  • 不同点:
  1. 组成随机森林的可以是分类树、回归树;组成 GBDT 只能是回归树
  2. 组成随机森林的树可以并行生成(Bagging);GBDT 只能串行生成(Boosting)
  3. 对于最终的输出结果而言,随机森林使用多数投票或者简单平均;而 GBDT 则是将所有结果累加起来,或者加权累加起来
  4. 随机森林对异常值不敏感,GBDT 对异常值非常敏感
  5. 随机森林对训练集一视同仁权值一样,GBDT 是基于权值的弱分类器的集成
  6. 随机森林通过减小模型的方差提高性能,GBDT 通过减少模型偏差提高性能

GBDT为什么使用CART回归树而不是使用分类树

这个是GBDT基本原理决定的,GBDT主要是利用残差逼近的方式,这就意味每棵树的值是连续的可叠加的,这一点和回归树输出连续值不谋而合,如果采用分类树,那么残差逼近进行叠加就会使得这种叠加没有意义

XGBoost与GBDT有什么不同

  • 基分类器:XGBoost的基分类器不仅支持CART决策树,还支持线性分类器,此时XGBoost相当于带L1和L2正则化项的Logistic回归(分类问题)或者线性回归(回归问题)。

  • 导数信息:XGBoost对损失函数做了二阶泰勒展开,GBDT只用了一阶导数信息,并且XGBoost还支持自定义损失函数,只要损失函数一阶、二阶可导

  • 正则项:XGBoost的目标函数加了正则项, 相当于预剪枝,使得学习出来的模型更加不容易过拟合。

  • 列抽样:XGBoost支持列采样,与随机森林类似,用于防止过拟合。

  • 缺失值处理:对树中的每个非叶子结点,XGBoost可以自动学习出它的默认分裂方向。如果某个样本该特征值缺失,会将其划入默认分支。

  • 并行化:注意不是tree维度的并行,而是特征维度的并行。XGBoost预先将每个特征按特征值排好序,存储为块结构,分裂结点时可以采用多线程并行查找每个特征的最佳分割点,极大提升训练速度

 

XGBoost为什么使用泰勒二阶展开

  • 精准性:相对于GBDT的一阶泰勒展开,XGBoost采用二阶泰勒展开,可以更为精准的逼近真实的损失函数

  • 可扩展性:损失函数支持自定义,只需要新的损失函数二阶可导。

  • 更容易收敛,收敛得更快

 

XGBoost防止过拟合的方法

XGBoost在设计时,为了防止过拟合做了很多优化,具体如下:

  • 目标函数添加正则项:叶子节点个数+叶子节点权重的L2正则化

  • 列抽样:训练的时候只用一部分特征(不考虑剩余的block块即可)

  • 子采样:每轮计算可以不使用全部样本,使算法更加保守

  • shrinkage: 可以叫学习率或步长,为了给后面的训练留出更多的学习空间

XGBoost如何处理不平衡数据

对于不平衡的数据集,例如用户的购买行为,肯定是极其不平衡的,这对XGBoost的训练有很大的影响,XGBoost有两种自带的方法来解决:

第一种,如果你在意AUC,采用AUC来评估模型的性能,那你可以通过设置scale_pos_weight来平衡正样本和负样本的权重。例如,当正负样本比例为1:10时,scale_pos_weight可以取10;

第二种,如果你在意概率(预测得分的合理性),你不能重新平衡数据集(会破坏数据的真实分布),应该设置max_delta_step为一个有限数字来帮助收敛(基模型为LR时有效)。

 

 

决策树面试题

算法 支持模型 树结构 特征选择 连续值处理 缺失值处理  剪枝
ID3 分类 多叉树 信息增益 不支持  不支持  不支持
C4.5 分类 多叉树 信息增益比 支持  支持  支持
CART 分类,回归 二叉树 基尼系数,均方差 支持  支持  支持

算法十问

1.决策树和条件概率分布的关系?

决策树可以表示成给定条件下类的条件概率分布. 决策树中的每一条路径都对应是划分的一个条件概率分布. 每一个叶子节点都是通过多个条件之后的划分空间,在叶子节点中计算每个类的条件概率,必然会倾向于某一个类,即这个类的概率最大.

2.ID3和C4.5算法可以处理实数特征吗?如果可以应该怎么处理?如果不可以请给出理由?

ID3和C4.5使用划分节点的方法分别是信息增益和信息增益比,从这个公式中我们可以看到 这是处理类别特征的方法,实数特征能够计算信息增益吗?我们可以定义X是实数特征的信息增益是,.其中,则. 对于每一个实数可以使用这种方式进行分割. 除此之外,我们还可以使用特征的分桶,将实数特征映射到有限个桶中,可以直接使用ID3和C4.5算法.

3.既然信息增益可以计算,为什么C4.5还使用信息增益比?

在使用信息增益的时候,如果某个特征有很多取值,使用这个取值多的特征会的大的信息增益,这个问题是出现很多分支,将数据划分更细,模型复杂度高,出现过拟合的机率更大。使用信息增益比就是为了解决偏向于选择取值较多的特征的问题. 使用信息增益比对取值多的特征加上的惩罚,对这个问题进行了校正.

4.基尼指数可以表示数据不确定性,信息熵也可以表示数据的不确定性. 为什么CART使用基尼指数?

信息熵0, logK都是值越大,数据的不确定性越大. 信息熵需要计算对数,计算量大;信息熵是可以处理多个类别,基尼指数就是针对两个类计算的,由于CART树是一个二叉树,每次都是选择yes or no进行划分,从这个角度也是应该选择简单的基尼指数进行计算.

5.决策树怎么剪枝?

一般算法在构造决策树的都是尽可能的细分,直到数据不可划分才会到达叶子节点,停止划分. 因为给训练数据巨大的信任,这种形式形式很容易造成过拟合,为了防止过拟合需要进行决策树剪枝. 一般分为预剪枝和后剪枝,预剪枝是在决策树的构建过程中加入限制,比如控制叶子节点最少的样本个数,提前停止. 后剪枝是在决策树构建完成之后,根据加上正则项的结构风险最小化自下向上进行的剪枝操作. 剪枝的目的就是防止过拟合,是模型在测试数据上变现良好,更加鲁棒.

6.ID3算法,为什么不选择具有最高预测精度的属性特征,而不是使用信息增益?

7.为什么使用贪心和其发生搜索建立决策树,为什么不直接使用暴力搜索建立最优的决策树?

决策树目的是构建一个与训练数据拟合很好,并且复杂度小的决策树. 因为从所有可能的决策树中直接选择最优的决策树是NP完全问题,在使用中一般使用启发式方法学习相对最优的决策树.

8.如果特征很多,决策树中最后没有用到的特征一定是无用吗?

不是无用的,从两个角度考虑,一是特征替代性,如果可以已经使用的特征A和特征B可以提点特征C,特征C可能就没有被使用,但是如果把特征C单独拿出来进行训练,依然有效. 其二,决策树的每一条路径就是计算条件概率的条件,前面的条件如果包含了后面的条件,只是这个条件在这棵树中是无用的,如果把这个条件拿出来也是可以帮助分析数据.

9.决策树的优点?

优点: 决策树模型可读性好,具有描述性,有助于人工分析;效率高,决策树只需要一次性构建,反复使用,每一次预测的最大计算次数不超过决策树的深度。缺点: 对中间值的缺失敏感;可能产生过度匹配的问题,即过拟合。

10.基尼系数存在的问题?

基尼指数偏向于多值属性;当类数较大时,基尼指数求解比较困难;基尼指数倾向于支持在两个分区中生成大小相同的测试。

posted on 2021-06-03 10:32  小小喽啰  阅读(742)  评论(0编辑  收藏  举报