機器學習筆記(3) 隨機森林
random forest 和 extra-trees是對decison tree做ensemble而得到最終模型的兩種演算法.
閱讀本文前需要先了解一下
ofollow,noindex"> 機器學習筆記1:決策樹
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)