机器学习算法-随机森林RF

RF(分类/回归)

1.原理简介

2.算法流程

3.优缺点

4.超参数和调参

5.问题

 

1.原理简介:是一种bagging方法,使用CART决策树作为弱学习器,并行训练,数据采样随机,特征选择随机,所以可避免过拟合

2.算法流程:

(1)对训练集随机采样m次

(2)用采样集训练决策树模型,在训练决策树节点时,随机选择一些特征,选择这些特征最好的特征作为划分左右子树的的划分标准

(3)如果是分类算法,最终类别为投票最多的,如果是回归算法,最后结果为加权平均的结果

3.优缺点

优点: 处理高维特征,并不用做特征选择;可处理离散/连续型数据;可看出特征重要性;并行化,速度快;不易过拟合;可视化便于分析

缺点:对少量/低维数据集分类效果不一定好

 

4.超参数

重要参数:n_estimators,max_depth,max_features,min_samples_split,min_samples_leaf

 

RF框架参数:n_estimators,oob_score,criteriion

(1)n_estimators:树数量/弱学习器最大迭代次数/最大的弱学习器个数;(一般选100)

太小容易欠拟合;太大计算量太大;

树数量越多,性能越好,预测越稳定,泛化能力越强,但计算速度越慢;实际上,先越大越好,在上下浮动。一般默认100

(2)oob_score:袋外分数;(推荐设置为True)

是否采用袋外样本来评估模型的好坏,默认是False,推荐设置为True,是一种RF交叉验证方法,袋外分数反映模型拟合后的泛化能力

(3)criteriion:CART树做划分时对特征的评价标准。(一般默认)

分类:基尼系数(默认),信息增益;

回归:均方差mse(默认),绝对值差mae

RF决策树参数:max_features,max_depth ,min_samples_split ,min_samples_leaf,min_weight_fraction_leaf, max_leaf_nodes,min_impurity_split

(1)max_features:RF划分时考虑的最大特征数(一般默认,atuo)

"auto":划分时最多考虑√N个特征;(默认)

"sqrt":划分时最多考虑√N个特征。

"log2":划分时最多考虑log2N个特征;

整数:考虑的特征绝对数。浮点数:考虑特征百分比,即考虑(百分比xN)取整后的特征数。一般我们用默认,特征数非常多时,可用其他取值来控制划分时考虑的最大特征数,以控制决策树的生成时间。

(2)max_depth:决策树最大深度(一般取10-100之间)

默认可不输入,决策树在建立子树的时候不会限制子树的深度。数据/特征少时选默认。模型数据/特征多时,推荐限制这个最大深度,具体取值取决于数据分布。

(3)min_samples_split内部节点再划分所需最小样本数(数据小选默认2;数据大则增大)

控制子节点分裂;当某节点的样本数少于min_samples_split,不会继续再尝试选择最优特征来进行划分。数据量不大时选默认(2),数据量大时,推荐增大这个值。

(4)min_samples_leaf叶节点最少样本数(样本小见下,样本不大选默认1,样本大则增大)

当某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。可输入最少的样本数的整数,或者最少样本数占样本总数的百分比。当样本量不大,选默认(1)。当样本量非常大,推荐增大这个值。

(5)min_weight_fraction_leaf:叶子节点最小的样本权重和(一般默认,特殊情况考虑)

当小于这个值,则会和兄弟节点一起被剪枝。 默认是0,就是不考虑权重问题。一般来说,当较多样本有缺失值,或分类树样本的分布类别偏差很大,就会引入样本权重。

(6)max_leaf_nodes:最大叶子数(特征不多时,默认None,不控制;特征多时,限制)

通过限制最大叶子节点数,可以防止过拟合,如果加了限制,算法会建立在最大叶子节点数内最优的决策树。特征不多时,选默认("None”,即不限制最大的叶子节点数),特征多时,可加以限制,具体的值可以通过交叉验证得到。

(7)min_impurity_split:节点划分最小不纯度(默认1e-7)

这个值限制了决策树的增长,当某节点的不纯度(基于基尼系数,均方差)小于这个阈值,则该节点不再生成子节点。即为叶子节点 。一般不推荐改动,默认值1e-7。

 

5.调参

袋外分数来评价模型好坏

(1)对n_estimators树数目进行网格搜索,确定最佳弱学习器迭代次数

(2)对决策树最大深度max_depth和内部节点再划分所需最小样本数min_samples_split进行网格搜索;确定下来max_depth,对min_samples_split暂时不能一起定下来,因为这个还和决策树其他的参数存在关联。

(3)再对min_samples_split和叶节点最少样本数min_samples_leaf一起网格搜索。

(4)再对最大特征数max_features做网格搜索:

看一下袋外分数

 

网格搜索代码:GridSearchCV

param_test1 = {'n_estimators':range(10,71,10)}

gsearch1 = GridSearchCV(estimator = RandomForestClassifier(min_samples_split=100,

                   min_samples_leaf=20,max_depth=8,max_features='sqrt',random

_state=10), param_grid = param_test1, scoring='roc_auc',cv=5)

gsearch1.fit(X,y)

gsearch1.grid_scores_, gsearch1.best_params_, gsearch1.best_score_

 

RF题目

1. 哪个超参数的增加可能会造成随机森林数据的过拟合?

增加树的深度:可能过拟合

增加树的数量:可能欠拟合

学习速率并不是随机森林的超参数

 

2. RF改变了决策树容易过拟合的问题,这主要是由两个操作所优化的:

(1)Boostrap从袋内有放回的抽取样本值

(2)每次随机抽取一定数量的特征(通常为sqr(n))。 
  分类问题:采用Bagging投票的方式选择类别频次最高的 
  回归问题:直接取每颗树结果的平均值。

 

3.随机森林如何评估特征重要性?

衡量变量重要性的方法有两种,Decrease GINI 和 Decrease Accuracy:

1) Decrease GINI: 对于回归问题,直接使用argmax(VarVarLeftVarRight)作为评判标准,即当前节点训练集的方差Var减去左节点的方差VarLeft和右节点的方差VarRight。

2) Decrease Accuracy:对于一棵树Tb(x),我们用OOB样本可以得到测试误差1;然后随机改变OOB样本的第j列:保持其他列不变,对第j列进行随机的上下置换,得到误差2。至此,我们可以用误差1-误差2来刻画变量j的重要性。基本思想就是,如果一个变量j足够重要,那么改变它会极大的增加测试误差;反之,如果改变它测试误差没有增大,则说明该变量不是那么的重要。

 

4. 随机森林如何处理缺失值?

方法一(na.roughfix)简单粗暴,对于训练集,同一个class下的数据,如果是分类变量缺失,用众数补上,如果是连续型变量缺失,用中位数补。

方法二(rfImpute)这个方法计算量大,至于比方法一好坏?不好判断。先用na.roughfix补上缺失值,然后构建森林并计算proximity matrix,再回头看缺失值,如果是分类变量,则用没有缺失的观测实例的proximity中的权重进行投票。如果是连续型变量,则用proximity矩阵进行加权平均的方法补缺失值。然后迭代4-6次,这个补缺失值的思想和KNN有些类似

 

5. 随机森林中进行特征重要性的评估思想为:

判断每个特征在随机森林中的每颗树上做了多大的贡献,然后取个平均值,最后比较特征之间的贡献大小。贡献的计算方式可以是基尼指数或袋外数据错误率。

两种方法:

1RF评估特征重要性--基于基尼指数

2RF评估特征重要性--基于袋外数据

而该方法中涉及到的对数据进行打乱的方法通常有两种:
1)是使用uniform或者gaussian抽取随机值替换原特征;
2)是通过permutation的方式将原来的所有N个样本的第 i 个特征值重新打乱分布(相当于重新洗牌)。

 

猜你喜欢

转载自blog.csdn.net/qq_37792144/article/details/89374439
今日推荐