http://www.cnblogs.com/en-heng/p/5013995.html
決策樹是一種通過對特徵屬性的分類對樣本進行分類的樹形結構,包括有向邊與三類節點:
- 根節點(root node),表示第一個特徵屬性,只有出邊沒有入邊;
- 內部節點(internal node),表示特徵屬性,有一條入邊至少兩條出邊
- 葉子節點(leaf node),表示類別,只有一條入邊沒有出邊。
上圖就是二叉決策樹的示例。最上面的是 Root node,中間的是 Internal node,最下面面和右邊那些就是Leaf nodes.
決策樹具有以下特點:
- 對於二叉決策樹而言,可以看作是if-then規則集合,由決策樹的根節點到葉子節點對應於一條分類規則;
- 分類規則是互斥並且完備的,所謂互斥即每一條樣本記錄不會同時匹配上兩條分類規則,所謂完備即每條樣本記錄都在決策樹中都能匹配上一條規則。
- 分類的本質是對特徵空間的劃分,如下圖所示,
決策樹學習的本質是從訓練數據集中歸納出一組分類規則。
生成的決策樹對訓練數據會有很好的分類效果,卻可能對未知數據的預測不準確,即決策樹模型發生過擬合(overfitting)——訓練誤差(training error)很小、泛化誤差(generalization error,亦可看作爲test error)較大。下圖給出訓練誤差、測試誤差(test error)隨決策樹節點數的變化情況:
可以觀察到,當節點數較小時,訓練誤差與測試誤差均較大,即發生了欠擬合(underfitting)。當節點數較大時,訓練誤差較小,測試誤差卻很大,即發生了過擬合。只有當節點數適中是,訓練誤差居中,測試誤差較小;對訓練數據有較好的擬合,同時對未知數據有很好的分類準確率。
發生過擬合的根本原因是分類模型過於複雜,可能的原因如下:
- 訓練數據集中有噪音樣本點,對訓練數據擬合的同時也對噪音進行擬合,從而影響了分類的效果;
- 決策樹的葉子節點中缺乏有分類價值的樣本記錄,也就是說此葉子節點應被剪掉。
=======================================================================================================
http://www.cnblogs.com/en-heng/p/5035945.html
分類與迴歸樹(Classification and Regression Trees, CART)是由四人幫Leo Breiman, Jerome Friedman, Richard Olshen與Charles Stone於1984年提出,既可用於分類也可用於迴歸。本文將主要介紹用於分類的CART。CART被稱爲數據挖掘領域內里程碑式的算法。
CART對特徵屬性進行二元分裂。特別地,當特徵屬性爲標量或連續時,可選擇如下方式分裂:
An instance goes left if CONDITION, and goes right otherwise
即樣本記錄滿足CONDITION則分裂給左子樹,否則則分裂給右子樹。
標量屬性
進行分裂的CONDITION可置爲不等於屬性的某值
;比如,標量屬性Car Type
取值空間爲{Sports, Family, Luxury}
,二元分裂與多路分裂如下:
連續屬性
CONDITION可置爲不大於
ε
;比如,連續屬性Annual Income
,ε
取屬性相鄰值的平均值,其二元分裂結果如下:
===================================================================================================
http://www.jianshu.com/p/005a4e6ac775
GBDT中的樹是迴歸樹(不是分類樹),GBDT用來做迴歸預測,調整後也可以用於分類。
Boosting Decision Tree:提升樹算法
提升樹是迭代多棵迴歸樹來共同決策。當採用平方誤差損失函數時,每一棵迴歸樹學習的是之前所有樹的結論和殘差,擬合得到一個當前的殘差迴歸樹,殘差的意義如公式:殘差 = 真實值 - 預測值 。提升樹即是整個迭代過程生成的迴歸樹的累加。
訓練一個提升樹模型來預測年齡:
訓練集是4個人,A,B,C,D年齡分別是14,16,24,26。樣本中有購物金額、上網時長、經常到百度知道提問等特徵。提升樹的過程如下:
該例子很直觀的能看到,預測值等於所有樹值得累加,如A的預測值 = 樹1左節點 值 15 + 樹2左節點 -1 = 14。
因此,給定當前模型 fm-1(x),只需要簡單的擬合當前模型的殘差。
Gradient Boosting Decision Tree:梯度提升決策樹
提升樹利用加法模型和前向分步算法實現學習的優化過程。當損失函數是平方損失和指數損失函數時,每一步的優化很簡單,如平方損失函數學習殘差迴歸樹。
Bagging算法是這樣做的:每個分類器都隨機從原樣本中做有放回的採樣,然後分別在這些採樣後的樣本上訓練分類器,然後再把這些分類器組合起來。簡單的多數投票一般就可以。其代表算法是隨機森林。Boosting的意思是這樣,他通過迭代地訓練一系列的分類器,每個分類器採用的樣本分佈都和上一輪的學習結果有關。其代表算法是AdaBoost, GBDT。
對於Boosting來說,每一步我們都會在上一輪的基礎上更加擬合原數據,所以可以保證偏差(bias),所以對於每個基分類器來說,問題就在於如何選擇variance更小的分類器,即更簡單的分類器,所以我們選擇了深度很淺的決策樹。
===================================================================================================================
xgboost相對於普通gbm的實現,可能具有以下的一些優勢:
- 顯式地將樹模型的複雜度作爲正則項加在優化目標
- 公式推導裏用到了二階導數信息,而普通的GBDT只用到一階
- 允許使用column(feature) sampling來防止過擬合,借鑑了Random Forest的思想,sklearn裏的gbm好像也有類似實現。
4.實現了一種分裂節點尋找的近似算法,用於加速和減小內存消耗。
5.節點分裂算法能自動利用特徵的稀疏性。
6.data事先排好序並以block的形式存儲,利於並行計算
7.cache-aware, out-of-core computation,這個我不太懂。。
8.支持分佈式計算可以運行在MPI,YARN上,得益於底層支持容錯的分佈式通信框架rabit。
鏈接:https://www.zhihu.com/question/41354392/answer/91371364