机器学习算法总结--随机森林
簡介
隨機森林指的是利用多棵樹對樣本進行訓練并預測的一種分類器。它是由多棵CART(Classification And Regression Tree)構成的。對于每棵樹,其使用的訓練集是從總的訓練集中有放回采樣出來的,這意味著總訓練集中有些樣本可能多次出現在一棵樹的訓練集中,也可能從未出現在一棵樹的訓練集中。在訓練每棵樹的節點時,使用的特征是從所有特征中按照一定比例隨機地無放回的抽取的,假設總的特征數是M,則這個比例可以是(√M),12(√M),2(√M)。
訓練過程
隨機森林的訓練過程可以總結如下:
(1)給定訓練集S,測試集T,特征維數F。確定參數:使用到的CART的數量t,每棵樹的深度d,每個節點使用到的特征數量f,終止條件:節點上最少樣本數s,節點上最少的信息增益m
對于第1-t棵樹,i=1-t:
(2)從S中有放回的抽取大小和S一樣的訓練集S(i),作為根節點的樣本,從根節點開始訓練
(3)如果當前節點上達到終止條件,則設置當前節點為葉子節點,如果是分類問題,該葉子節點的預測輸出為當前節點樣本集合中數量最多的那一類c(j),概率p為c(j)占當前樣本集的比例;如果是回歸問題,預測輸出為當前節點樣本集各個樣本值的平均值。然后繼續訓練其他節點。如果當前節點沒有達到終止條件,則從F維特征中無放回的隨機選取f維特征。利用這f維特征,尋找分類效果最好的一維特征k及其閾值th,當前節點上樣本第k維特征小于th的樣本被劃分到左節點,其余的被劃分到右節點。繼續訓練其他節點。有關分類效果的評判標準在后面會講。
(4)重復(2)(3)直到所有節點都訓練過了或者被標記為葉子節點。
(5)重復(2),(3),(4)直到所有CART都被訓練過。
預測過程
預測過程如下:
對于第1-t棵樹,i=1-t:
(1)從當前樹的根節點開始,根據當前節點的閾值th,判斷是進入左節點(<th)還是進入右節點(>=th),直到到達,某個葉子節點,并輸出預測值。
(2)重復執行(1)直到所有t棵樹都輸出了預測值。如果是分類問題,則輸出為所有樹中預測概率總和最大的那一個類,即對每個c(j)的p進行累計;如果是回歸問題,則輸出為所有樹的輸出的平均值。
有關分類效果的評判標準,因為使用的是CART,因此使用的也是CART的評判標準,和C3.0,C4.5都不相同。
對于分類問題(將某個樣本劃分到某一類),也就是離散變量問題,CART使用Gini值作為評判標準。定義為Gini(p)=1?∑Kk=1p2k,pk為當前節點上數據集中第k類樣本的比例。
例如:分為2類,當前節點上有100個樣本,屬于第一類的樣本有70個,屬于第二類的樣本有30個,則Gini=1?0.7×07?0.3×03=0.42,可以看出,類別分布越平均,Gini值越大,類分布越不均勻,Gini值越小。在尋找最佳的分類特征和閾值時,評判標準為:()argmax(Gini?GiniLeft?GiniRight),即尋找最佳的特征f和閾值th,使得當前節點的Gini值減去左子節點的Gini和右子節點的Gini值最大。
對于回歸問題,相對更加簡單,直接使用argmax(Var?VarLeft?VarRight)作為評判標準,即當前節點訓練集的方差Var減去減去左子節點的方差VarLeft和右子節點的方差VarRight值最大。
特征重要性度量
計算某個特征X的重要性時,具體步驟如下:
對每一顆決策樹,選擇相應的袋外數據(out of bag,OOB)?計算袋外數據誤差,記為errOOB1.
所謂袋外數據是指,每次建立決策樹時,通過重復抽樣得到一個數據用于訓練?決策樹,這時還有大約1/3的數據沒有被利用,沒有參與決策樹的建立。這部分數據可以用于對決策樹的性能進行評估,計算模型的預測錯誤率,稱為袋外數據誤差。
?這已經經過證明是無偏估計的,所以在隨機森林算法中不需要再進行交叉驗證或者單獨的測試集來獲取測試集誤差的無偏估計。
隨機對袋外數據OOB所有樣本的特征X加入噪聲干擾(可以隨機改變樣本在特征X處的值),再次計算袋外數據誤差,記為errOOB2。
特征選擇
在特征重要性的基礎上,特征選擇的步驟如下:
優點
- 在數據集上表現良好
- 在當前的很多數據集上,相對其他算法有著很大的優勢
- 它能夠處理很高維度(feature很多)的數據,并且不用做特征選擇
- 在訓練完后,它能夠給出哪些feature比較重要
- 在創建隨機森林的時候,對generlization error使用的是無偏估計
- 訓練速度快
- 在訓練過程中,能夠檢測到feature間的互相影響
- 容易做成并行化方法
- 實現比較簡單
代碼實現
簡單使用sklearn中隨機森林算法的例子:
#Import Library from sklearn.ensemble import RandomForestClassifier #Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset# Create Random Forest object model= RandomForestClassifier()# Train the model using the training sets and check score model.fit(X, y)#Predict Output predicted= model.predict(x_test)此外,OpenCV中也實現了隨機森林算法。具體使用例子可以查看RandomForest隨機森林總結。
總結
以上是生活随笔為你收集整理的机器学习算法总结--随机森林的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序人生:给程序员的18个建议
- 下一篇: [转]在WPF中打开网页方法总结