机器学习笔记(3) 随机森林
random forest 和 extra-trees是对decison tree做ensemble而得到最终模型的两种算法.
阅读本文前需要先了解一下
random_forest
决策树在节点划分上,在随机的特征子集中寻找最优划分特征.进一步增强了随机性,抑制了过拟合.
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=1, random_state=None, verbose=0, warm_start=False, class_weight=None)¶
随机树的随机性体现在
- 每一颗决策树只学习部分的训练数据
- 决策树在做节点划分时,从某一特征子集中选取出最优划分特征.而不是从全部特征中选取.
extra-trees
class
sklearn.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意味着过拟合,模型过于复杂,过分地去拟合训练数据了,点很分散,一旦训练数据发生一些变化,学习的结果将产生巨大变化.
更多细致的讨论见知乎上的这个回答
使用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)