前言
上篇文章梳理了隨機森林的各理論要點,本文首先詳細解釋了隨機森林類的參數(shù)含義,并基于該類講解了參數(shù)擇優(yōu)過程。
隨機森林類庫包含了RandomForestClassifer類,回歸類是RandomForestRegressor類。RF的變種ExtraTress也有ExtraTressClassifier類和ExtraTressRegressor類。由于這四個類的參數(shù)基本相同,只要完全理解其中一個類,其他三個類很快就能上手。
本文只介紹RandomForestClassifer類。
隨機森林是基于bagging框架的決策樹模型,因此隨機森林的參數(shù)擇優(yōu)包括兩部分:
(1)RF框架的參數(shù)擇優(yōu);
(2)RF決策樹的參數(shù)擇優(yōu)。因此,理解RF框架參數(shù)和決策樹參數(shù)的含義是模型參數(shù)擇優(yōu)的前提。
RF框架參數(shù)含義
n_estimators :
對原始數(shù)據(jù)集進行有放回抽樣生成的子數(shù)據(jù)集個數(shù), 即決策樹的個數(shù)。若n_estimators太小容易欠擬合,太大不能顯著的提升模型,所以n_estimators選擇適中的數(shù)值。
bootstrp:
是否對樣本集進行有放回抽樣來構(gòu)建樹,True表示是,默認值True
oob_score:
是否采用袋外樣本來評估模型的好壞,True代表是,默認值False,袋外樣本誤差是測試數(shù)據(jù)集誤差的無偏估計,所以推薦設(shè)置True。
RF框架的參數(shù)很少,框架參數(shù)擇優(yōu)一般是調(diào)節(jié)n_estimators值,即決策樹個數(shù)。
RF決策樹參數(shù)含義
max_features:
構(gòu)建決策樹最優(yōu)模型時考慮的最大特征數(shù)。默認是”auto“,表示最大特征數(shù)是N的平方根;“l(fā)og2”表示最大特征數(shù)是
log
?
2
N
\log_2^N
log2N?,;"sqrt"表示最大特征數(shù)為
N
\sqrt{N}
N?,。如果是整數(shù),代表考慮的最大特征數(shù);如果是浮點數(shù),表示對(N*max_features)取整。其中N表示樣本的特征數(shù)。
max_depth:
決策樹最大深度。若等于None,表示決策樹在構(gòu)建最優(yōu)模型的時候不會限制子樹的深度。如果模型樣本量多,特征也多的情況下,推薦限制最大深度;若樣本量少或者特征少,則不限制最大深度。
min_samples_leaf:
葉子節(jié)點含有的最少樣本。若葉子節(jié)點樣本數(shù)小于min_samples_leaf,則對該葉子節(jié)點和兄弟葉子節(jié)點進行剪枝,只留下該葉子節(jié)點的父節(jié)點。整數(shù)型表示個數(shù),浮點型表示取大于等于(樣本數(shù)*min_samples_leaf)的最小整數(shù)。min_samples_leaf默認值是1。
min_samples_split :
節(jié)點可分的最小樣本數(shù), 默認值是2 。整數(shù)型和浮點型的含義與min_samples_leaf類似。
max_leaf_nodes:
最大葉子節(jié)點數(shù)。int設(shè)置節(jié)點數(shù),None表示對葉子節(jié)點數(shù)沒有限制。
min_impurity_decrease:
節(jié)點劃分的最小不純度。假設(shè)不純度用信息增益表示,若某節(jié)點劃分時的信息增益大于等于min_impurity_decrease,那么該節(jié)點還可以再劃分;反之,則不能劃分。
criterion:
表示節(jié)點的劃分標(biāo)準(zhǔn)。不純度標(biāo)準(zhǔn)參考Gini指數(shù),信息增益標(biāo)準(zhǔn)參考"entrop"熵。
min_samples_leaf:
葉子節(jié)點最小的樣本權(quán)重和。葉子節(jié)點如果小于這個值,則會和兄弟節(jié)點一起被剪枝,只保留該葉子節(jié)點的父節(jié)點。默認是0,則不考慮樣本權(quán)重問題。一般來說,如果有較多樣本的缺失值或偏差很大,則嘗試設(shè)置該參數(shù)值。
RF參數(shù)擇優(yōu)實例
RF參數(shù)擇優(yōu)思想:RF模型可以理解成決策樹模型嵌入到bagging框架,因此,我們首先對外層的bagging框架進行參數(shù)擇優(yōu),然后再對內(nèi)層的決策樹模型進行參數(shù)擇優(yōu)。在優(yōu)化某一參數(shù)時,需要把其他參數(shù)設(shè)置為常數(shù)。
導(dǎo)入相關(guān)的包:
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
訓(xùn)練數(shù)據(jù)集:
X,y=make_classification()
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=1)
我們不妨看一下所有參數(shù)都采用默認值,查看分類情況:
estimator=RandomForestClassifier(oob_score=True,random_state=1)
estimator.fit(X_train,y_train)
print(estimator.oob_score_)
0.9375
對外層的bagging框架進行參數(shù)擇優(yōu),即對n_estimators參數(shù)擇優(yōu),其他參數(shù)仍然是默認值
n_esimators參數(shù)擇優(yōu)的范圍是:1~101,步長為10。十折交叉驗證率選擇最優(yōu)n_estimators 。
param_test1={'n_estimators':range(1,101,10)}
grid_search=GridSearchCV(estimator=RandomForestClassifier(random_state=1),param_grid=param_test1,scoring='roc_auc',cv=10)
grid_search.fit(X_train,y_train)
print(grid_search.best_params_)
print(grid_search.best_score_)
輸出結(jié)果:
{'n_estimators': 41}
0.9800000000000001
因此,最佳的子決策樹個數(shù)是71,準(zhǔn)確率98%,相比默認參數(shù)的93.7%有較大的提高。
優(yōu)化決策樹參數(shù)的最大特征數(shù)max_features,其他參數(shù)設(shè)置為常數(shù),且n_estimators為41
max_features參數(shù)擇優(yōu)的范圍:1~11,步長為1,十折交叉驗證率選擇最優(yōu)max_features 。
param_test2={'max_features':range(1,21,1)}
grid_search_1=GridSearchCV(estimator=RandomForestClassifier(n_estimators=grid_search.best_params_['n_estimators'],random_state=1),param_grid=param_test2,scoring='roc_auc',cv=10)
grid_search_1.fit(X_train,y_train)
print(grid_search_1.best_params_)
print(grid_search_1.best_score_)
結(jié)果:
{'max_features': 4}
0.9800000000000001
因此,選擇最佳的最大特征數(shù)為4,準(zhǔn)確率為98%,相比默認的最大特征數(shù),準(zhǔn)確率有一定的提高。
決策樹的其他最優(yōu)參數(shù)也是按照類似的步驟去搜尋,這里就不一一介紹了。
用最優(yōu)參數(shù)重新訓(xùn)練數(shù)據(jù),計算泛化誤差:
rfl=RandomForestClassifier(n_estimators=grid_search.best_params_['n_estimators'],max_features=grid_search_1.best_params_['max_features'],oob_score=True,random_state=1)
rfl.fit(X_train,y_train)
print(rfl.oob_score_)
0.9125
總結(jié)
隨機森林模型優(yōu)化主要是考慮如何選擇子數(shù)據(jù)集個數(shù)( n_estimators ) 和最大特征個數(shù)(max_features),參數(shù)優(yōu)化順序可參考下圖:
首先增大n_estimators,提高模型的擬合能力,當(dāng)模型的擬合能力沒有明顯提升的時候,則再增大n_estimators,提高每個子模型的擬合能力,則相應(yīng)的提高了模型的擬合能力。文章來源:http://www.zghlxwxcb.cn/news/detail-816716.html
上節(jié)的參數(shù)調(diào)優(yōu)是比較常用的一種參數(shù)調(diào)優(yōu)方法,可應(yīng)用到其他模型的參數(shù)優(yōu)化過程。文章來源地址http://www.zghlxwxcb.cn/news/detail-816716.html
完整版代碼
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
X,y=make_classification()
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=1)
estimator=RandomForestClassifier(oob_score=True,random_state=1)
estimator.fit(X_train,y_train)
print(estimator.oob_score_)
"""
對外層的bagging框架進行參數(shù)擇優(yōu),即對n_estimators參數(shù)擇優(yōu),其他參數(shù)仍然是默認值
"""
param_test1={'n_estimators':range(1,101,10)}
grid_search=GridSearchCV(estimator=RandomForestClassifier(random_state=1),param_grid=param_test1,scoring='roc_auc',cv=10)
grid_search.fit(X_train,y_train)
print(grid_search.best_params_)
print(grid_search.best_score_)
"""
優(yōu)化決策樹參數(shù)的最大特征數(shù)max_features,其他參數(shù)設(shè)置為常數(shù),且n_estimators為81
"""
param_test2={'max_features':range(1,21,1)}
grid_search_1=GridSearchCV(estimator=RandomForestClassifier(n_estimators=grid_search.best_params_['n_estimators'],random_state=1),param_grid=param_test2,scoring='roc_auc',cv=10)
grid_search_1.fit(X_train,y_train)
print(grid_search_1.best_params_)
print(grid_search_1.best_score_)
"""
用最優(yōu)參數(shù)重新訓(xùn)練數(shù)據(jù),計算泛化誤差
"""
rfl=RandomForestClassifier(n_estimators=grid_search.best_params_['n_estimators'],max_features=grid_search_1.best_params_['max_features'],oob_score=True,random_state=1)
rfl.fit(X_train,y_train)
print(rfl.oob_score_)
到了這里,關(guān)于【實踐】隨機森林算法參數(shù)解釋及調(diào)優(yōu)(含Python代碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!