random forest 和 extra-trees 是对 decison tree 做 ensemble 而得到最终模型的两种算法.
阅读本文前需要先了解一下
机器学习笔记 1: 决策树
机器学习笔记 2: 集成学习
random_forest
决策树在节点划分上, 在随机的特征子集中寻找最优划分特征. 进一步增强了随机性, 抑制了过拟合.
classsklearn.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=1,random_state=None,verbose=0,warm_start=False,class_weight=None)¶
随机树的随机性体现在
每一颗决策树只学习部分的训练数据
决策树在做节点划分时, 从某一特征子集中选取出最优划分特征. 而不是从全部特征中选取.
extra-trees
classsklearn.ensemble.ExtraTreesClassifier(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=False,oob_score=False,n_jobs=1,random_state=None,verbose=0,warm_start=False,class_weight=None)¶
从名字就可以看出来, extra-trees, 极限随机树们 =.=. 其实也是一个森林, 只是这个森林里的树比 random forest 里的树还要更随机.
相比与 random forest extra-trees 进一步增大了随机性. 这种随机性地增加体现在
在节点划分上, 不光特征是从特征子集随机取的, 阈值也是随机取的.
This usually allows to reduce the variance of the model a bit more, at the expense of a slightly greater increase in bias. 这种随机性的引入, 通常会导致模型的方差减小, 代价就是偏差可能会略微升高.
这里解释一下机器学习中的偏差 (bias) 和方差(variance).
一图胜千言
上图的点可以理解为一个个的模型,
high bias 意味着欠拟合, 模型过于简单了. low bias 意味着准确率比较高. 这个相对好理解. 点离红心越近, 说明在训练集上预测越准确. 偏差越小.
high variance 意味着过拟合, 模型过于复杂, 过分地去拟合训练数据了, 点很分散, 一旦训练数据发生一些变化, 学习的结果将产生巨大变化.
更多细致的讨论见知乎上的这个回答 https://www.zhihu.com/question/27068705
使用 sklearn 中的 random forest 和 extra-trees
- from sklearn.ensemble import RandomForestClassifier
- rf_clf = RandomForestClassifier(n_estimators=500, oob_score=True, random_state=666, n_jobs=-1)
- rf_clf.fit(X, y)
- from sklearn.ensemble import ExtraTreesClassifier
- et_clf = ExtraTreesClassifier(n_estimators=500, Bootstrap=True, oob_score=True, random_state=666, n_jobs=-1)
- et_clf.fit(X, y)
来源: https://www.cnblogs.com/sdu20112013/p/10063722.html