隨機森林演算法
❶ 隨機森林為什麼不會過度擬合
來源:知乎
謝宇傑
大型機軟體工程師
不是不會過擬合,而是在滿足一定的條件下不容易過擬合。特徵參數要足夠多,特徵參數之間相關性盡量低。
知乎用戶
Breiman的這句話完全錯誤,根本沒有不過擬合的學習方法!
對於隨機森林來說: 在有躁音的情況下(注意,現實世界應用中躁音不能忽略),樹太少很容易過擬合,增加樹可以減小過擬合,但沒有辦法完全消除過擬合,無論你怎麼增加樹都不行。
------------------
隨機森林
決策樹主要流行的演算法有ID3演算法,C4.5演算法、CART演算法,主要花費時間在建決策樹和剪枝過程中,但一旦建成決策樹,由於他是樹形結構能夠直觀的顯示出模型,而且在後期的分類過程中也比較容易分類,但決策樹有一些不好的地方,比如容易過擬合。為了減少決策樹的不足,近年來又提出了許多模型組和+決策樹的演算法,這些演算法都是生成N棵決策樹,雖然這N棵樹都很簡單,但是它們綜合起來就很強大了,有點類似與adaboost演算法。
隨機森林主要思想是先對原始樣本隨機選出N 個訓練子集用於隨機生成N顆決策樹,針對每個樣本集在構建決策樹的選擇最優屬性進行劃分時是隨機選擇m個屬性,而不是像常用的決策樹將所有的屬性參與選擇,再由這些決策樹構成一個森林,隨機森林的每一棵決策樹之間是沒有關聯的。在得到森林之後,當有一個新的輸入樣本進入的時候,就讓森林中的每一棵決策樹分別進行一下判斷,看看這個樣本應該屬於哪一類,然後看看哪一類被選擇最多,就預測這個樣本為那一類。
隨機森林演算法三個步驟:
(1)為每棵決策樹抽樣產生訓練集
隨機森林演算法採用Bagging抽樣技術從原始訓練集中產生N 個訓練子集(假設要隨機生成N顆決策樹),每個訓練子集的大小約為原始訓練集的三分之二,每次抽樣均為隨機且放回抽樣,這樣使得訓練子集中的樣本存在一定的重復,這樣做的目的是為了在訓練的時候,每一棵樹的輸入樣本都不是全部的樣本,使森林中的決策樹不至於產生局部最優解。
(2)構建決策樹
為每一個訓練子集分別建立一棵決策樹,生成N棵決策樹從而形成森林,每棵決策樹不需要剪枝處理。
由於隨機森林在進行節點分裂時,隨機地選擇某m個屬性(一般是隨機抽取指定logM +1個隨機特徵變數,m<<M)參與比較,而不是像決策樹將所有的屬性都參與屬性指標的計算。為了使每棵決策樹之間的相關性減少,同時提升每棵決策樹的分類精度,從而達到節點分裂的隨機性。
(3)森林的形成
隨機森林演算法最終的輸出結果根據隨機構建的N棵決策子樹將對某測試樣本進行分類,將每棵子樹的結果匯總,在所得到的結果中哪個類別較多就認為該樣本是那個類別。
由於上面兩個隨機采樣(從原始訓練集中隨機產生N個訓練子集用於隨機生成N顆決策樹和在針對每個樣本集構建決策樹過程中隨機地選擇m個屬性)的過程保證了隨機性,所以不會出現過擬合over-fitting。隨機森林中的每一棵數分類的能力都很弱,但是多棵樹組合起來就變的NB,因為每棵樹都精通某一方面的分類,多棵樹組成一個精通不同領域的決策專家。
隨機森林優缺點
優點:
1、隨機森林可以處理高維數據,並確定變數的重要性,是一個不錯的降維方法;
2、對數據缺失,隨機森林也能較好地保持精確性;
3、當存在分類不平衡的情況時,隨機森林能夠提供平衡數據集誤差的有效方法;
缺點:
1、隨機森林演算法可以解決回歸問題,但是由於不能輸出一個連續型值和作出超越訓練集數據范圍的預測,導致在對某些雜訊的數據進行建模時出現過度擬合;
2、隨機森林演算法類似於黑盒子,由於幾乎無法控制模型內部的運行,只能在不同的參數和隨機種子之間進行嘗試。
❷ 隨機森林演算法怎麼提高預測數據的准確率
不了解什麼是隨機森林。感覺應該是一種演算法。如果做計算機視覺建議你用OpenCV,R語言主要用在統計分析、機器學習領域。你找幾篇這方面的文獻看看別人跟你做類似課題時是用C++還是R。
❸ 為什麼隨機森林演算法一定會帶來性能提升
隨機森林是一種集成分類器,對影響隨機森林性能的參數進行了分析,結果表明隨機森林中樹的數量對隨機森林的性能影響至關重要。對樹的數量的確定方法以及隨機森林性能指標的評價方法進行了研究與總結。以分類精度為評價方法,利用UCI數據集對隨機森
❹ 我想知道隨機聚類森林演算法和隨機森林演算法有什麼不同,希望大家可以幫助我,謝謝。
通常隨機森林聚類演算法指代的是語義紋元森林,而隨機森林演算法是通常理解的基於決策樹的組合分類器演算法
❺ 隨機森林演算法特徵的閾值怎麼確定
這個並不一定。隨機森林是用來對特徵的重要程度來排序選擇。選擇完成後,你可以根據自己的需要選擇分類演算法
❻ 求問隨機森林演算法的簡單實現過程
隨機森林(Random forest)指的是利用多棵樹對樣本進行訓練並預測的一種分類器。 並且其輸出的類別是由個別樹輸出的類別的眾數而定。在機器學習中有一個地位很重要的包scikit-learn可實現隨機森林演算法。
原理:(隨機森林的分類預測和回歸預測sklearn.ensemble.RandomForestRegressor方法)
(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都被訓練過。
隨機森林的簡單實現過程如下:
一、 開發環境、編譯環境:
PyCharm Community Edition 2016.2.3
python2.7.10
二、 所用庫及安裝方法:
pandas[python自帶]
sklearn:命令行pip install sklearn;如果沒有安裝pip,先使用easy_install pip安裝pip;如果在MAC上沒有許可權,使用sudo pip install sklearn;
三、 代碼介紹
1. 使用pandas讀取本地excel的訓練集和測試集,將屬性集賦給X_train和Y_train;將要預測的集合賦給X_test和Y_test;
2. 使用DictVectorizer對數據進行規范化、標准化
3. 生成RandomForestRegressor對象,並將訓練集傳入fit方法中進行訓練
4. 調用predict函數進行預測,並將結果存入y_predict變數中;
5. 使用mean_squared_error、score方法輸出MSE、NMSE值對擬合度、穩定度進行分析;輸出feature_importance,對影響最終結果的屬性進行分析;
6. 詳細代碼見附錄
四、 附錄
# coding:utf-8
import pandas as pd
data_train = pd.read_excel('/Users/xiaoliu/Desktop/data_train.xlsx')
X_train = data_train[['CPI', 'GDP', 'PPI', 'AJR', 'BJFJ', 'FBDR', 'PCFD', 'PCFDED', 'BDR']]
y_train = data_train['FJ']
data_test = pd.read_excel('/Users/xiaoliu/Desktop/data_test.xlsx')
X_test = data_test[['CPI', 'GDP', 'PPI', 'AJR', 'BJFJ', 'FBDR', 'PCFD', 'PCFDED', 'BDR']]
y_test = data_test['FJ']
from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer(sparse=False)
X_train = vec.fit_transform(X_train.to_dict(orient='records'))
X_test = vec.transform(X_test.to_dict(orient='records'))
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor()
rf.fit(X_train,y_train)
y_predict = rf.predict(X_test)
print 'predict value:',y_predict
from sklearn.metrics import mean_squared_error
print 'MSE:', mean_squared_error(y_test, y_predict)
print 'NMES:',rf.score(X_test, y_test)
print rf.feature_importances_
❼ 怎樣用隨機森林演算法實現文本分類
不了解什麼是隨機森林。
感覺應該是一種演算法。
如果做計算機視覺建議你用OpenCV,
R語言主要用在統計分析、機器學習領域。
你找幾篇這方面的文獻看看別人跟你做類似課題時是用C++還是R。
❽ 隨機森林演算法問題!!!過擬合什麼情況下會發生呢
隨機森林 比adaboost 好 隨機森林的優點有: 1. 對於很多種資料,它可以產生高准確度的分類器。 2. 它可以處理大量的輸入變數。 3. 它可以在決定類別時,評估變數的重要性。 4. 在建造森林時,它可以在內部對於一般化後的誤差產生不偏差的估計。 ...
2015-08-24 回答者: 皇族龍哥之父 1個回答 1
❾ 隨機森林演算法算不算多元統計分析方法
算的,而且是高級統計方法
❿ 集成學習隨機森林演算法問題!求大神指教!!!謝謝Thanks♪(・ω・)ノ!
為什麼在某些噪音比較大的樣本集上,RF的模型容易陷入過擬合? 這是為什麼呢?麻煩幫忙解釋一下,謝謝啦Thanks♪(・ω・)ノ!