随机森林
概述
随机森林是一种集成学习算法 sklearn中ensemble模块实现集成算法
随机森林是非常具有代表性的Bagging集成算法,它的所有基评估器都是决策树
随机森林分类
class sklearn.ensemble.RandomForestClassifier (n_estimators=’10’, criterion=’gini’, max_depth=None,
min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’,
max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False,
n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None)
基学习器参数和集成参数
基学习器参数
详见决策树中的参数讲解
criterion max_depth, min_samples_leaf, min_samples_split, max_features, min_impurity_decrease
# 交叉验证验证结果
rfc = RandomForestClassifier(random_state=0,n_estimators=25)
r_cross = cross_val_score(rfc,wine.data,wine.target,cv=10)
print('r_cross',r_cross)
clf = DecisionTreeClassifier(random_state=0)
c_cross = cross_val_score(clf,wine.data,wine.target,cv=10)
print('c_cross',c_cross)
plt.plot(r_cross,label = 'rfc')
plt.plot(c_cross,label = 'clf')
plt.legend()
plt.show()
集成学习参数
n_estimators (基学习器个数)
n_estimators越大,模型的效果往往越好,但是相应的需要的计算量和内存更大,且模型有决策边界
random_state
装袋集成算法是对基评估器的预测结果进行平均或用多数表决原则来决定集成评估器的结果
决策树从最重要的特征中随机选择出一个特征来进行分枝,因此每次生成的决策树都不一样,这个功能由参数random_state控制。
当random_state固定时,随机森林中生成是一组固定的树,但每棵树依然是不一致的,当这种随机性越大的时候,袋装法的效果一般会越来越好。用袋装法集成时,基分类器应当是相互独立的,是不相同的
bootstrap & oob_score
-
bootstrap:
- bootstrap就是用来控制抽样技术的参数(想让基分类器都不一样→通过有放回的随机抽样技术来形成不同的训练数据)
- bootstrap参数默认True,代表采用这种有放回的随机抽样技术。通常,这个参数不会被我们设置为False
-
oob_score(out of bag score)
- 在使用随机森林的时候,我们可以不划分测试集和训练集,只需要用袋外的数据来训练样本即可
- 只需要在实例化模型的时候将oob_score设置为True,训练完毕后,用oob_score_属性查看即可
#无需划分训练集和测试集 rfc = RandomForestClassifier(n_estimators=25,oob_score=True) rfc = rfc.fit(wine.data,wine.target) #重要属性oob_score_ rfc.oob_score_
重要属性和接口
依然有四个常用接口:apply, fit, predict和score
predict_proba接口
这个接口返回每个测试样本对应的被分到每一类标签的概率
Bonus:Bagging的另一个必要条件
袋装法还有另一个必要条件:基分类器的判断准确率至少要超过随机分类器,即时说,基分类器的判断准确率至少要超过50%
当基分类器的误差率小于0.5,即准确率大于0.5时,集成的效果是比基分类器要好的。相反,当基分类器的误差率大于0.5,袋装的集成算法就失效了,所以在使用随机森林之前,一定要检查,用来组成随机森林的分类树们是否都有至少50%的预测正确率。
随机森林回归
class sklearn.ensemble.RandomForestRegressor (n_estimators=’warn’, criterion=’mse’, max_depth=None,
min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’,
max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False,
n_jobs=None, random_state=None, verbose=0, warm_start=False)
所有的参数,属性与接口,全部和随机森林分类器一致。仅有的不同就是回归树与分类树的不同,不纯度的指标,参数Criterion不一致。
重要参数,属性与接口
criterion
回归树衡量分枝质量的指标,支持的标准有三种:
1)输入"mse"使用均方误差mean squared error(MSE),父节点和叶子节点之间的均方误差的差额将被用来作为
特征选择的标准,这种方法通过使用叶子节点的均值来最小化L2损失
2)输入“friedman_mse”使用费尔德曼均方误差,这种指标使用弗里德曼针对潜在分枝中的问题改进后的均方误差
3)输入"mae"使用绝对平均误差MAE(mean absolute error),这种指标使用叶节点的中值来最小化L1损失
重要属性和接口
最重要的属性和接口,都与随机森林的分类器相一致,还是apply, fit, predict和score最为核心
值得一提的是,随机森林回归并没有predict_proba这个接口
from sklearn.model_selection import c