【筆記】隨機森林和Extra-Trees


隨機森林和Extra-Trees

隨機森林

先前說了bagging的方法,其中使用的算法都是決策樹算法,對於這樣的模型,因為具有很多棵樹,而且具備了隨機性,那么就可以稱為隨機森林

在sklearn中封裝了隨機森林的類,可以使用這個類直接創建出一個隨機森林,同時sklearn中的隨機森林模型的隨機性更為復雜,對於決策樹來說,都是對每一個節點進行划分,詳情看這里

在sklearn中的封裝的隨機森林默認在每一個節點上,都是在一個隨機的特征子集上尋找一個最優的划分,並不是在節點上對所有的特征進行划分,這就增加了每一個子模型的隨機性

具體使用

(在notebook中)

加載好需要的類庫,虛擬數據的隨機種子設置為666,繪制圖像

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
X,y = datasets.make_moons(n_samples=500,noise=0.3,random_state=666)
plt.scatter(X[y==0,0],X[y==0,1])
plt.scatter(X[y==1,0],X[y==1,1])

圖像如下

使用sklearn提供的隨機模型只要調用RandomForestClassifier這個類就可以,然后實例化,傳入參數,設置樣本點為500,隨機種子為666,使用全部核心並行,並使用未使用的樣本點進行測試計算准確度,然后進行訓練,計算准確度

from sklearn.ensemble import RandomForestClassifier

rf_clf = RandomForestClassifier(n_estimators=500,random_state=666,oob_score=True,n_jobs=-1)
rf_clf.fit(X,y)
rf_clf.oob_score_

結果如下

新添加一個參數進行實例化,傳入參數max_leaf_nodes,限制每一個決策樹的葉子節點,設置為16,然后訓練並計算樣本的准確度

rf_clf2 = RandomForestClassifier(n_estimators=500,max_leaf_nodes=16,random_state=666,oob_score=True,n_jobs=-1)
rf_clf2.fit(X,y)
rf_clf2.oob_score_

結果如下

可以不斷調參以獲得更好的准確度,這里不難發現,隨機森林的參數是可以使用決策樹的參數的

Extra trees

和隨機森林非常類似的還有Extra trees,極其隨機的森林,其極其的隨機性表現在,在節點划分上,直接使用隨機的特征和隨機的閾值,可以想象,這每棵樹的差別會更加的大,很隨機,這種方式提供了額外的隨機性,而且抑制了過擬合(方差),但是這樣的操作增大了bias(偏差),所以要看問題本身是不是適合使用這種方法

這個方法比起隨機森林而言,有着更快的訓練速度,在sklearn中使用也很簡單,調用ExtraTreesClassifier這個類就可以了,使用的參數也和RandomForestClassifier一樣,需要注意的是,bootsreap默認是flase,所以要使用放回取樣還需要設置為true,然后訓練並計算准確度

from sklearn.ensemble import ExtraTreesClassifier

et_clf = ExtraTreesClassifier(n_estimators=500,bootstrap=True,oob_score=True,random_state=666)
et_clf.fit(X,y)
et_clf.oob_score_

結果如下

添加一個新的參數,添加max_leaf_nodes=,設置為16,然后訓練模型並計算准確度

et_clf2 = ExtraTreesClassifier(n_estimators=500,max_leaf_nodes=16,bootstrap=True,oob_score=True,random_state=666)
et_clf2.fit(X,y)
et_clf2.oob_score_

結果如下

其實集成學習也可以解決回歸問題,在sklearn中可以使用很多類來解決,比如baggingregressor,randomforestregressor,extratreesregressor等類,使用方式和上面大致一樣,不過因為解決的是回歸問題,所以輸出結果是一個數字


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM