目錄html
更新、更全的《機器學習》的更新網站,更有python、go、數據結構與算法、爬蟲、人工智能教學等着你:http://www.javashuo.com/article/p-vozphyqp-cm.htmlpython
集成學習主要分紅兩個流派,其中一個是Boosting算法,另外一個則是本文要講的Bagging算法,Bagging算法
算法的弱學習器是沒有依賴關係的,所以弱學習之間能夠並行擬合。算法
Bagging算法中最著名的算法是隨機森林,因爲隨機森林的不容易過擬合性以及簡便性,能夠說是和梯度提高樹同名的算法。bootstrap
Bagging算法的弱學習器的訓練集是經過隨機採樣獲得的。經過\(T\)次的隨機採樣,咱們能夠經過自主採樣法(bootstrap sampling)獲得\(T\)個採樣集,而後對於這\(T\)個採樣集獨立的訓練出\(T\)個弱學習器,以後咱們經過某種結合策略將這\(T\)個弱學習器構形成一個強學習器。數據結構
在一個有\(m\)個樣本的訓練數據中隨機採樣,一個樣本每次被採樣的機率爲\({\frac{1}{m}}\),不被採集的機率爲\(1-{\frac{1}{m}}\),若是\(m\)次採樣都沒有采中的機率爲\((1-{\frac{1}{m}})^m\),當\(m\rightarrow{\infty}\),\((1-{\frac{1}{m}})^m\rightarrow{\frac{1}{e}}\approx0.368\),即在Bagging算法的隨機採樣中,大約有\(36.8%\)的數據沒有被採中。app
Bagging算法的結合策略,對於分類問題,通常使用相對多數投票法,即票數最多的類別即爲樣本預測類別;對於迴歸問題,通常使用簡單平均法,即對\(T\)個弱學習的輸出作算術平均獲得樣本預測值。dom
\(m\)個樣本\(n\)個特徵的訓練數據集\(D=\{(x_1,y_1),(x_2,y_2),\cdots,(x_m,y_m)\}\);弱學習器迭代次數爲\(T\)。機器學習
最終強學習器\(f(x)\)。學習
隨機森林(random forest,RF)基於Bagging算法的思想,作了必定的改進,即對特徵進行了選擇。測試
RF使用CART決策樹做爲弱學習器,可是RF對普通的CART決策樹作了改進,普通的CART樹選擇最優特徵做爲決策樹劃分的條件;RF的CART決策樹則是在訓練數據的\(n\)個特徵中隨機選擇\(n_{sub}\)特徵,通常狀況下\(n_{sub}<n\),而後在這\(n_{sub}\)個特徵中選擇最優特徵做爲決策樹劃分的條件。
若是\(n_{sub}=n\),則RF的決策樹爲普通的決策樹;\(n_{sub}\)越小,則模型魯棒性越好,模型方差也會減少,但模型對訓練集的擬合程度會變差,反之,模型的誤差會變小,模型對訓練集的泛化能力會變差。
RF在實際應用中不只能解決分類和迴歸問題,還能夠用於特徵轉換、異常點檢測等。
Extra Trees和RF的區別有如下兩點:
以上兩點致使extra trees生成的隨機森林的決策樹規模通常會大於RF。便可以必定程度的減少模型的方差,加強模型的泛化能力。
# 使用ExtraTree判斷特徵重要性程度 from sklearn.datasets import make_friedman1 from sklearn.ensemble import ExtraTreesRegressor X, y = make_friedman1(n_samples=100, n_features=10, random_state=0) # 經過ExtraTreesRegressor模型獲取每一個特徵的重要性 et = ExtraTreesRegressor(n_estimators=10) et = et.fit(X, y) print('10個特徵各自的重要性:{}'.format(et.feature_importances_))
10個特徵各自的重要性:[0.11488041 0.12557425 0.08477273 0.45483849 0.09753123 0.01384401 0.0364967 0.0256125 0.01965904 0.02679065]
Totally Random Trees Embedding(TRTE)是一種無監督學習的數據轉換方式,它能夠將低維的數據集映射到高維,在支持向量機中使用了核技巧將低維的數據映射到高維,TRTE提供了不一樣於核技巧的方法。
TRTE首先會構成一個相似RF的隨機森林模型,模型定下來後模型中\(T\)個決策樹的葉子節點位置也會被肯定。
如今假設咱們有3棵決策樹,每一個決策樹有4個葉子節點,某個數據特徵\(x\)劃分到第1個決策樹的第1個葉子節點,第2棵決策樹的第2個節點,第3棵決策樹的第4個節點,則\(x\)映射後的特徵編碼爲\((1,0,0,0\quad0,1,0,0\quad0,0,0,1)\),由此既能夠獲得12維的高維特徵。
Isolation Forest(IForest)能夠檢測異常點。
IForest相似於RF,但在隨機採樣的時候,IForest隨機採樣的數量並非\(m\)個,而是遠遠小於訓練集個數,由於IForest的做用是檢測異常點,若是採樣過多正確樣本會掩蓋掉異常點。
在劃分特徵的時候,IForest對劃分特徵隨機選擇一個劃分閾值,並隨機選擇一個特徵劃分決策樹。
因爲IForest的樣本數過少,IForest也會選擇一個較小的最大決策樹深度控制決策樹的深度。
將測試樣本\(x\)擬合到\(T\)棵決策樹,計算每顆決策樹上該樣本的葉子節點的深度\(h_t(x)\),從而計算出平均高度,則樣本點\(x\)的異常機率爲
\[ s(x,m) = 2^{-{\frac{h(x)}{c(m)}}} \]
其中\(m\)爲樣本個數,\(c(m)\)的表達式爲
\[ c(m) = 2\ln(m-1)+\xi-2{\frac{m-1}{m}} \]
其中\(\xi\)爲歐拉常數,\(s(x,m)\)的取值範圍是\([0,1]\),取值越接近1,測試樣本點是異常點的機率越大。
\(m\)個樣本\(n\)個特徵的訓練數據集\(D=\{(x_1,y_1),(x_2,y_2),\cdots,(x_m,y_m)\}\);弱學習器迭代次數爲\(T\)。
最終強學習器\(f(x)\)。
集成學習到這也算是告一段落了,相信你們對Boosting和Bagging算法有了很清晰的瞭解,對於Boosting中的AdaBoost和GBDT,因爲邏輯較爲複雜,能夠多看一看;對於Bagging中的隨機森林,隨機森林自己並非很難理解,只要可以很自如的運用隨機森林的一些拓展算法便可。