導航:首頁 > 源碼編譯 > 隨機森林演算法連續值

隨機森林演算法連續值

發布時間:2022-11-13 16:53:18

① 數據挖掘實戰之隨機森林演算法使用

閱讀路線:

近來有同學問道,有沒有數據挖掘的案例可以來練習下,主要是來通過案例來知道演算法是如何使用的。

下面就以 港股打新 這個金融項目為例,來做個預測,先來說下什麼是打新;打新,就是用資金參與新股申購,如果中簽的話,就買到了即將上市的股票。

此次分析的目的是為了深入打新數據,找到最優演算法,挖掘出影響打新的關鍵因素,找到可能要破發的新股,從而減少新股破發的風險,提高盈利。

打新的本質,也即是在股票上市後賣出,賺取其中的差價。一般在買到的第一天就會賣掉,當然第一天上升的股票有漲有跌,為了能夠減少風險,會根據歷史數據來做個預判,這里把漲幅10%以下記為0,漲幅10%以上記為1,很明顯這也是二分類的預測問題

對於本項目而言,最終的評價標準是要求在精確度達到97%的情況下,最大化召回率。這里是要求盡可能提高召回率,自己本身對風險比較厭惡,寧可錯殺,也不會願意申購上市就要的破發的新股

對於評價標准,一般用的是PR曲線和ROC曲線。ROC曲線有一個突出優勢,就是不受樣本不均衡的影響 ROC曲線不受樣本不均衡問題的影響

1.數據總體情況

港股數據主要來自兩個方面, 利弗莫爾證券數據 和 阿思達克保薦人近兩年數據 ,處理之後是這樣的:

數據一共有17個特徵,除了目標變數is_profit,還有16個特徵。

以上的數據指標可以梳理為兩類,一類是股票相,如 關,一類是保薦人指標,

2.數據處理方面不用管
一般特徵工程主要從以下方面來進行:衍生特徵、異常值處理、缺失值處理、連續特徵離散化、分類變數one-hot-encode、標准化等,本篇文章主要講解隨機森林演算法使用,暫不對特徵工程做過多的展示了

使用隨機森林默認的參數 帶來的模型結果來看,auc指標是0.76,效果還可以。

為了更好的理解上述,這里有幾個知識點需要來解釋下:

返回的是一個n行k列的數組,第i行第j列上的數值是模型預測第i個預測樣本的標簽為j的概率。所以每一行的和應該等於1;本文中predict_proba(x_test)[:,1]返回的是標簽為0的概率。

(a).混淆矩陣

混淆矩陣如下圖分別用」0「和」1「代表負樣本和正樣本。FP代表實際類標簽為」0「,但預測類標簽為」1「的樣本數量。其餘,類似推理。

(b).假正率和真正率

假正率(False Positive Rate,FPR)是實際標簽為」0「的樣本中,被預測錯誤的比例。真正率(True Positive Rate,TPR)是實際標簽為」1「的樣本中,被預測正確的比例。其公式如下:

(3).ROC曲線

下圖的黑色線即為ROC曲線,ROC曲線是一系列threshold下的(FPR,TPR)數值點的連線。此時的threshold的取值分別為測試數據集中各樣本的預測概率。但,取各個概率的順序是從大到小的。然後也就是有了不同的RPR、TPR,且測試樣本中的數據點越多,曲線越平滑:

AUC(Area Under roc Cure),顧名思義,其就是ROC曲線下的面積,在此例子中AUC=0.62。AUC越大,說明分類效果越好。

下面我們來看看RF重要的Bagging框架的參數,主要有以下幾個:

(1) n_estimators:

也就是最大的弱學習器的個數。一般來說n_estimators太小,容易欠擬合,n_estimators太大,計算量會太大,並且n_estimators到一定的數量後,再增大n_estimators獲得的模型提升會很小,所以一般選擇一個適中的數值。默認是100。

(2) oob_score:

即是否採用袋外樣本來評估模型的好壞。默認識False。個人推薦設置為True,因為袋外分數反應了一個模型擬合後的泛化能力。

(3) criterion:

即CART樹做劃分時對特徵的評價標准。分類模型和回歸模型的損失函數是不一樣的。分類RF對應的CART分類樹默認是基尼系數gini,另一個可選擇的標準是信息增益。回歸RF對應的CART回歸樹默認是均方差mse,另一個可以選擇的標準是絕對值差mae。一般來說選擇默認的標准就已經很好的。

從上面可以看出,RF重要的框架參數比較少,主要需要關注的是 n_estimators ,即RF最大的決策樹個數。

下面我們再來看RF的決策樹參數,它要調參的參數如下:

(1) RF劃分時考慮的最大特徵數max_features:

(2) 決策樹最大深度max_depth:

默認可以不輸入,如果不輸入的話,決策樹在建立子樹的時候不會限制子樹的深度。一般來說,數據少或者特徵少的時候可以不管這個值。如果模型樣本量多,特徵也多的情況下,推薦限制這個最大深度,具體的取值取決於數據的分布。常用的可以取值10-100之間。

(3) 內部節點再劃分所需最小樣本數min_samples_split:

這個值限制了子樹繼續劃分的條件,如果某節點的樣本數少於min_samples_split,則不會繼續再嘗試選擇最優特徵來進行劃分。默認是2.如果樣本量不大,不需要管這個值。如果樣本量數量級非常大,則推薦增大這個值。

(4) 葉子節點最少樣本數min_samples_leaf:

這個值限制了葉子節點最少的樣本數,如果某葉子節點數目小於樣本數,則會和兄弟節點一起被剪枝。 默認是1,可以輸入最少的樣本數的整數,或者最少樣本數占樣本總數的百分比。如果樣本量不大,不需要管這個值。如果樣本量數量級非常大,則推薦增大這個值。

(5)葉子節點最小的樣本權重和min_weight_fraction_leaf:

這個值限制了葉子節點所有樣本權重和的最小值,如果小於這個值,則會和兄弟節點一起被剪枝。 默認是0,就是不考慮權重問題。一般來說,如果我們有較多樣本有缺失值,或者分類樹樣本的分布類別偏差很大,就會引入樣本權重,這時我們就要注意這個值了。

(6) 最大葉子節點數max_leaf_nodes:

通過限制最大葉子節點數,可以防止過擬合,默認是"None」,即不限制最大的葉子節點數。如果加了限制,演算法會建立在最大葉子節點數內最優的決策樹。如果特徵不多,可以不考慮這個值,但是如果特徵分成多的話,可以加以限制,具體的值可以通過交叉驗證得到。

(7) 節點劃分最小不純度min_impurity_split:
這個值限制了決策樹的增長,如果某節點的不純度(基於基尼系數,均方差)小於這個閾值,則該節點不再生成子節點。即為葉子節點 。一般不推薦改動默認值1e-7。

上面決策樹參數中最重要的包括最大特徵數 max_features , 最大深度 max_depth , 內部節點再劃分所需最小樣本數 min_samples_split 和葉子節點最少樣本數 min_samples_leaf

GridSearchCV的名字其實可以拆分為兩部分,GridSearch和CV,即網格搜索和交叉驗證。這兩個名字都非常好理解。網格搜索,搜索的是參數,即在指定的參數范圍內,按步長依次調整參數,利用調整的參數訓練學習器,從所有的參數中找到在驗證集上精度最高的參數,這其實是一個訓練和比較的過程。

GridSearchCV可以保證在指定的參數范圍內找到精度最高的參數,但是這也是網格搜索的缺陷所在,他要求遍歷所有可能參數的組合,在面對大數據集和多參數的情況下,非常耗時。

通過RF框架以及RF決策樹參數能夠了解到重點需要調節以下的參數

主要需要關注的是 n_estimators ,即RF最大的決策樹個數。

決策樹參數中最重要的包括最大特徵數 max_features , 最大深度 max_depth , 內部節點再劃分所需最小樣本數 min_samples_split 和葉子節點最少樣本數 min_samples_leaf

輸出結果為:

6.3最佳的弱學習器迭代次數,接著我們對決策樹最大深度max_depth和內部節點再劃分所需最小樣本數min_samples_split進行網格搜索

輸出結果

6.4最大特徵數max_features做調參

輸出結果:

6.5根據模型最佳參數進行測試

輸出結果:0.7805947388486466,相比沒有調參前,模型有不少的提高的,方便觀察,用圖形來看下ROC曲線圖

6.6觀察模型的重要特徵

6.7最大召回率

最後得出我們想要的結果,精準率在 0.97 下,召回率 0.046

參考文章:

1.sklearn中predict_proba的用法例子

2.Python機器學習筆記 Grid SearchCV(網格搜索)

3.scikit-learn隨機森林調參小結

4.ROC曲線和AUC值的計算

② 分類演算法 - 隨機森林

上次我寫了決策樹演算法,決策樹可以解決分類問題,也有CART演算法可以解決回歸問題,而隨機森林也和決策樹非常類似,採用了CART演算法來生成決策樹,因此既可以解決分類問題,也可以解決回歸問題。從名字中可以看出,隨機森林是用隨機的方式構建的一個森林,而這個森林是由很多的相互不關聯的決策樹組成。實時上隨機森林從本質上屬於機器學習的一個很重要的分支叫做集成學習。集成學習通過建立幾個模型組合的來解決單一預測問題。它的工作原理是生成多個分類器/模型,各自獨立地學習和作出預測。這些預測最後結合成單預測,因此優於任何一個單分類的做出預測。
所以理論上,隨機森林的表現一般要優於單一的決策樹,因為隨機森林的結果是通過多個決策樹結果投票來決定最後的結果。簡單來說,隨機森林中每個決策樹都有一個自己的結果,隨機森林通過統計每個決策樹的結果,選擇投票數最多的結果作為其最終結果。我覺得中國一句諺語很形象的表達了隨機森林的運作模式,就是「三個臭皮匠,頂個諸葛亮」。

我有一批100條的數據,通過顏色、長度、甜度、生長地方和水果類別,那麼我要預測在某種顏色、長度、甜度和生長地方的水果究竟是什麼水果,隨機森林要怎麼做呢?

這里的抽樣是指的在這批水果中,有放回地抽樣,比如我要生成3個決策樹來預測水果種類,那麼每棵樹要抽樣50條數據來生成,每棵樹抽取數據後數據要放回,下一棵樹抽取數據仍然要從100條數據裡面抽取。這種方法就叫做 bootstrap重采樣技術

每棵樹利用抽取的樣本生成一棵樹,值得注意的是,由於採用的是CART演算法,因此生成的是二叉樹,並且可以處理連續性數據。如果每個樣本的特徵維度為M,像以上提到的數據,樣本特徵維度5,指定一個常數m<<M,隨機地從5個特徵中選取m個特徵子集 (這一點非常重要,這也是隨機森林的隨機這個名字的來源,因此這樣才能保證生成的決策樹不同) ,每次樹進行分裂時,從這m個特徵中選擇最優的,並且每棵決策樹都最大可能地進行生長而不進行剪枝。
此時,一顆茂盛的決策樹就生成了。

根據3顆決策樹的結果,如果是連續型的數據最終需要求均值獲得結果,如果是分類型的數據最後求眾數獲得結果。

1)正如上文所述,隨機森林演算法能解決分類與回歸兩種類型的問題,並在這兩個方面都有相當好的估計表現

2)隨機森林對於高維數據集的處理能力令人興奮,它可以處理成千上萬的輸入變數,並確定最重要的變數,因此被認為是一個不錯的降維方法。此外,該模型能夠輸出變數的重要性程度,這是一個非常便利的功能

3)在對缺失數據進行估計時,隨機森林是一個十分有效的方法。就算存在大量的數據缺失,隨機森林也能較好地保持精確性

4)當存在分類不平衡的情況時,隨機森林能夠提供平衡數據集誤差的有效方法

5)模型的上述性能可以被擴展運用到未標記的數據集中,用於引導無監督聚類、數據透視和異常檢測

6)隨機森林演算法中包含了對輸入數據的重復自抽樣過程,即所謂的bootstrap抽樣。這樣一來,數據集中大約三分之一將沒有用於模型的訓練而是用於測試,這樣的數據被稱為out of bag samples,通過這些樣本估計的誤差被稱為out of bag error。研究表明,這種out of bag方法的與測試集規模同訓練集一致的估計方法有著相同的精確程度,因此在隨機森林中我們無需再對測試集進行另外的設置。

1)隨機森林在解決回歸問題時並沒有像它在分類中表現的那麼好,這是因為它並不能給出一個連續型的輸出。當進行回歸時,隨機森林不能夠作出超越訓練集數據范圍的預測,這可能導致在對某些還有特定雜訊的數據進行建模時出現過度擬合。

2)對於許多統計建模者來說,隨機森林給人的感覺像是一個黑盒子——你幾乎無法控制模型內部的運行,只能在不同的參數和隨機種子之間進行嘗試。

③ 隨機森林演算法是什麼

隨機森林指的是利用多棵樹對樣本進行訓練並預測的一種分類器。該分類器最早由Leo Breiman和Adele Cutler提出,並被注冊成了商標。

在機器學習中,隨機森林是一個包含多個決策樹的分類器, 並且其輸出的類別是由個別樹輸出的類別的眾數而定。 Leo Breiman和Adele Cutler發展出推論出隨機森林的演算法。 而 "Random Forests" 是他們的商標。

這個術語是1995年由貝爾實驗室的Tin Kam Ho所提出的隨機決策森林(random decision forests)而來的。

這個方法則是結合 Breimans 的 "Bootstrap aggregating" 想法和 Ho 的"random subspace method"以建造決策樹的集合。

學習演算法

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

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

2、 輸入特徵數目m,用於確定決策樹上一個節點的決策結果;其中m應遠小於M。

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

4、 對於每一個節點,隨機選擇m個特徵,決策樹上每個節點的決定都是基於這些特徵確定的。根據這m個特徵,計算其最佳的分裂方式。

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

(3)隨機森林演算法連續值擴展閱讀:

基於隨機森林的非監督學習

作為構建的一部分,隨機森林預測器自然會導致觀測值之間的不相似性度量。還可以定義未標記數據之間的隨機森林差異度量:其思想是構造一個隨機森林預測器,將「觀測」數據與適當生成的合成數據區分開來。

觀察到的數據是原始的未標記數據,合成數據是從參考分布中提取的。隨機森林的不相似性度量之所以吸引人,是因為它能很好地處理混合變數類型,對輸入變數的單調變換是不敏感的,而且在存在異常值的情況下度量結果依然可靠。

由於其固有變數的選擇,隨機森林不相似性很容易處理大量的半連續變數。

④ 隨機森林演算法是什麼

隨機森林是一種比較新的機器學習模型。

經典的機器學習模型是神經網路,有半個多世紀的歷史了。神經網路預測精確,但是計算量很大。上世紀八十年代Breiman等人發明分類樹的演算法(Breiman et al. 1984),通過反復二分數據進行分類或回歸,計算量大大降低。

2001年Breiman把分類樹組合成隨機森林(Breiman 2001a),即在變數(列)的使用和數據(行)的使用上進行隨機化,生成很多分類樹,再匯總分類樹的結果。隨機森林在運算量沒有顯著提高的前提下提高了預測精度。

隨機森林對多元共線性不敏感,結果對缺失數據和非平衡的數據比較穩健,可以很好地預測多達幾千個解釋變數的作用(Breiman 2001b),被譽為當前最好的演算法之一(Iverson et al. 2008)。

隨機森林優點:

隨機森林是一個最近比較火的演算法,它有很多的優點:

a、在數據集上表現良好,兩個隨機性的引入,使得隨機森林不容易陷入過擬合。

b、在當前的很多數據集上,相對其他演算法有著很大的優勢,兩個隨機性的引入,使得隨機森林具有很好的抗雜訊能力。

c、它能夠處理很高維度(feature很多)的數據,並且不用做特徵選擇,對數據集的適應能力強:既能處理離散型數據,也能處理連續型數據,數據集無需規范化。

⑤ 決策樹演算法之隨機森林

在 CART 分類回歸樹 的基礎之上,我們可以很容易的掌握隨機森林演算法,它們之間的區別在於,CART 決策樹較容易過擬合,而隨機森林可以在一定程度上解決該問題。

隨機森林的主要思想是:使用隨機性產生出一系列簡單的決策樹,並組合它們的預測結果為最終的結果,可謂三個臭皮匠賽過一個諸葛亮,下面我們就來具體了解一下。

產生隨機森林的步驟大致為三步

在第 1 步,它是一個可放回抽樣,即所產生的樣本是允許重復的,這種抽樣又被稱為 Bootstrap,例如我們有以下 mmy 數據

在做完 Bootstrap 之後,可能的樣本數據如下

可見,樣本數據中,第 3 條和第 4 條樣本是一樣的,都對應的是原始數據中的第 4 條。

接下來,就是要使用上面的樣本數據來產生決策樹了,產生決策樹的方法和 CART 基本一致,唯一的不同地方在於,節點的構建不是來自於全部的候選特徵,而是先從中隨機的選擇 n 個特徵,在這 n 個特徵中找出一個作為最佳節點。

舉個例子,假設 n = 2,且我們隨機選擇了「血液循環正常」和「血管堵塞」這兩個特徵來產生根節點,如下:

我們將在上述兩個特徵中選擇一個合適的特徵作為根節點,假設在計算完 Gini 不純度之後,「血液循環正常」這個特徵勝出,那麼我們的根節點便是「血液循環正常」,如下圖所示

接下來我們還需要構建根節點下面的節點,下一個節點將會在剩下的「胸口疼痛」、「血管堵塞」和「體重」三個特徵中產生,但我們依然不會計算所有這 3 個特徵的 Gini 不純度,而是從中隨機選擇 2 個特徵,取這 2 個特徵中的 Gini 不純度較低者作為節點。

例如我們隨機選到了「胸口疼痛」和「體重」這兩列,如下:

假設此時「體重」的 Gini 不純度更低,那麼第 2 個節點便是「體重」,如下圖:

繼續下去,我們便產生了一棵決策樹。

隨機森林是多棵決策樹,在產生完一棵決策樹後,接著會循環執行上述過程:Bootstrap 出訓練樣本,訓練決策樹,直到樹的數量達到設置值——通常為幾百棵樹。

現在我們產生了幾百棵樹的隨機森林,當我們要預測一條數據時,該怎麼做呢?我們會聚合這些樹的結果,選擇預測結果最多的那個分類作為最終的預測結果。

例如我們現在有一條數據:

該條數據被所有樹預測的結果如下:

上述結果聚合後為:

取最多的那項為最終的預測結果,即 Yes——該病人被診斷為患有心臟病。

以上,隨機森林的兩個過程: B ootstrap 和 Agg regate 又被稱為 Bagging

本文我們一起學習了隨機森林的演算法,和 CART 決策樹比起來,它主要被用來解決過擬合問題,其主要的思想為 Bagging,即隨機性有助於增強模型的泛化(Variance) 能力。

參考:

相關文章:

⑥ 隨機森林為什麼不會過度擬合

來源:知乎

謝宇傑

大型機軟體工程師
不是不會過擬合,而是在滿足一定的條件下不容易過擬合。特徵參數要足夠多,特徵參數之間相關性盡量低。
知乎用戶

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、隨機森林演算法類似於黑盒子,由於幾乎無法控制模型內部的運行,只能在不同的參數和隨機種子之間進行嘗試。

⑦ 隨機森林演算法梳理

全稱Bootstrap Aggregation的集成演算法。每個基學習器都會對訓練集進行 有放回抽樣得到子訓練集 ,比較著名的采樣法為 0.632 自助法。每個基學習器 基於不同子訓練集進行訓練,並綜合所有基學習器的預測值得到最終的預測結果 。 Bagging 常用的綜合方法是投票法,票數最多的類別為預測類別 。

Boosting 訓練過程為階梯狀, 基模型的訓練是有順序的,每個基模型都會在前一個基模型學習的基礎上進行學習,最終綜合所有基模型的預測值產生最終的預測結果,用的比較多的綜合方式為加權法 。

Stacking 是 先用全部數據訓練好基模型,然後每個基模型都對每個訓練樣本進行的預測,其預測值將作為訓練樣本的特徵值,最終會得到新的訓練樣本,然後基於新的訓練樣本進行訓練得到模型,然後得到最終預測結果。

那麼,為什麼集成學習會好於單個學習器呢?原因可能有三:

訓練樣本可能無法選擇出最好的單個學習器,由於沒法選擇出最好的學習器,所以乾脆結合起來一起用;
假設能找到最好的學習器,但由於演算法運算的限制無法找到最優解,只能找到次優解,採用集成學習可以彌補演算法的不足;
可能演算法無法得到最優解,而集成學習能夠得到近似解。比如說最優解是一條對角線,而單個決策樹得到的結果只能是平行於坐標軸的,但是集成學習可以去擬合這條對角線。

不是所有集成學習框架中的基模型都是弱模型。Bagging 和 Stacking 中的基模型為強模型(偏差低,方差高),而Boosting 中的基模型為弱模型(偏差高,方差低)。

對於 Bagging 來說,每個基模型的權重等於 1/m 且期望近似相等,故我們可以得到:

通過上式我們可以看到:

在此我們知道了為什麼 Bagging 中的基模型一定要為強模型,如果 Bagging 使用弱模型則會導致整體模型的偏差提高,而准確度降低。Random Forest 是經典的基於 Bagging 框架的模型,並在此基礎上通過引入特徵采樣和樣本采樣來降低基模型間的相關性,在公式中顯著降低方差公式中的第二項,略微升高第一項,從而使得整體降低模型整體方差。

對於 Boosting 來說,由於基模型共用同一套訓練集,所以基模型間具有強相關性,故模型間的相關系數近似等於 1,針對 Boosting 化簡公式為:

通過觀察整體方差的表達式我們容易發現:

基於 Boosting 框架的 Gradient Boosting Decision Tree 模型中基模型也為樹模型,同 Random Forrest,我們也可以對特徵進行隨機抽樣來使基模型間的相關性降低,從而達到減少方差的效果。

️那麼這里有一個小小的疑問,Bagging 和 Boosting 到底用的是什麼模型呢?

隨機森林就是通過集成學習的思想將多棵樹集成的一種演算法,它的基本單元是決策樹,而它的本質屬於集成學習方法。隨機森林的名稱中有兩個關鍵詞,一個是「隨機」,一個就是「森林」。「森林」我們很好理解,一棵叫做樹,那麼成百上千棵就可以叫做森林了,這也是隨機森林的主要思想--集成思想的體現。然而,bagging的代價是不用單棵決策樹來做預測,具體哪個變數起到重要作用變得未知,所以bagging改進了預測准確率但損失了解釋性。

「森林」容易理解,就是由很多「樹」組成,那麼「隨機」體現在什麼方面呢?

(1)訓練集隨機的選取:如果訓練集大小為N,對於每棵樹而言,隨機且有放回地從訓練集中的抽取N個訓練樣本(這種采樣方式稱為bootstrap sample方法),作為該樹的訓練集;這樣保證了每顆樹的訓練集都不同,從而構建的樹也不同

(2)特徵的隨機選取:從M個特徵中選取m個特徵,這樣可以避免某個特徵與分類結果具有強相關性,如果所有特徵都選取,那麼所有的樹都會很相似,那樣就不夠「隨機」了

另外還有一點,隨機森林法構建樹的時候不需要做額外的剪枝操作。個人理解:因為前兩個「隨機」操作,以及多顆樹的建立,已經避免了過擬合現象,所以這種情況下,我們只需要讓每棵樹在它自己的領域內做到最好就可以了。

隨機森林演算法的預測性能與兩個因素有關:

(1)森林中任意兩棵樹的相關性,相關性越強,則總體性能越容易差

(2)森林中每棵樹的預測性能,每棵樹越好,則總體性能越好

其實可以理解為要求「好而不同」。然而特徵數m的選擇越大,則相關性與個體性能都比較好,特徵數m選擇越小,則相關性與個體性能都更小,所以m的選擇影響著隨機森林的預測性能。

在包括N個樣本的數據集中,採用有放回的抽樣方式選擇N個樣本,構成中間數據集,然後在這個中間數據集的所有特徵中隨機選擇幾個特徵,作為最終的數據集。以上述方式構建多個數據集;一般回歸問題選用全部特徵,分類問題選擇全部特徵個數的平方根個特徵

利用CART為每個數據集建立一個完全分裂、沒有經過剪枝的決策樹,最終得到多棵CART決策樹;

根據得到的每一個決策樹的結果來計算新數據的預測值。

由於RF在實際應用中的良好特性,基於RF,有很多變種演算法,應用也很廣泛,不光可以用於分類回歸,還可以用於特徵轉換,異常點檢測等。下面對於這些RF家族的演算法中有代表性的做一個總結。

extra trees是RF的一個變種, 原理幾乎和RF一模一樣,有區別有:

對於每個決策樹的訓練集,RF採用的是 隨機采樣bootstrap來選擇采樣集作為每個決策樹的訓練集 ,而extra trees一般不採用隨機采樣,即 每個決策樹採用原始訓練集。

在選定了劃分特徵後,RF的決策樹會基於基尼系數,均方差之類的原則,選擇一個最優的特徵值劃分點,這和傳統的決策樹相同。但是extra trees比較的激進,他會隨機的選擇一個特徵值來劃分決策樹。

從第二點可以看出, 由於隨機選擇了特徵值的劃分點位,而不是最優點位,這樣會導致生成的決策樹的規模一般會大於RF所生成的決策樹。 也就是說,模型的方差相對於RF進一步減少,但是偏倚相對於RF進一步增大。在某些時候,extra trees的泛化能力比RF更好。

Totally Random Trees Embedding(以下簡稱 TRTE)是一種 非監督學習的數據轉化方法。它將低維的數據集映射到高維 ,從而讓映射到高維的數據更好的運用於分類回歸模型。我們知道,在支持向量機中運用了核方法來將低維的數據集映射到高維,此處TRTE提供了另外一種方法。

TRTE在數據轉化的過程也使用了類似於RF的方法,建立T個決策樹來擬合數據。當決策樹建立完畢以後,數據集里的每個數據在T個決策樹中葉子節點的位置也定下來了。比如我們有3顆決策樹,每個決策樹有5個葉子節點,某個數據特徵x劃分到第一個決策樹的第2個葉子節點,第二個決策樹的第3個葉子節點,第三個決策樹的第5個葉子節點。則x映射後的特徵編碼為(0,1,0,0,0, 0,0,1,0,0, 0,0,0,0,1), 有15維的高維特徵。這里特徵維度之間加上空格是為了強調三顆決策樹各自的子編碼。

映射到高維特徵後,可以繼續使用監督學習的各種分類回歸演算法了。

Isolation Forest(以下簡稱IForest)是一種 異常點檢測的方法。 它也使用了類似於RF的方法來檢測異常點。

對於在T個決策樹的樣本集,IForest也會對訓練集進行隨機采樣,但是采樣個數不需要和RF一樣,對於RF,需要采樣到采樣集樣本個數等於訓練集個數。但是IForest不需要采樣這么多,一般來說,采樣個數要遠遠小於訓練集個數?為什麼呢?因為我們的目的是異常點檢測,只需要部分的樣本我們一般就可以將異常點區別出來了。

對於每一個決策樹的建立, IForest採用隨機選擇一個劃分特徵,對劃分特徵隨機選擇一個劃分閾值。這點也和RF不同。

另外,IForest一般會選擇一個比較小的最大決策樹深度max_depth,原因同樣本採集,用少量的異常點檢測一般不需要這么大規模的決策樹。

對於異常點的判斷,則是將測試樣本點x擬合到T顆決策樹。計算在每顆決策樹上該樣本的葉子節點的深度ht(x),從而可以計算出平均高度h(x)。此時我們用下面的公式計算樣本點x的異常概率:

其中,m為樣本個數。c(m)的表達式為:

s(x,m)的取值范圍是[0,1],取值越接近於1,則是異常點的概率也越大。

RF的主要優點有:
訓練可以 高度並行化 ,對於大數據時代的大樣本訓練速度有優勢。

由於可以隨機選擇決策樹節點劃分特徵,這樣在 樣本特徵維度很高的時候,仍然能高效的訓練模型。

在訓練後,可以給出各個特徵對於輸出的重要性

由於採用了隨機采樣,訓練出的模型的 方差小,泛化能力強。

相對於Boosting系列的Adaboost和GBDT, RF實現比較簡單

對部分特徵缺失不敏感。

缺點:
在某些噪音比較大的樣本集上, RF模型容易陷入過擬合。

取值劃分比較多的特徵容易對RF的決策產生更大的影響,從而影響擬合的模型的效果。

數據維度相對低(幾十維),同時對准確性有較高要求時。
因為不需要很多參數調整就可以達到不錯的效果,基本上不知道用什麼方法的時候都可以先試一下隨機森林。

sklearn.ensemble.RandomForestClassifier(n_estimators=100, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None)

⑧ 隨機森林參數說明

最主要的兩個參數是n_estimators和max_features。

理論上是越大越好,但是計算時間也相應增長。所以,並不是取得越大就會越好,預測效果最好的將會出現在合理的樹個數。

每個決策樹在隨機選擇的這max_features特徵里找到某個「最佳」特徵,使得模型在該特徵的某個值上分裂之後得到的收益最大化。max_features越少,方差就會減少,但同時偏差就會增加。

如果是回歸問題,則max_features=n_features,如果是分類問題,則max_features=sqrt(n_features),其中,n_features 是輸入特徵數。

1.回歸問題的應用場景(預測的結果是連續的,例如預測明天的溫度,23,24,25度)

回歸問題通常是用來預測一個值 ,如預測房價、未來的天氣情況等等,例如一個產品的實際價格為500元,通過回歸分析預測值為499元,我們認為這是一個比較好的回歸分析。一個比較常見的回歸演算法是線性回歸演算法(LR)。另外,回歸分析用在神經網路上,其最上層是不需要加上softmax函數的,而是直接對前一層累加即可。回歸是對真實值的一種逼近預測。

2.分類問題的應用場景(預測的結果是離散的,例如預測明天天氣-陰,晴,雨)

分類問題是用於將事物打上一個標簽,通常結果為離散值。 例如判斷一幅圖片上的動物是一隻貓還是一隻狗,分類通常是建立在回歸之上,分類的最後一層通常要使用softmax函數進行判斷其所屬類別。分類並沒有逼近的概念,最終正確結果只有一個,錯誤的就是錯誤的,不會有相近的概念。最常見的分類方法是邏輯回歸,或者叫邏輯分類。

其他參數:

如果max_depth=None,節點會擬合到增益為0,或者所有的葉節點含有小於min_samples_split個樣本。如果同時min_sample_split=1, 決策樹會擬合得很深,甚至會過擬合。

如果bootstrap==True,將每次有放回地隨機選取樣本。

只有在extra-trees中,bootstrap=False。

1、隨機森林應用的是Bagging模型,而ET是使用所有的訓練樣本得到每棵決策樹,也就是每棵決策樹應用的是相同的全部訓練樣本;

2、隨機森林是在一個隨機子集內得到最佳分叉屬性,而ET是完全隨機的得到分叉值,從而實現對決策樹進行分叉的。

訓練隨機森林時,建議使用cross_validated(交叉驗證),把數據n等份,每次取其中一份當驗證集,其餘數據訓練隨機森林,並用於預測測試集。最終得到n個結果,並平均得到最終結果。

1. 隨機森林演算法幾乎不需要輸入的准備。它們不需要測算就能夠處理二分特徵、分類特徵、數值特徵的數據。隨機森林演算法能完成隱含特徵的選擇,並且提供一個很好的特徵重要度的選擇指標。

2. 隨機森林演算法訓練速度快。性能優化過程剛好又提高了模型的准確性,這種精彩表現並不常有,反之亦然。這種旨在多樣化子樹的子設定隨機特徵,同時也是一種突出的性能優化!調低給定任意節點的特徵劃分,能讓你簡單的處理帶有上千屬性的數據集。(如果數據集有很多行的話,這種方法同樣的也可以適用於行采樣)

3. 隨機森林演算法很難被打敗。針對任何給定的數據集,盡管你常能找到一個優於它的模型(比較典型的是神經網路或者一些增益演算法 boosting algorithm),但這類演算法肯定不多,而且通常建這樣的模型並調試好要比隨機森林演算法模型要耗時的更多。這也是為何隨機森林演算法作為基準模型表現出色的原因。

4. 建立一個差勁的隨機森林模型真的很難!因為隨機森林演算法對指定使用的超參數(hyper-parameters )並不十分敏感。為了要得到一個合適的模型,它們不需要做很多調整。只需使用大量的樹,模型就不會產生很多偏差。大多數的隨機森林演算法的實現方法的參數設置初始值也都是合理的。

5. 通用性。隨機森林演算法可以應用於很多類別的模型任務。它們可以很好的處理回歸問題,也能對分類問題應付自如(甚至可以產生合適的標准概率值)。雖然我從沒親自嘗試,但它們還可以用於聚類 分析問題。

————————————————

原文鏈接:https://blog.csdn.net/jiede1/article/details/78245597

原文鏈接:https://blog.csdn.net/rosefun96/article/details/78833477

⑨ RandomForest隨機森林演算法

https://blog.csdn.net/qq_16633405/article/details/61200502
http://blog.itpub.net/12199764/viewspace-1572056/
https://blog.csdn.net/colourful_sky/article/details/82082854

隨機森林中隨機是核心,通過隨機的選擇樣本、特徵,降低了決策樹之間的相關性。隨機森林中的隨機主要有兩層意思,一是隨機在原始訓練數據中有放回的選取等量的數據作為訓練樣本,二是在建立決策樹時,隨機的選特徵中選取一部分特徵建立決策樹。這兩種隨機使得各個決策樹之間的相關性小,進一步提高模型的准確性。
隨機森林未用到決策樹的剪枝,那怎樣控制模型的過擬合呢?主要通過控制 樹的深度(max_depth),結點停止分裂的最小樣本數(min_size)等參數。隨機森林還可以處理缺失值。

假設訓練集中n個樣本,每個樣本有d個特徵,需要訓練一個包含T棵數的隨機森林,具體的演算法流程如下所示:
1、對於T棵決策樹,分別重復如下操作:a、使用Bootstrap抽樣,從訓練集D獲得大小為n的訓練集D; b、從d個特徵中隨機選取m(m
2、如果是回歸問題,則最後的輸出是 每個樹輸出的均值;
3、如果是分類問題,則根據投票原則,確定最終的類別。
每棵樹的生成都是隨機的,至於隨機選取的特徵數,如何決定隨機選取的特徵數的大小呢,主要有兩種方法,一種是交叉驗證,另外一種的經驗性設置 m= log_2 d +1。

1、分類間隔:分類間隔是指森林中正確分類樣本的決策樹的比例減去錯誤分類的決策樹的比例,通過平均每個樣本的分類間隔得到隨機森林的分類間隔。對於分類間隔,當然是越大越好,大的分類間隔說明模型的分類效果比較穩定,泛化效果好。
2、袋外誤差:對於每棵樹都有一部分樣本而沒有被抽取到,這樣的樣本就被稱為袋外樣本,隨機森林對袋外樣本的預測錯誤率被稱為袋外誤差(Out-Of-Bag Error,OOB)。計算方式如下所示:
(1)對於每個樣本,計算把該樣本作為袋外樣本的分類情況;
(2)以投票的方式確定該樣本的分類結果;
(3)將誤分類樣本個數占總數的比率作為隨機森林的袋外誤差。
3、變數重要程度刻畫:其實變數重要程度刻畫不能算是模型性能評估裡面,因為有的實際應用中需要查看這么多的特徵中到底那一部分特徵是相對重要的特徵,這個時候變數的重要程度的刻畫就顯得尤為重要了。其計算方式主要有一下兩種方式:
(1)通過計算特徵的平均信息增益大小得出;
(2)通過計算每個特徵對模型准確率的影響,通過打亂樣本中某一特徵的特徵值順序,產生新樣本,將新樣本放入建立好的隨機森林模型計算準確率。相對於不重要的特徵,即使打亂了順序也不會對結果產生很大的影響,對於重要的特徵,會對結果產生很大的影響的。

優點
1、對於大部分的數據,它的分類效果比較好。
2、能處理高維特徵,不容易產生過擬合,模型訓練速度比較快,特別是對於大數據而言。
3、在決定類別時,它可以評估變數的重要性。
4、對數據集的適應能力強:既能處理離散型數據,也能處理連續型數據,數據集無需規范化。
缺點
1、隨機森林容易產生過擬合,特別是在數據集相對小或者是低維數據集的時候。
2、 計算速度比單個的決策樹慢。
3、 當我們需要推斷超出范圍的獨立變數或非獨立變數,隨機森林做得並不好。

分類問題

回歸問題

常用方法 :參考 https://blog.csdn.net/w952470866/article/details/78987265
predict_proba(x):給出帶有概率值的結果。每個點在所有label(類別)的概率和為1。
predict(x):預測X的結果。內部還是調用的predict_proba(),根據概率的結果看哪個類型的預測值最高就是哪個類型。
predict_log_proba(x):和predict_proba基本上一樣,只是把結果給做了log()處理。
fit(X, y, sample_weight=None): 從訓練數據集(X,y)上建立一個決策樹森林。x為訓練樣本,y為目標值(分類中的類標簽,回歸中的實數)。
參數
和GBDT對比,GBDT的框架參數比較多,重要的有最大迭代器個數,步長和子采樣比例,調參起來比較費力。但是RandomForest則比較簡單,這是因為bagging框架里的各個弱學習器之間是沒有依賴關系的,這減小的調參的難度。換句話說,達到同樣的調參效果,RandomForest調參時間要比GBDT少一些。
Bagging框架參數
n_estimators:最大的弱學習器個數(建立隨機森林分類器(樹)的個數)。太小容易欠擬合,太大又容易過擬合,一般選擇一個適中的數值。增大可以降低整體模型的方差,提升模型的准確度,且不會對子模型的偏差和方差有任何影響。由於降低的是整體模型方差公式的第二項,故准確度的提高有一個上限。在實際應用中,可以在1至200之間取值;
n_jobs:引擎允許使用處理器的數量。 若值為1則只能使用一個處理器, 值為-1則表示沒有限制。設置n_jobs可以加快模型計算速度;
oob_score:是否採用袋外誤差來評估模型的好壞,默認為 False,推薦設置為True,因為袋外分數反應了一個模型擬合後的泛化能力;
CART決策樹參數
max_features: RF劃分時考慮的最大特徵數。可以使用很多種類型的值,默認是"None",意味著劃分時考慮所有的特徵數;如果是"log2"意味著劃分時最多考慮log2N個特徵;如果是"sqrt"或者"auto"意味著劃分時最多考慮N−−√N個特徵。如果是整數,代表考慮的特徵絕對數。如果是浮點數,代表考慮特徵百分比,即考慮(百分比xN)取整後的特徵數,其中N為樣本總特徵數。一般來說,如果樣本特徵數不多,比如小於50,我們用默認的"None"就可以了,如果特徵數非常多,我們可以靈活使用剛才描述的其他取值來控制劃分時考慮的最大特徵數,以控制決策樹的生成時間。
max_depth: 決策樹最大深度。默認為"None",決策樹在建立子樹的時候不會限制子樹的深度這樣建樹時,會使每一個葉節點只有一個類別,或是達到min_samples_split。一般來說,數據少或者特徵少的時候可以不管這個值。如果模型樣本量多,特徵也多的情況下,推薦限制這個最大深度,具體的取值取決於數據的分布。常用的可以取值10-100之間。
min_samples_split: 內部節點再劃分所需最小樣本數,默認2。這個值限制了子樹繼續劃分的條件,如果某節點的樣本數少於min_samples_split,則不會繼續再嘗試選擇最優特徵來進行劃分。 默認是2.如果樣本量不大,不需要管這個值。如果樣本量數量級非常大,則推薦增大這個值。
min_samples_leaf:葉子節點最少樣本數。 這個值限制了葉子節點最少的樣本數,如果某葉子節點數目小於樣本數,則會和兄弟節點一起被剪枝。 默認是1,可以輸入最少的樣本數的整數,或者最少樣本數占樣本總數的百分比。如果樣本量不大,不需要管這個值。如果樣本量數量級非常大,則推薦增大這個值。
min_weight_fraction_leaf:葉子節點最小的樣本權重和。這個值限制了葉子節點所有樣本權重和的最小值,如果小於這個值,則會和兄弟節點一起被剪枝。 默認是0,就是不考慮權重問題。一般來說,如果我們有較多樣本有缺失值,或者分類樹樣本的分布類別偏差很大,就會引入樣本權重,這時我們就要注意這個值了。
max_leaf_nodes: 最大葉子節點數。通過限制最大葉子節點數,可以防止過擬合,默認是"None」,即不限制最大的葉子節點數。如果加了限制,演算法會建立在最大葉子節點數內最優的決策樹。如果特徵不多,可以不考慮這個值,但是如果特徵分成多的話,可以加以限制,具體的值可以通過交叉驗證得到。
min_impurity_split: 節點劃分最小不純度。這個值限制了決策樹的增長,如果某節點的不純度(基於基尼系數,均方差)小於這個閾值,則該節點不再生成子節點,即為葉子節點 。一般不推薦改動默認值1e-7。
上面的決策樹參數中最重要的包括最大特徵數 max_features , 最大深度 max_depth , 內部節點再劃分所需最小樣本數 min_samples_split 和葉子節點最少樣本數 min_samples_leaf
參數調優 :隨機森林參數的調優在數據分析和挖掘中也佔有一定的地位,學會好的調優方法能夠達到事半功倍的效果。調優參考 https://blog.csdn.net/cherdw/article/details/54971771

⑩ 隨機森林演算法是什麼

隨機森林演算法是以決策樹為基學習器構建bagging的基礎上,進一步在決策樹的訓練過程中引入隨機屬性的演算法。

在機器學習中,隨機森林是一個包含多個決策樹的分類器, 並且其輸出的類別是由個別樹輸出的類別的眾數而定。 Leo Breiman和Adele Cutler發展出推論出隨機森林的演算法。

而 "Random Forests" 是他們的商標。 這個術語是1995年由貝爾實驗室的Tin Kam Ho所提出的隨機決策森林(random decision forests)而來的。這個方法則是結合 Breimans 的 "Bootstrap aggregating" 想法和 Ho 的"random subspace method"以建造決策樹的集合。

隨機森林演算法之根據下列演算法而建造每棵樹:

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

輸入特徵數目m,用於確定決策樹上一個節點的決策結果;其中m應遠小於M。

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

對於每一個節點,隨機選擇m個特徵,決策樹上每個節點的決定都是基於這些特徵確定的。根據這m個特徵,計算其最佳的分裂方式。

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

閱讀全文

與隨機森林演算法連續值相關的資料

熱點內容
python字元串中符號 瀏覽:785
python正則表達式貪婪模式 瀏覽:648
愛國精神指的是什麼app 瀏覽:408
壽司解壓系列全集視頻 瀏覽:913
物體三維重建演算法 瀏覽:984
fuli直播app哪個好 瀏覽:918
租辦公室用什麼app 瀏覽:106
醫師定期考核刷題app哪個好 瀏覽:338
導出dmp文件命令 瀏覽:288
手機百度網盤怎麼解壓密碼文件 瀏覽:585
索引重新編譯 瀏覽:606
命令與征服4免cd補丁完美版 瀏覽:428
kotlin編譯為native 瀏覽:142
家用編譯機 瀏覽:552
電子加密貨幣最新政策 瀏覽:382
androidcanvas撤銷 瀏覽:272
安卓手機怎麼把圖標全部下移 瀏覽:188
飢荒被伺服器踢出怎麼進 瀏覽:173
c編譯器哪款好 瀏覽:734
快手寶哥發明什麼app 瀏覽:823