集成算法(chapter 7 - Hands on machine learning with scikit learn and tensorflow)


Voting classifier

多種分類器分別訓練,然后分別對輸入(新數據)預測/分類,各個分類器的結果視為投票,投出最終結果:

訓練:

投票:

為什么三個臭皮匠頂一個諸葛亮。通過大數定律直觀地解釋:

一個硬幣P(H)=0.51。大數定律保證拋硬幣很多次之后,平均得到的正面頻數接近\(0.51 \times N\),並且N越大,越接近。那么換個角度,N表示同時擲硬幣的人數,即為這邊的N個臭皮匠,他們的結果合到一起就得到的是接近真實結果的值。
進一步根據中心極限定理,即二項分布以正態分布為其極限分布定律,可以計算“N次拋硬幣后,header占大多數的概率”
例如P(H)=0.51,N=1000,則\(\Pr(\text{Header 占大多數}) = 1-\Phi (\frac{n/2 - np}{\sqrt{np(1-p)}})=\Phi(0.63)=0.74\),當N=10000,\(Pr=\Phi(2)=0.98\)

Bagging and Pasting

跟投票的思路不同,Bagging(boost aggregating)的思路是同一算法訓練多個模型,每個模型訓練時只使用部分數據。預測時,每個模型分別給出自己的預測結果,再將這些結果聚合起來。

Out Of Bag

因為每個模型訓練時隨機選擇每個訓練sample數據,那么,對於某個sample而言,有可能被選中0次或多次。如果一個sample沒有被選中,那么它很自然地可以被用做交叉驗證。
某個sample至少被一個模型訓練用到的概率,\(\Pr(\text{sample被選中})=1-\left( 1- \frac{1}{N}\right)^k\)

sample被選中的概率 VS k (N=10,000)

\(k=N\), \(\lim_{N\to\infty}1-\left(1-\frac{1}{N}\right)^N=1-e^{-1} =0.63\)

parallel training pattern

bagging算法需要訓練多個模型,每個模型的訓練過程相同,只是算法使用的數據不同。聯想到並行訓練的問題,兩種思路:
模型訓練的並行化

  • 如果訓練樣本數比較小,每個模型能夠承受所有數據,那么使用上面的模式。
  • 如果訓練樣本很大,需要分區到多個cpu/節點上,那么每個節點只消費部分訓練樣本,但是每個節點可以同時訓練多個模型,最終再把各個模型的半成品結合到一起形成完整的模型。

隨機森林

隨機森林一般采用bagging算法訓練模型。

rnd_clf = RandomForestClassifier(n_estimators=500, max_leaf_nodes=16, n_jobs=-1)
bag_clf = BaggingClassifier(
             DecisionTreeClassifier(splitter="random", max_leaf_nodes=16),
             n_estimators=500, max_samples=1.0, bootstrap=True, n_jobs=-1
)

Feature Importance

Lastly, if you look at a single Decision Tree, important features are likely to appear closer to the root of the tree, while unimportant features will often appear closer to the leaves (or not at all). It is therefore possible to get an estimate of a feature’s importance by computing the average depth at which it appears across all trees in the forest.

Boosting

定義:any Ensemble method that can combine several weak learners into a strong learner. The general idea of most boosting methods is to train predictors sequentially, each trying to correct its predecessor.

AdaBoosting

如果各一個樣本被predecessor分類器誤分類了,那么下一個分類器將會更重視這個樣本(boost/提升這個樣本)。
所以在順序訓練模型時,每個樣本的重要性在變化:

樣本權重每次迭代都在變化

Gradient Boosting

Gradient Boosting也是通過不斷增加predictor來修正之前的predictor。不同於adaboost的地方是,gradient boosting調整每個樣本的權重,后面的predictor直接去擬合前面的predictor的殘差(residual error).

Stacking (stacked generalisation)

多層訓練模型的雛形。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM