逻辑回归⾯试题
逻辑回归为什么要对特征进⾏离散化?
在⼯业界,很少直接将连续值做啥逻辑回归模型的特征输⼊,⽽是将连续特征离散化为⼀系列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)
为什么使用bootstrap?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.既然信息增益可以计算,为什么C
4.5还使⽤信息增益⽐?
在使⽤信息增益的时候,如果某个特征有很多取值,使⽤这个取值多的特征会的⼤的信息增益,这个问题是出现很多分⽀,将数据划分更细,模型复杂度⾼,出现过拟合的机率更⼤。使⽤信息增益⽐就是为了解决偏向于选择取值较多的特征的问题. 使⽤信息增益⽐对取值多的特征加上的惩罚,对这个问题进⾏了校正.
4.基尼指数可以表⽰数据不确定性,信息熵也可以表⽰数据的不确定性. 为什么CART使⽤基尼指数?
信息熵0, logK都是值越⼤,数据的不确定性越⼤. 信息熵需要计算对数,计算量⼤;信息熵是可以处理多个类别,基尼指数就是针对两个类计算的,由于CART树是⼀个⼆叉树,每次都是选择yes or no进⾏划分,从这个⾓度也是应该选择简单的基尼指数进⾏计算.
5.决策树怎么剪枝?
⼀般算法在构造决策树的都是尽可能的细分,直到数据不可划分才会到达叶⼦节点,停⽌划分. 因为给训练数据巨⼤的信任,这种形式形式很容易造成过拟合,为了防⽌过拟合需要进⾏决策树剪枝. ⼀般分为预剪枝和后剪枝,预剪枝是在决策树的构建过程中加⼊限制,⽐如控制叶⼦节点最少的样本个数,提前停⽌. 后剪枝是在决策树构建完成之后,根据加上正则项的结构风险最⼩化⾃下向上进⾏的剪枝操作. 剪枝的⽬的就是防⽌过拟合,是模型在测试数据上变现良好,更加鲁棒.
6.ID3算法,为什么不选择具有最⾼预测精度的属性特征,⽽不是使⽤信息增益?
7.为什么使⽤贪⼼和其发⽣搜索建⽴决策树,为什么不直接使⽤暴⼒搜索建⽴最优的决策树?
决策树⽬的是构建⼀个与训练数据拟合很好,并且复杂度⼩的决策树. 因为从所有可能的决策树中直接选择最优的决策树是NP完全问题,在使⽤中⼀般使⽤启发式⽅法学习相对最优的决策树.
8.如果特征很多,决策树中最后没有⽤到的特征⼀定是⽆⽤吗?
不是⽆⽤的,从两个⾓度考虑,⼀是特征替代性,如果可以已经使⽤的特征A和特征B可以提点特征C,特征C可能就没有被使⽤,但是如果把特征C单独拿出来进⾏训练,依然有效. 其⼆,决策树的每⼀条路径就是计算条件概率的条件,前⾯的条件如果包含了后⾯的条件,只是这个条件在这棵树中是⽆⽤的,如果把这个条件拿出来也是可以帮助分析数据.
9.决策树的优点?
优点: 决策树模型可读性好,具有描述性,有助于⼈⼯分析;效率⾼,决策树只需要⼀次性构建,反复使⽤,每⼀次预测的最⼤计算次数不超过决策树的深度。缺点: 对中间值的缺失敏感;可能产⽣过度匹配的问题,即过拟合。
10.基尼系数存在的问题?
基尼指数偏向于多值属性;当类数较⼤时,基尼指数求解⽐较困难;基尼指数倾向于⽀持在两个分区中⽣成⼤⼩相同的测试。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。