1. 程式人生 > 實用技巧 >整合學習方法之隨機森林

整合學習方法之隨機森林

1、 什麼是整合學習方法

整合學習通過建立幾個模型組合的來解決單一預測問題。它的工作原理是生成多個分類器/模型,各自獨立地學習和作出預測。這些預測最後結合成組合預測,因此優於任何一個單分類的做出預測。

2、 什麼是隨機森林

在機器學習中,隨機森林是一個包含多個決策樹的分類器,並且其輸出的類別是由個別樹輸出的類別的眾數而定。

例如, 如果你訓練了5個樹, 其中有4個樹的結果是True, 1個數的結果是False, 那麼最終投票結果就是True

3、 隨機森林原理過程

學習演算法根據下列演算法而建造每棵樹:

  • 用N來表示訓練用例(樣本)的個數,M表示特徵數目。
    • 1、一次隨機選出一個樣本,重複N次, (有可能出現重複的樣本)
    • 2、隨機去選出m個特徵, m <<M,建立決策樹
  • 採取bootstrap抽樣

3.1 為什麼採用BootStrap抽樣

  • 為什麼要隨機抽樣訓練集?  
    • 如果不進行隨機抽樣,每棵樹的訓練集都一樣,那麼最終訓練出的樹分類結果也是完全一樣的
  • 為什麼要有放回地抽樣?
    • 如果不是有放回的抽樣,那麼每棵樹的訓練樣本都是不同的,都是沒有交集的,這樣每棵樹都是“有偏的”,都是絕對“片面的”(當然這樣說可能不對),也就是說每棵樹訓練出來都是有很大的差異的;而隨機森林最後分類取決於多棵樹(弱分類器)的投票表決。

3.2 API

  • class sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion=’gini’, max_depth=None, bootstrap=True, random_state=None, min_samples_split=2)

    • 隨機森林分類器
    • n_estimators:integer,optional(default = 10)森林裡的樹木數量120,200,300,500,800,1200
    • criteria:string,可選(default =“gini”)分割特徵的測量方法
    • max_depth:integer或None,可選(預設=無)樹的最大深度 5,8,15,25,30
    • max_features="auto”,每個決策樹的最大特徵數量
      • If "auto", then max_features=sqrt(n_features).
      • If "sqrt", then max_features=sqrt(n_features) (same as "auto").
      • If "log2", then max_features=log2(n_features).
      • If None, then max_features=n_features.
    • bootstrap:boolean,optional(default = True)是否在構建樹時使用放回抽樣
    • min_samples_split:節點劃分最少樣本數
    • min_samples_leaf:葉子節點的最小樣本數
  • 超引數:n_estimator, max_depth, min_samples_split,min_samples_leaf

3.3 程式碼

# 隨機森林去進行預測
rf = RandomForestClassifier()

param = {"n_estimators": [120,200,300,500,800,1200], "max_depth": [5, 8, 15, 25, 30]}

# 超引數調優
gc = GridSearchCV(rf, param_grid=param, cv=2)

gc.fit(x_train, y_train)

print("隨機森林預測的準確率為:", gc.score(x_test, y_test))

4、總結

  • 在當前所有演算法中,具有極好的準確率
  • 能夠有效地執行在大資料集上,處理具有高維特徵的輸入樣本,而且不需要降維
  • 能夠評估各個特徵在分類問題上的重要性

提問

1、估計器的工作流程是什麼?

答案:

第一步: 例項化估計器

第二步: 呼叫估計器的fit函式, 用訓練集的特徵值和目標值訓練

第三步: 呼叫預測函式predict, 用測試集的特徵值預測

2、決策樹的劃分依據是什麼?(課程介紹的主要方法)

答案: 更具資訊增益最大的屬性劃分.