天天看點

gridsearchcv參數_随機森林算法參數解釋及調優

gridsearchcv參數_随機森林算法參數解釋及調優

本文将詳細解釋随機森林類的參數含義,并基于該類講解參數擇優的過程。

随機森林類庫包含了RandomForestClassifer類,回歸類是RandomForestRegressor類。RF的變種ExtraTress也有ExtraTressClassifier類和ExtraTressRegressor類。由于這四個類的參數基本相同,隻要完全了解其中一個類,其他三個類很快就能上手。本文隻介紹RandomForestClassifier類。随機森林是基于bagging架構的決策樹模型,是以随機森林的參數擇優包括兩部分:(1)RF架構的參數擇優;(2)RF決策樹的參數擇優。是以,了解RF架構參數和決策樹參數的含義是模型參數擇優的前提。

目錄:

  1. RF架構參數含義
  2. RF決策樹參數含義
  3. RF參數擇優執行個體
  4. 結論

請參考Scikit-learn官網RandomForestClassifier類的參數來閱讀前兩節:

RF架構參數意義

n_estimators:對原始資料集進行有放回抽樣生成的子資料集個數,即決策樹的個數。若n_estimators太小容易欠拟合,太大不能顯著的提升模型,是以n_estimators選擇适中的數值,版本0.20的預設值是10,版本0.22的預設值是100。

bootstrap:是否對樣本集進行有放回抽樣來建構樹,True表示是,預設值True。

oob_score:是否采用袋外樣本來評估模型的好壞,True代表是,預設值False,袋外樣本誤差是測試資料集誤差的無偏估計,是以推薦設定True。

RF架構的參數很少,架構參數擇優一般是調節n_estimators值,即決策樹個數。

RF決策樹參數含義

max_features:建構決策樹最優模型時考慮的最大特征數。預設是"auto",表示最大特征數是N的平方根;“log2"表示最大特征數是

gridsearchcv參數_随機森林算法參數解釋及調優

;"sqrt"表示最大特征數是

gridsearchcv參數_随機森林算法參數解釋及調優

。如果是整數,代表考慮的最大特征數;如果是浮點數,表示對(N * max_features)取整。其中N表示樣本的特征數。

max_depth:決策樹最大深度。若等于None,表示決策樹在建構最優模型的時候不會限制子樹的深度。如果模型樣本量多,特征也多的情況下,推薦限制最大深度;若樣本量少或者特征少,則不限制最大深度。

min_samples_leaf:葉子節點含有的最少樣本。若葉子節點樣本數小于min_samples_leaf,則對該葉子節點和兄弟葉子節點進行剪枝,隻留下該葉子節點的父節點。整數型表示個數,浮點型表示取大于等于(樣本數 * min_samples_leaf)的最小整數。min_samples_leaf預設值是1。

min_samples_split:節點可分的最小樣本數,預設值是2。整數型和浮點型的含義與min_samples_leaf類似。

max_leaf_nodes:最大葉子節點數。int設定節點數,None表示對葉子節點數沒有限制。

min_impurity_decrease:節點劃分的最小不純度。假設不純度用資訊增益表示,若某節點劃分時的資訊增益大于等于min_impurity_decrease,那麼該節點還可以再劃分;反之,則不能劃分。

criterion:表示節點的劃分标準。不純度标準參考Gini指數,資訊增益标準參考"entrop"熵。

min_samples_leaf:葉子節點最小的樣本權重和。葉子節點如果小于這個值,則會和兄弟節點一起被剪枝,隻保留葉子節點的父節點。預設是0,則不考慮樣本權重問題。一般來說,如果有較多樣本的缺失值或偏差很大,則嘗試設定該參數值。

RF參數擇優執行個體

RF參數擇優思想:RF模型可以了解成決策樹模型嵌入到bagging架構,是以,我們首先對外層的bagging架構進行參數擇優,然後再對内層的決策樹模型進行參數擇優。在優化某一參數時,需要把其他參數設定為常數。

(1) 訓練資料集下載下傳:

X
           

make_classification建構樣本數1000和特征數50的二分類資料。

所有參數都采用預設值,檢視分類情況:

rf0 = RandomForestClassifier(oob_score=True,random_state=10)
rf0.fit(X,y)
print(rf0.oob_score_)
print("accuracy:%f"%rf0.oob_score_)
           

準确率為:

accuracy:0.823000

(2) 對外層的bagging架構進行參數擇優,即對n_estimators參數擇優,其他參數仍然是預設值。

n_estimators參數擇優的範圍是:1~101,步長為10。十折交叉驗證率選擇最優n_estimators。

param_test1 = {"n_estimators":range(1,101,10)}
gsearch1 = GridSearchCV(estimator=RandomForestClassifier(),param_grid=param_test1,
                        scoring='roc_auc',cv=10)
gsearch1.fit(X,y)

print(gsearch1.grid_scores_)
print(gsearch1.best_params_)
print("best accuracy:%f" % gsearch1.best_score_)
           

輸出結果:

{'n_estimators':81}

best accuracy:0.986152

是以,最佳的子決策樹個數是81,準确率98.61%,相比預設參數的82.3%有較大的提高。

(3) 優化決策樹參數的最大特征數max_features,其他參數設定為常數,且n_estimators為81。

max_features參數擇優的範圍:1~11,步長為1,十折交叉驗證選擇最優max_features。

param_test2 = {"max_features":range(1,11,1)}
gsearch1 = GridSearchCV(estimator=RandomForestClassifier(n_estimators=81,
                        random_state=10),
                        param_grid = param_test2,scoring='roc_auc',cv=10)
gsearch1.fit(X,y)
print(gsearch1.grid_scores_)
print(gsearch1.best_params_)
print('best accuracy:%f' % gsearch1.best_score_)
           

結果:

{'max_features':6}

best accuracy:0.986399

是以,選擇最佳的最大特征數為6,準确率為98.63%,相比預設的最大特征數,準确率有一個非常小的提高。決策樹的其他最優參數也是按照類似的步驟去搜尋,這裡就不一一介紹了。

(4) 用最優參數重新訓練資料,計算泛化誤差:

rf0 = RandomForestClassifier(n_estimators=81,max_features=6,
                             oob_score=True,random_state=10)
rf0.fit(X,y)
print(rf0.oob_score_)
print("accuracy: %f" % rf0.oob_score_)
           

泛化誤差:

accuracy:0.928000

總結

随機森林模型優化主要是考慮如何選擇子資料集個數(n_estimators)和最大特征個數(max_features),參數優化順序可參考下圖:

gridsearchcv參數_随機森林算法參數解釋及調優

首先增大n_estimators,提高模型的拟合能力,當模型的拟合能力沒有明顯提升的時候,則在增大max_features,提高每個子模型的拟合能力,則相應的提高了模型的拟合能力。上面的參數調優是一種比較常用的調優方法,可以應用到其他模型的參數優化過程中。