隨機森林原理及實現

2021-10-23 06:14:45 字數 3456 閱讀 2374

解釋的非常生動!

對含有n個樣本,m個特徵的資料集操作。

(1).首先取樣t次,每次從n個樣本裡有放回的選取n個樣本(n=

(2).我們將剩下的1/3的樣本帶入(1)中的模型進行測試,求袋外誤差,從而得到特徵的重要性排列。選取排名靠前的特徵,組成了新的森林。(疑問:每棵樹的特徵是從這一步挑選出的特徵裡隨機抽取嗎?每棵樹的樣本還需要再次抽取嗎,仍然為n個?)

(3).重複第二個步驟進行迭代,不斷排除影響較小的特徵,得到新的森林,直至特徵數減少到指定值m。完成迭代。

(4).將每次迭代得到的森林再計算套外誤差(其實和(2)中的袋外誤差一樣,都叫oob。這裡為了區分,叫做套外誤差),挑選出誤差最小的森林,即為所求。

(1)關於有放回抽取樣本:每個取樣集只使用了初始訓練集中約63.2%的樣本【每個樣本被抽到的概率是1/n,樣本不被抽到概率就是1-1/n,總共抽了t次,第t次試驗後樣本不被抽到的概率是(1-1/n)t,當t趨近於無窮大時,(1-1/n)t=1/e,約等於36.8%】,另外抽不到的樣本叫做out-of-bag(oob) examples,這部分資料可以用於對決策樹的效能進行評估,計算模型的**錯誤率,稱為袋外資料誤差。這已經經過證明是無偏估計的,所以在隨機森林演算法中不需要再進行交叉驗證或者單獨的測試集來獲取測試集誤差的無偏估計

(2)關於k的值:k一般選擇(其中d為樣本所有屬性):

(3)關於求森林的**值:將模型用於樣本,得到各樣本的**值,對分類任務使用簡單投票法(選擇數量最多的結果)確定該樣本最終**值,對回歸任務使用簡單平均法(所有結果的平均值)確定該樣本最終**值。

(4)關於袋外誤差以及特徵的選取:

對1/3的測試集求**值,得誤差erroob2。改變測試集中某個特徵的值再進行**,得到誤差erroob1。從而求得該特徵對該樹的重要性。(詳細解釋:隨機對袋外資料oob所有樣本的特徵x加入雜訊干擾(即:隨機改變樣本在特徵x處的值),再次計算袋外資料誤差,記為erroob1。假設森林中有n棵樹,則特徵x的重要性=∑erroob1−erroob2n∑erroob1−erroob2n。這個數值之所以能夠說明特徵的重要性是因為,如果加入隨機雜訊後,袋外資料準確率大幅度下降(即erroob1上公升),說明這個特徵對於樣本的**結果有很大影響,進而說明重要程度比較高。)

對每棵樹中的每個特徵都計算一次。但這只能代表這些特徵在樹中的重要程度不能代表特徵在整個森林中的重要程度。那我們怎麼計算各特徵在森林中的重要程度呢?每個特徵在多棵數**現,取這個特徵值在多棵樹中的重要程度的均值即為該特徵在森林中的重要程度。

這樣就得到了所有特徵在森林中的重要程度。將所有的特徵按照重要程度排序,去除森林中重要程度低的部分特徵,得到新的特徵集。這時相當於我們回到了原點,這算是真正意義上完成了一次迭代。

(5)關於套外誤差以及森林的選取:

得到了每次迭代出的森林之後,我們需要選擇出最優秀的森林(隨機森林畢竟是整合學習,所以最後的森林不一定是最優的)。那麼我們怎麼比較這些森林的好壞呢?這時我們需要引入乙個指標來評價乙個森林的好壞,上面的用於評價套外樣本在樹中的誤差率,這裡的評價套外樣本在森林中的誤差率。(因為都是利用套外樣本,所以名字都是(out-of-bag))

森林中,·每個樣本總能在森林裡找到幾棵樹不包含他。那麼該樣本就是這幾棵樹的套外樣本,通過這幾棵樹**這個樣本的結果。**出所有所有樣本的結果之後與真實值進行比較,就可以得到這個森林的套外誤差率。

選擇套外誤差率最小的森林作為最終的隨機森林模型。

隨機森林實際上是一種特殊的bagging方法,它將決策樹用作bagging中的模型。首先,用bootstrap方法生成多個訓練集,然後,對於每個訓練集,構造一顆決策樹,在節點找特徵進行**的時候,並不是對所有特徵找到能使得指標(如資訊增益)最大的,而是在特徵中隨機抽取一部分特徵,在抽到的特徵中間找到最優解,應用於節點,進行**。隨機森林的方法由於有了bagging,也就是整合的思想在,實際上相當於對於樣本和特徵都進行了取樣(如果把訓練資料看成矩陣,就像實際中常見的那樣,那麼就是乙個行和列都進行取樣的過程),所以可以避免過擬合。

prediction階段的方法就是bagging的策略,分類投票,回歸均值。

隨機森林中的基學習器多樣性不僅來自樣本擾動(取樣的隨機),還來自屬性的擾動(特徵的選取),這就使得最終模型的泛化效能可通過個體學習器之間的差異度增加而進一步提公升

class sklearn.ensemble.randomforestclassifier(

n_estimators=10,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_split=1e-07, bootstrap=true, oob_score=false, n_jobs=1, random_state=none, verbose=0, warm_start=false,class_weight=none)

以下用常用引數:

1)n_estimators:設定多少個基分類器(取決於資料量)

2)min_samplies_split:單獨葉子節點至少要有幾個樣本,

3)max_features:一次抽樣抽多少feature,回歸問題設定為特徵數,分類問題設定為sqrt(n_features)

4)max_depth:樹的最大深度(5-10)

5)oob_score

from sklearn.ensemble import randomforestclassifier

from sklearn.metrics import precision_recall_curve

rf=randomforestclassifier(n_estimators=10, criterion='gini', max_depth=5,

min_samples_split=2, oob_score=true, n_jobs=1 )

param_grid =

gscv = gridsearchcv(clf,param_grid,n_jobs= -1,verbose = 1,cv = 5,error_score = 0,scoring='auc')

gscv.fit(x,y)

gscv.best_score_

gscv.best_params_

gscv.predict_proba(x)#refit=true,gscv為最佳分類器

gscv.grid_scores_#score=roc_auc,auc值

隨機森林的原理與實現

由於單一的決策樹一般都會有過擬合的問題,因此一些研究人員通過特定的方式構建多個決策樹的方法來增加模型中的偏差 bias 從而解決模型過擬合的問題。由於在構建樹的過程中使用了一些隨機化的方法,而且又包括了很多的樹,因此這個模型被稱為了隨機森林。隨機森林既可以用於分類,又可以用於回歸。用於分類時,給定的...

機器學習 隨機森林原理及應用

隨機森林是一種整合學習的方法,它的最終結果取決於多課決策樹的投票結果。對於分類問題,直觀來講就是對乙個資料集合構造很多棵決策樹,然後對於新樣本每一棵決策樹都會輸出乙個結果,最後選擇多棵決策樹中輸出類別最多的結果作為最終的輸出結果。這也就是隨機森林中森林的含義。這也是隨機森林最重要的一點,隨機森林的隨...

隨機森林演算法原理 機器學習演算法 隨機森林

隨機森林是一種通用的機器學習方法,能夠處理回歸和分類問題。它還負責資料降維 缺失值處理 離群值處理以及資料分析的其他步驟。它是一種整合學習方法,將一組一般的模型組合成乙個強大的模型 我們通過適用隨機的方式從資料中抽取樣本和特徵值,訓練多個不同的決策樹,形成森林。為了根據屬性對新物件進行分類,每個數都...