1. 程式人生 > 實用技巧 >機器學習之隨機森林

機器學習之隨機森林

隨機森林模型

  bagging模型的核心思想是每次同類別、彼此之間無強關聯的基學習器,以均等投票機制進行基學習器的組合。

  具體的方式是:從訓練集樣本中隨機抽取一部分樣本,採用任意一個適合樣本資料的機器學習模型對該樣本進行訓練,得到訓練好的基學習器;然後再次抽取樣本,訓練一個基學習器;重複你想要的次數,得到多個基學習器;接著讓每個基學習器對目標進行預測,得到一個預測結果,最後以均等投票方式,採用少數服從多數原則確定最後的預測結果。bagging模型每次對樣本資料的取樣是有放回的,每次取樣的資料可能會部分包含前面取樣的資料。

  bagging的代表就是隨機森林(randomforest ,RF)。RF預設取樣cart作為基學習器,而且他在bagging模型的基礎上再進一步,每次訓練基學習器時,除對樣本隨機取樣外,對樣本的特徵也進行隨機取樣。隨機森林的泛化能力比較強。

RF之sklearn實現

RF模型:

from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import RandomForestRegressor
RandomForestClassifier(n_estimators=100 ,
                       criterion='gini' ,
                       oob_score=False ,
                       max_features='auto' ,
                       max_depth
=None , max_leaf_nodes=None , min_samples_split=2 , min_impurity_split=1e-07 , min_samples_leaf=1 , class_weight=None , n_job=1)

引數:

  n_estimators:基學習器的最大迭代次數,基學習器的個數。閾值設定太小時模型容易欠擬合,設定過大時又容易過擬合,需要根據實際情況選擇一個合適的數值,預設值為100

  criterion:cart決策樹進行特徵劃分時採用的評價標準。該引數對於分類模型和迴歸模型不一樣。分類可選擇gini、entropy,預設為gini;迴歸可選mse(均方誤差)和mae(絕對誤差),預設為mse,該引數一般選擇預設即可

  oob_score:是否採用袋外樣本來評估模型的好壞。由於RF模型取樣時可能會重複取樣,訓練樣本的部分資料可能一次都沒有被抽到,因此這部分資料可以用來作為驗證集輔助評估模型的好壞。推薦使用True 。對於提升模型的泛化能力有一定作用

  max_features:劃分時考慮的最大特徵數,可以選擇None 、log2 、sqrt 、auto,預設為None ,劃分時考慮最大特徵數,選擇log2表示劃分時考慮log2M個特徵(M為特徵總數),選擇sqrt和auto,則表示劃分時最多考慮sqrt(M)個特徵

  class_weight:指定各類別的權重,預設為None,當樣本很不均衡時使用balanced

  max_depth:決策樹的最大深度,預設不輸入,表示決策樹在建立子樹的時候不會限制子樹的深度。當模型樣本量多、特徵多的時候需要做限制,一般取值在10-100之間。

  max_leaf_nodes:最大葉子節點數,預設為None,當特徵較多時加以限制,防止過擬合。

  min_samples_split:內部節點在劃分時所需要的最小樣本數。如果某節點的樣本數小於設定的min_samples_split的值,則不會繼續分叉子樹,預設為2

  min_impurity_split:節點劃分的最小不純度。該值用來限制決策樹的分叉,如果節點的不純度(資訊增益、基尼係數、標準差)小於這個閾值,該節點不再分叉子節點,直接作為葉節點

  n_jobs:略..............

屬性:

  feature_importances_:給出各個特徵的重要程度,值越大表示對應的特徵越重要

  estimators_:存放各個訓練好的基學習器情況,為一個列表

  n_features_:模型訓練好時使用的特徵數目

  n_outputs_:模型訓練好後輸出的數目

  oob_score_:模型訓練好後使用訓練集袋外樣本驗證得到的分數

  oob_prediction:訓練好的模型對訓練集袋外樣本預測的結果

方法:

  apply(X):獲取樣本X中各個樣本在整合模型的各基學習器(為一顆cart分類樹)中葉子節點位置資訊

  fit(X_train ,y_train):進行模型訓練

  score(X_test ,y_test):返回模型在測試集上的預測準確率

  predict(X):用訓練好的模型來預測待預測資料集X,返回資料為預測集對應的預測結果yˆ

  predict_proba(X):返回一個數組,陣列元素依次為預測集X屬於各個類別的概率,迴歸樹沒有該方法

  predict_log_proba(X):返回一個數組,陣列的元素依次是預測集X屬於各個類別的對數概率,迴歸樹沒有該方法