随机森林
在集成学习中的 stacking 以及python实现当中提到关于Bagging和随机森林的一点点内容,这里继续再看一下,随机森林的一些特点,以及sklearn中有哪些可以调节的参数。
随机森林的基本思想
随机森林是利用决策树作为基学习器,每个基学习器的样本采用bootstrap(自助法)来获得,自助法属于有放回的采样方法,它的样本大小和原来样本大小是一样的,没有选择到的样本用来进行测试。 另外,每棵决策树在选择属性划分点的时候并不是从全部属性里面选择最优的,而是先从所有属性里面随机选择一些属性,然后再从选择的属性里面选择最优的。 上面的两个操作可以避免算法过拟合。
sklearn中随机森林的参数
参考这篇文章scikit-learn随机森林调参小结以及官网介绍,总结一下参数:
n_estimators: 森林当中树的个数,即使用的基学习器的个数
crierion: 使用的评判标准,和决策树中的参数是一样的,默认为‘gini’基尼系数,可也选择’entropy’信息熵。
max_features: 划分属性时候最大的特征数量。实际上决策树进行划分时不单单使用一个属性进行划分。
max_depth: 控制树的深度
bootstrap: 是否采用自助法来得到样本,默认为True
oob_score: 是否采用袋外样本来评估模型的好坏。即上面所说的bootstrap当中未采到的样本。默认为False,实际当中经常设置为True
如使用下面一组参数:进行调参
[{'n_estimators': [10, 50, 100, 300], 'criterion': ['gini', 'entropy'], 'max_depth': [2, 4, 6, 8, 10, None], 'oob_score': [True], 'random_state': [0]}]
from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import GridSearchCV rf_parameters = [{'n_estimators': [10, 50, 100, 300], 'criterion': ['gini', 'entropy'], 'max_depth': [2, 4, 6, 8, 10, None], 'oob_score': [True], 'random_state': [0]}] rf_model = RandomForestClassifier() rf_grid = GridSearchCV(rf_model, rf_parameters, ) rf_grid.fit(train_x, train_y)
print('use Random Forest MLA',) print('best sore',rf_grid.best_score_) print('train_score',rf_grid.cv_results_['mean_test_score'])
train_x和train_y是我根据titanic构造的数据 download here
输出结果如下:
use Random Forest MLA best sore 0.819304152637486 train_score [0.80022447 0.79685746 0.79461279 0.79349046 0.81144781 0.81593715 0.80808081 0.81593715 0.81818182 0.81705948 0.81144781 0.80808081 0.81257015 0.81032548 0.81032548 0.8047138 0.8047138 0.81593715 0.80583614 0.8013468 0.80022447 0.80808081 0.80695847 0.79685746 0.8047138 0.79685746 0.79461279 0.79349046 0.80920314 0.81144781 0.81369248 0.81930415 0.81481481 0.81369248 0.81481481 0.80920314 0.80695847 0.80359147 0.81144781 0.80359147 0.8047138 0.80920314 0.80695847 0.80695847 0.80246914 0.80695847 0.80246914 0.79685746]