tree based ensemble algorithms
- 原始的Boost算法是在算法開始的時候,爲每一個樣本賦上一個權重值,初始的時候,每一個樣本都是一樣的重要。在每一步的訓練中,獲得的模型,會給出每一個數據點的估計對錯,根據判斷的對錯,在每一步的訓練以後,會增長分錯樣本的權重,減小分類正確的樣本的權重,若是在後續的每一步訓練中,若是繼續被分錯,那麼就會被嚴重的關注,也就是得到了一個比較高的權重。通過N次迭代以後,將會獲得N個簡單的分類器(base learner),而後將他們組裝起來(能夠進行加權,或者進行投票),獲得一個最終的模型。
主要介紹如下幾種ensemble的分類器(tree based algorithms)
xgboost
![](http://static.javashuo.com/static/loading.gif)
- The correct answer is marked in red. Please consider if this visually seems a reasonable fit to you. The general principle is we want both a simple and predictive model. The tradeoff between the two is also referred as bias-variance tradeoff in machine learning.
lightGBM: 基於決策樹算法的分佈式梯度提高框架
- lightGBM 與xgboost的區別:
- xgboost使用的是pre-sorted算法(對全部的特徵都按照特徵的數值進行預排序,在遍歷分割點的時候用O(data)的代價函數找個一個特徵的最好分割點,可以更加精確的找到數據的分割點。
- lightGBM 使用的是histogram算法,佔用內存更低,數據分割的複雜度更低。
- 決策樹生長策略上
- xgboost採用的是level-wise生長策略,可以同時分類同一層的葉子,從而進行多線程優化,不容易過擬合,可是不加區分的對待同一層的葉子,帶來了不少沒有必要的開銷(有不少的葉子分裂增益較低,沒有必要進行搜索和分裂)
- lightGBM採用的是leaf-wise的生長策略,每次從當前的葉子中找到分裂增益最大的(通常也是數據量最大)的一個葉子進行分裂,如此循環;可是生長出的決策樹枝葉過多,產生過擬合,lightGBM在leaf-wise上增長了一個最大深度的限制,在保證高效率的同時防止過擬合。
- 另外一個巧妙的優化是histogram作差加速,一個容易觀察到的現象:一個葉子的直方圖能夠由它的父節點的直方圖與它兄弟的直方圖作差獲得。
![](http://static.javashuo.com/static/loading.gif)
GBDT(Gradient Boosting Decison Tree)
- GBDT中使用的都是迴歸樹,GBDT用來作迴歸預測,調整後也能夠用於分類,設定閾值,大於閾值爲正例,反之爲負例,能夠發現多種有區分性的特徵以及特徵組合。
- GBDT是把全部樹的結論累加起來作最終結論,GBDT的核心就在於,每一棵樹學的是以前全部樹結論和的殘差,這個殘差就是把一個加預測值後能獲得真實值的累加量。
- 好比A的真實年齡是18歲,但第一棵樹的預測年齡是12歲,差了6歲,即殘差爲6歲。那麼在第二棵樹裏咱們把A的年齡設爲6歲去學習,若是第二棵樹真的能把A分到6歲的葉子節點,那累加兩棵樹的結論就是A的真實年齡;若是第二棵樹的結論是5歲,則A仍然存在1歲的殘差,第三棵樹裏A的年齡就變成1歲,繼續學。 Boosting的最大好處在於,每一步的殘差計算其實變相地增大了分錯instance的權重,而已經分對的instance則都趨向於0。這樣後面的樹就能愈來愈專一那些前面被分錯的instance。
用公式來表示提高樹的部分原理
node
GBDT劃分標準默認是friedman_mse能夠查看sklearn 官方文檔中GBDT的參數說明git
- Gradient Boost與傳統的Boost的區別是
- 每一次的計算是爲了減小上一次的殘差(residual),而爲了消除殘差,咱們能夠在殘差減小的梯度(Gradient)方向上創建一個新的模型。
- 因此說,在Gradient Boost中,每一個新的模型的創建是爲了使得以前模型的殘差往梯度方向減小。
- Shrinkage(縮減)的思想認爲,每次走一小步逐漸逼近結果的效果,要比每次邁一大步很快逼近結果的方式更容易避免過擬合。
- 即它不徹底相信每一棵殘差樹,他認爲每棵樹只學到了真理的一部分,累加的時候只累加一小部分,每次經過多學幾棵樹彌補不足。
- 本質上,Shrinkage爲每棵樹設置了一個weight,累加時要乘以這個weight,但和Gradient並無關係。
The advantages of GBRT are:github
- Natural handling of data of mixed type (= heterogeneous features)
- 能夠處理不一樣性質的屬性,數值特徵與category特徵,
- 數值特徵須要進行數據的預處理
- Predictive power
Robustness to outliers in output space (via robust loss functions)算法
The disadvantages of GBRT are:多線程
- Scalability, due to the sequential nature of boosting it can hardly be parallelized.
- Boost是一個串行過程,很差並行化,並且計算複雜度高,同時不太適合高維稀疏特徵。
隨機森林
決策樹
- ID3 信息增益:熵(數據的不肯定性程度)的減小;一個屬性的信息增益量越大,這個屬性做爲一棵樹的根節點就能使這棵樹更簡潔。
信息增益=分裂前的熵 – 分裂後的熵
面對類別較少的離散數據時效果較好,但若是面對連續的數據(如體重、身高、年齡、距離等),或者每列數據沒有明顯的類別之分(最極端的例子的該列全部數據都獨一無二),即每一個值對應一類樣本
C4.5信息增益比:克服了ID3用信息增益選擇屬性時偏向選擇取值多的屬性的不足(某個屬性存在大量的不一樣值,在劃分時將每一個值分爲一個結點)分佈式
- CART 使用基尼係數進行分類
基尼指數Gini(D)表示集合D的不肯定性,基尼指數Gini(D,A)表示經A=a分割後集合D的不肯定性。基尼指數值越大,樣本集合的不肯定性也就越大,這一點與熵類似。
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
- 分類與迴歸樹(CART):二叉樹形式,分類時:根據Gini指數選擇劃分特徵
迴歸時:Los爲 平方損失函數,最小化均方偏差選擇劃分特徵,切分點(值)將數據切分紅兩部分,用平方偏差最小的準則(最小二乘法)求解每一個單元上的最優輸出值(每一個葉子節點上的預測值爲全部樣本的平均值)。
![](http://static.javashuo.com/static/loading.gif)
用選定的對(j,s)劃分區域並決定相應的輸出值,每一個葉子節點上的預測值爲全部樣本的平均值:
ide
能夠參看該repository中的另外文章中介紹的迴歸樹
決策樹的生成一般使用 信息增益最大、信息增益比最大或基尼指數最小做爲特徵選擇的準則。
[參考]:https://medium.com/theboredhuman/random-forests-explained-intuitively-2cecb9e1a7b5