目標:html
相對於當個學習器,集成學習經過使用多個基學習器的預測結果來來提升學習預測的泛化性能以及魯棒性;算法
集成學習的兩個思路:bootstrap
1)、經過使用並行的學習,獲得多個學習模型而後取其平均結果目的在於減小方差,表明算法有隨機森林。一般來講多個學習器的集成要比單個學習器的效果要好多。數組
2)、採用串行的方式生成多個學習器目的在於減小誤差(bias),使用多個弱分類器組合成爲一個強分類器,表明算法adaBoosting以及boosting tree、GDBT。框架
集成學習中,bagging方法使用訓練集的一個隨機子集來進行訓練多個黑盒分類器,而後將不一樣的黑盒分類器集成到一塊兒獲得一個最終的預測模型。在生成訓練模型的過程當中引入隨機化並在最後集成結果的方式能夠減小整個訓練模型的方差,同時不用由於底層的學習器的不一樣而發生改變。隨機森林經過引入隨機性來避免過擬合所以在生成基學習器時能夠考慮完成生成即基學習器越強越好,對於boosting的方法則是相反,要求基學習器要弱一點纔好。(boosting減小誤差,由於越強越吻合3反而容易出現過擬合)。dom
隨機森林根據訓練數據不一樣的生成方式包括一下:ide
1)、又放回的抽取,稱做bagging性能
2)、針對特徵進行隨機化,成爲隨機子空間random subspace學習
3)、針對特徵和樣本都作隨機化,稱爲隨機patchs(補丁、塊)lua
4)、隨機抽取樣本,稱爲 Pasting
scikit-learn框架中,sklearn.ensemble中有BaggingClassifier和BaggingRegressor兩個對象能夠實現Bagging方法。方法中能夠經過參數指定模型使用基學習器的類型,以及抽取子集的策略。通用的參數爲一下幾個參數:
max_sample:指定隨機子集的規模;小於1表示比例,大於1則爲樣本數
max_features:指定訓練數據的特徵規模;小於1表示比例,大於1則爲樣本數
boostrap:指定是否又放回的抽樣;true/false;
boostrap_features:指定特徵是否又放回的抽樣;true/false;
oob_score = true:表示使用帶外數據衡量泛化能力,數據越大越好;
一下實例中基學習器採用K近鄰算法,樣本規模爲原樣本的50%,特徵爲50%
from sklearn.ensemble import BaggingClassifier from sklearn.neighbors import KNeighborsClassifier bagging = BaggingClassifier(KNeighborsClassifier(), max_samples=0.5, max_features=0.5)
基於隨機化的決策樹算法,sklearn.ensemble包含了兩種平均結果的算法:隨機森林和Extra-Tree。在構建分類器時經過引入隨機性生成了一系列不相同的樹,而後將不一樣的分類樹的結果進行平均做爲最終的輸出結果。
樹算法的訓練和其餘的算法同樣,都是使用兩個數組做爲參數:X承載訓練特徵, Y承載訓練數據的標籤值。以下例所示:
from sklearn.ensemble import RandomForestClassifier X = [[0, 0], [1, 1]] Y = [0, 1] clf = RandomForestClassifier(n_estimators=10) clf = clf.fit(X, Y)
若是擴展成爲多分類的問題,那麼將Y擴展成爲[n_samples, outputs]
隨機森林的使用主要包括這兩個類:RandomForestClassifier
and RandomForestRegressor;一個負責分類一個負責迴歸。在隨機森林生成過程當中數據採用又放回的抽取,同時在選擇劃分時選中的劃分只是在相應的特徵子集上的最優而不是所有特徵的最優,這樣就會使得最終的bias會有所增大,可是經過多棵樹的平均使得方差varience減小不少,所以這種方法仍是頗有效的。在最終預測結果時,現有版本採起的方式是平均全部類別的輸出的機率,而後選擇最大的輸出(只在最後產生一個結果),拋棄了原有的對類別的投票(在每棵樹上都有一個分類結果);
n_estimators:生成的基學習器的數量,越多越好,可是越費時間;
max_features:抽樣後樣本的最大值,在迴歸問題中通常直接等於原有的特徵數,在分類問題中通常採用sqrt(原有特徵);
max_depth=None:生成基學習器樹的最大深度;
min_samples_split=1:選擇劃分最小的樣本數,越小生成的樹就越徹底,一般和max_depth搭配使用產生一個發育徹底的樹;
bootstrap=False:同上面說的;
oob_score = true:同上(固然在使用又放回抽樣時使用);
n_jobs = k:設置並行化計算參數,任務被分紅k分,使用機器的k個核心計算,當k=1時使用機器的所有核心,能夠提高計算速度,可是不是線性關係。
在決策樹的生成過程當中特徵使用的前後順序能夠做爲一個特徵相對重要性判斷的一個指標,越先使用的特徵對結果的貢獻就越大因次該特徵也就相對來講比較重要,所以可使用該特徵對最後結果的貢獻度來表示該特徵的相對重要性。
在實際的使用中,使用feature_importances_屬性來存儲每一個特徵的重要性指標,維度就是特徵的數量,其總和爲1;