天天看點

ML之RF:随機森林RF算法簡介、應用、經典案例之詳細攻略

随機森林RF算法簡介

ML之RF:随機森林RF算法簡介、應用、經典案例之詳細攻略

 随機森林指的是利用多棵決策樹對樣本進行訓練并預測的一種分類器。它包含多個決策樹的分類器,并且其輸出的類别是由個别樹輸出的類别的衆數而定。随機森林是一種靈活且易于使用的機器學習算法,即便沒有超參數調優,也可以在大多數情況下得到很好的結果。随機森林也是最常用的算法之一,因為它很簡易,既可用于分類也能用于回歸。

        随機森林內建了所有的分類投票結果,将投票次數最多的類别指定為最終的輸出,這就是一種最簡單的Bagging思想。

1、RF基本的建構算法過程

1. 用N來表示訓練用例(樣本)的個數,M表示特征數目。

2. 輸入特征數目m,用于确定決策樹上一個節點的決策結果;其中m應遠小于M。

3. 從N個訓練用例(樣本)中以有放回抽樣的方式,取樣N次,形成一個訓練集(即bootstrap取樣),并用未抽到的用例(樣本)作預測,評估其誤差。

4. 對于每一個節點,随機選擇m個特征,決策樹上每個節點的決定都是基于這些特征确定的。根據這m個特征,計算其最佳的分裂方式。

5. 每棵樹都會完整成長而不會剪枝,這有可能在建完一棵正常樹狀分類器後被采用)。

2、RF算法相關文獻、論文

1. Panda Biswanath , Joshua S. Herbach , Sugato Basu , and Roberto J. Bayardo .( 2009 ).PLANET: Massively Parallel Learning of Tree Ensembles with MapReduce. Proceedings of the 35th International Conference on Very Large Data Bases. Retrieved from

http://research.google.com/pubs/pub36296.html

.

2. Leo Breiman . (September, 1994 ). Bagging Predictors. Technical Report No. 421.Department of Statistics, UC Berkeley. Retrieved from

http:// statistics.berkeley.edu/sites/default/files/tech-reports/421.pdf

3. Leo Breiman . (2001). Random forests . Machine Learning g , 45 : 5 – 32 . Retrieved from

http://oz.berkeley.edu/~breiman/randomforest2001.pdf

4. J.H. Friedman . (2001). Greedy Function Approximation: A Gradient Boosting Machine .Annals of Statistics,29(5): 1189–1232.Retrieved from

http://statweb. stanford.edu/~jhf/ftp/trebst.pdf.

5. J.H. Friedman . (2002). Stochastic Gradient Boosting . Computational Statistics and Data Analysis , 38 (4): 367– 378 . Retrieved from

http://statweb.stanford.edu/~jhf/ftp/stobst.pdf https://yunyaniu.blog.csdn.net/article/details/79325856#t1

随機森林RF算法的應用

1、RF用于回歸

klearn.ensemble.RandomForestRegressor的類構造函數

函數API官方解釋:

https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestRegressor.html#sklearn.ensemble.RandomForestRegressor

(1)、重點參數解釋

n_estimators:整型,可選(預設值為10)。此參數指定內建方法中決策樹的數目。通常預設值就可以工作得很好。如果想獲得最佳的性能,就需要多于10 個決策樹。可以通過做實驗嘗試确定最佳的決策樹數目。正如全書始終強調的,合适的模型複雜度(決策樹的深度和決策樹的數目)取決于問題的複雜度和可獲得的資料的規模。比較好的嘗試是100 ~ 500。

max_depth:整型或者none, 可選(預設值為None)。如果這個參數設定為None,決策樹就會持續增長,直到葉子節點為空或者所含資料執行個體小于min_samples_split。除了指定決策樹的深度,可以用參數max_leaf_nodes 來指定決策樹的葉子節點數。如果指定了max_leaf_nodes,max_depth 參數就會被忽略。不設定max_depth,讓決策樹自由生長,形成一個滿度的決策樹可能可以獲得性能上的好處。當然與之相伴的代價就是訓練時間。在模型的訓練過程中,可能需要嘗試不同深度的決策樹。

min_sample_split:整型,可選(預設值為2)。當節點含有的資料執行個體少于min_sample_split 時,此節點不再分割。對含有較少執行個體的節點進行分割是過拟合錯誤的源頭。

min_samples_leaf:整型,可選(預設值為1)。如果分割導緻節點擁有的資料執行個體少于min_sample_leaf,分割就不會進行。這個參數的預設值實際上導緻此參數被忽略。通常這是可行的,特别是對資料集進行頭幾次試運作時。可以用各種方法為這個參數選擇一個更有意義的值。一個方法是參數選取為葉子節點含有執行個體數的平均值,這樣如果葉節點含有多于1 個的資料執行個體,就可以獲得更低的均方差。另一種方法是将此參數看作控制決策樹深度的替代方法。

max_features:整型、浮點型或字元串型,可選(預設值為None)。當查找最佳分割點時,需要考慮多少個屬性是由max_features 參數和問題中一共有多少個屬性共同決定的。假設問題資料集中共有nFeatures 個屬性。則:

● 如果 max_features 是整型,則在每次分割時考慮 max_features 個屬性。注:如果max_features > nFeatures,則抛出錯誤。

● 如果 max_features 是浮點型,max_features 表示需考慮的屬性占全部屬性的百分比,即int( max_features*nFeatures)。

● 可選擇的字元串值如下:

auto max_features=nFeatures

sqrt max_features=sqrt(nFeatures)

log2 max_features=log2(nFeatures)

● 如果 max_features=None, 則 max_features=nFeatures。絕大多數訓練過程的參數都在RandomForestRegressor的構造函數中設定。max_features參數是唯一沒有使用預設值。

(1)、此參數的預設值(None)會導緻在決策樹的每個節點都要考慮全部的屬性。這意味着實際上實作的是Bagging 方法,因為這裡沒有随機選擇屬性的過程。

Brieman 和Cutler 建議對回歸問題使用sqrt(nFeatues) 個屬性。模型通常對max_features 不是很敏感,但是這個參數還是有一些影響,是以可以根據需要嘗試一些不同的值。

random_state:整型,RandomState 執行個體,或者None ( 預設值為None)。

● 如果類型是整型,則此整數作為随機數生成器的種子。

● 如果是 RandomState 的一個執行個體,則此執行個體用來作為随機數生成器。

● 如果是None,則随機數生成器是numpy.random用的RandomState的一個執行個體。

      RandomForestRegressor 類有幾個屬性,包括用來構成內建方法的決策樹。RandomForestRegressor 類有用訓練好的決策樹進行預測的方法,是以通常不需要直接通路這些屬性。但是可能需要通路變量importances。下面是對此變量的描述。

     feature_importances這是一個數組,數組的長度等于問題的屬性數(也就是nFeatures)。數組中的值是正的浮點數,表明對應的屬性對預測結果的貢獻重要性。屬性的重要性由Brieman 在最初的随機森林論文中所提的一個方法來确定。基本思想是,每次選中一個屬性,然後對屬性的值進行随機置換,記錄下預測準确性的變化,預測的準确性越高,此屬性也越重要。

(2)、重點類解釋

fit(XTrain, yTrain, sample_weight=None)

      XTrain 是屬性值的數組(訓練資料),它有nInstances 行和nFeatures 列。yTrain 是目标(标簽)值的數組。y 同樣有nInstances 行。在本章的例子中可以看到yTrain 隻有一列,但是此方法可以應用于具有不同目标的模型。是以y 可以有nTargets 列,每列對應一個結果(目标,标簽)集合。Sample_weight 用來對訓練資料集中的每個執行個體配置設定不同的權重,它有兩種形式:預設值是None,意味着所有輸入執行個體具有相同的權重;如果對每個實

例配置設定不同的權重,sample_weight 就是一個數組,具有nInstances 行和1 列。

predict(XTest)

      XTest 是屬性值的數組(測試資料),基于這些屬性值進行預測。此數組是predict() 方法的輸入,此數組的列數與輸入fit() 的數組的列數相同,但是可能具有不同的行數,也可能隻有一行。Predict() 的輸出形式與用于訓練的目标數組y 相同。

https://yunyaniu.blog.csdn.net/article/details/79325856#t6 https://yunyaniu.blog.csdn.net/article/details/79325856#t7 https://yunyaniu.blog.csdn.net/article/details/79325856#t0 https://yunyaniu.blog.csdn.net/article/details/79325856#t1 https://yunyaniu.blog.csdn.net/article/details/79325856#t2 https://yunyaniu.blog.csdn.net/article/details/79325856#t3 https://yunyaniu.blog.csdn.net/article/details/79325856#t4 https://yunyaniu.blog.csdn.net/article/details/79325856#t5 https://yunyaniu.blog.csdn.net/article/details/79325856#t6 https://yunyaniu.blog.csdn.net/article/details/79325856#t7

繼續閱讀