自己对于机器学习很多模型的背后原理理解的不够深入,本文基于在平时工作建模中的思考,对遇到的问题进行了总结(资料多来源于百度搜索的答案),欢迎补充指正。
1、随机森林是怎样计算各变量重要性的?
随机森林进行特征重要性评估的思想其实很简单,就是看每个特征在随机森林中的每颗树上做了多大的贡献,然后取个平均值,最后比一比特征之间的贡献大小。 通常可以用基尼指数或者袋外数据的错误率来进行评价指标的衡量。
- 基尼指数评价方法:https://blog.csdn.net/zjuPeco/article/details/77371645?locationNum=7&fps=1
- 袋外数据的错误率法:就是对袋外数据加入随机噪声后,袋外数据准确率大幅度下降,说明这个特征对于样本的预测结果有很大影响,进而说明重要程度比较高。http://blog.sina.com.cn/s/blog_7103b28a0102w7q1.html
2、决策树对于缺失值是怎么处理的?
- 计算分裂损失减少值时,忽略特征缺失的样本,最终计算的值乘以比例
- 如果决策要用到缺失变量,决策树也可以在当前节点做多数投票来决定(选择样本数最多的特征值方向)
参考网址:
https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/7418851.html
3、为什么随机森林不容易过拟合?
主要依靠了其中三个随机过程,即产生决策树的样本是随机生成,构建决策树的特征值是随机选取,树产生过程中裂变的时候是选择N个最佳方向中的随机一个裂变的。当随机森林产生的树的数目趋近无穷的时候,理论上根据大数定理可以证明训练误差与测试误差是收敛到一起的。 当然实际过程中,由于不可能产生无穷的决策树,模型参数的设置问题会影响在相同运行时间内拟合结果的过拟合程度的不同。但总而言之,调整参数后,随机森林可以有效的降低过拟合的程度。
4、为什么说bagging是减少variance,而boosting是减少bias?
Boosting主要关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成;Bagging主要关注降低方差,因此它在不剪枝的决策树、神经网络等学习器上效用更为明显。
Bagging算法是这样做的:每个分类器都随机从原样本中做有放回的采样,然后分别在这些采样后的样本上训练分类器,然后再把这些分类器组合起来。简单的多数投票一般就可以。其代表算法是随机森林。Boosting的意思是这样,他通过迭代地训练一系列的分类器,每个分类器采用的样本分布都和上一轮的学习结果有关。其代表算法是AdaBoost, GBDT。
5、训练决策树时的参数是什么?
- 特征划分点选择标准。可以使用"best"或者"random"。前者在特征的所有划分点中找出最优的划分点。后者是随机的在部分划分点中找局部最优的划分点。默认的"best"适合样本量不大的时候,而如果样本数据量非常大,此时决策树构建推荐"random"。
- 划分时考虑的最大特征数。有log2N sqrt(N) None 百分比
- 决策树最大深。数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间。
- 内部节点再划分所需最小样本数。
- 叶子节点最少样本数。这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。
- 叶子节点最小的样本权重,这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。默认是0,就是不考虑权重问题。一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。
- 最大叶子节点数
- 类别权重
- 节点划分最小不纯度