天天看點

內建學習——随機森林1 模型算法介紹2 sklearn中的實作

內建學習——随機森林

  • 1 模型算法介紹
    • 1.1 bagging 的介紹
    • 1.2 随機森林
  • 2 sklearn中的實作

1 模型算法介紹

1.1 bagging 的介紹

Bagging 方法的基本思想是:利用 Bootstrap(自助法)方法重采樣來生成多個版本的預測分類器,然後把這些分類器進行組合。通常情況下組合的分類器給出的結果比單一分類器的好,因為綜合了各個分類器的特點。

Bootstrap(自助法)方法就是從我們的訓練集裡面随機采集固定個數的樣本,但是每采集一個樣本後,都将樣本放回。即之前采集到的樣本在放回後有可能繼續被采集到。其建構的流程如下:

對于一個樣本,它在某一次含 m m m 個樣本的訓練集的随機采樣中,每次被采集到的機率是 1 m \frac{1}{m} m1​。不被采集到的機率為 1 − 1 m 1-\frac{1}{m} 1−m1​。則 m m m 次采樣都沒有被采集中的機率是 ( 1 − 1 m ) m {(1-\frac{1}{m})}^m (1−m1​)m。當 m → + ∞ m\rightarrow+\infty m→+∞ 時, ( 1 − 1 m ) m → 1 e {(1-\frac{1}{m})}^m\rightarrow\frac{1}{e} (1−m1​)m→e1​。也就是說在 Bagging 的每輪随機采樣中,訓練集中大約有 1 3 \frac{1}{3} 31​ 的樣本不會出現在采樣的樣本集合中,這就意味着訓練集中的噪聲點可能不會出現在 Bootstrap 所采集的樣本集合中,是以與在原始樣本集合上建構分類器相比,Bootstrap 方法可以更容易的獲得好的分類器。

1.2 随機森林

随機森林(Random Forest ,簡稱RF) 是 Bagging 的一個擴充變體,它的基本單元是決策樹,本質屬于機器學習的一大分支——內建學習方法。随機森林的名稱中有兩個關鍵詞,一個是“随機”,一個就是“森林”,簡單表述就是随機抽取樣本建構很多棵 CART 決策樹弱學習器,然後組合成森林,通過投票法或者均值法預測結果。

假設原始訓練集的個數為 N N N ;訓練集的特征個數為 M M M;共進行 T T T 次訓練,即決策樹的個數為 T T T 。随機森林的訓練過程如下:

  • 1 使用 Bootstrap 方法從原始訓練集中随機有放回抽取 N N N 個樣本,作為某一個決策樹的訓練集;
  • 2 建構每一棵決策樹時,随機從 M M M 個特征中選取 m ( m &lt; &lt; M , 推 薦 m = l o g 2 M ) m(m&lt;&lt;M,推薦 m =log_2M) m(m<<M,推薦m=log2​M) 個特征子集,每次樹進行分裂時,從這 m m m 個特征中選擇最優的,即決策樹的每一節點均是随機選取的 m m m 個特征中的一個;
  • 3 每棵樹都盡最大程度的生長,并且沒有剪枝過程;
  • 4 以上生成決策樹的過程共進行 T T T 次,生成 T T T 棵樹。

2 sklearn中的實作

在 sklearn 中,內建學習中的随機森林(簡稱 RF)算法同樣分為兩類,即分類的 RandomForestClassifier ,回歸的 RandomForestRegressor 。由于随機森林是 Bagging 算法中的一類,其模型參數可以分為 Bagging 架構參數與 CART 決策樹參數,下面以 RandomForestClassifier 為例對主要參數說明,詳細的參數可以檢視官方參考。

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=None, random_state=None, verbose=0, warm_start=False, class_weight=None)[source]

主要參數說明:

n_estimators: 森林中決策樹的個數,預設為 10 。

oob_score :即是否采用袋外樣本來評估模型的好壞。預設是 False 。個人推薦設定為 True,因為袋外分數反應了一個模型拟合後的泛化能力。

criterion: 即 CART 樹做劃分時對特征的評價标準。分類模型和回歸模型的損失函數是不一樣的。分類 RF 對應的 CART 分類樹預設是基尼系數 gini ,另一個可選擇的标準是資訊增益 entropy 。回歸 RF 對應的 CART 回歸樹預設是均方差 mse ,另一個可以選擇的标準是絕對值差 mae 。一般來說選擇預設的标準。

其他的參數可以參考這篇文章。

接下來以資料集 iris 為例進行說明:

from sklearn.datasets import load_iris 
from sklearn.model_selection import train_test_split 
from sklearn.ensemble import RandomForestClassifier

iris = load_iris() 
iris_data = iris.data # 資料集 
iris_labels = iris.target # 對應的分類标簽
 
# 使用train_test_split對資料集按比例進行随機抽取,本文按37開進行抽取 
X_train, X_test, Y_train, Y_test = train_test_split(iris_data, iris_labels, test_size=0.3, random_state=0) 

# 定義分類器對象 
clf = RandomForestClassifier()
#n_estimators=100

# 調用所定義的分類器的訓練方法,主要接收兩個參數:訓練資料集及訓練标簽 
clf.fit(X_train,Y_train) 

#調用該對象的測試方法,主要接收一個參數:測試資料集 
Y_predict = clf.predict(X_test) 

#計算各測試樣本屬于不同類的機率預測值 
probility = clf.predict_proba(X_test)

# 調用打分方法,計算模型在測試集上的準确率 
score = clf.score(X_test,Y_test)
           

繼續閱讀