**:
gradient boosting(gb)
機器學習中的學習演算法的目標是為了優化或者說最小化loss function, gradient boosting的思想是迭代生多個(m個)弱的模型,然後將每個弱模型的**結果相加,後面的模型fm+1(x)基於前面學習模型的fm(x)的效果生成的。
gradient boosting decision tree(gbdt)
gb演算法中最典型的基學習器是決策樹,尤其是cart,正如名字的含義,gbdt是gb和dt的結合。要注意的是這裡的決策樹是回歸樹,gbdt中的決策樹是個弱模型,深度較小一般不會超過5,葉子節點的數量也不會超過10,對於生成的每棵決策樹乘上比較小的縮減係數(學習率<0.1),有些gbdt的實現加入了隨機抽樣(subsample 0.5<=f <=0.8)提高模型的泛化能力。通過交叉驗證的方法選擇最優的引數。
xgboost
xgboost是gb演算法的高效實現,xgboost中的基學習器除了可以是cart(gbtree)也可以是線性分類器(gblinear)。
(1). xgboost在目標函式中顯示的加上了正則化項,基學習為cart時,正則化項與樹的葉子節點的數量t和葉子節點的值有關。
(2). gb中使用loss function對f(x)的一階導數計算出偽殘差用於學習生成fm(x),xgboost不僅使用到了一階導數,還使用二階導數。
(3). 上面提到cart回歸樹中尋找最佳分割點的衡量標準是最小化均方差,xgboost尋找分割點的標準是最大化,lamda,gama與正則化項相關。
xgboost演算法的步驟和gb基本相同,都是首先初始化為乙個常數,gb是根據一階導數ri,xgboost是根據一階導數gi和二階導數hi,迭代生成基學習器,相加更新學習器。
xgboost與gdbt除了上述三點的不同,xgboost在實現時還做了許多優化:
1、在尋找最佳分割點時,考慮傳統的列舉每個特徵的所有可能分割點的貪心法效率太低,xgboost實現了一種近似的演算法。大致的思想是根據百分位法列舉幾個可能成為分割點的候選者,然後從候選者中根據上面求分割點的公式計算找出最佳的分割點。
2、xgboost**考慮了訓練資料為稀疏值的情況,可以為缺失值或者指定的值指定分支的預設方向,這能大大提公升演算法的效率**,*****提到50倍。
特徵列排序後以塊的形式儲存在記憶體中,在迭代中可以重複使用;雖然boosting演算法迭代必須序列,但是在處理每個特徵列時可以做到並行。
按照特徵列方式儲存能優化尋找最佳的分割點,但是當以行計算梯度資料時會導致記憶體的不連續訪問,嚴重時會導致cache miss,降低演算法效率。*****中提到,可先將資料收集到執行緒內部的buffer,然後再計算,提高演算法的效率。
3、xgboost 還考慮了當資料量比較大,記憶體不夠時怎麼有效的使用磁碟,主要是結合多執行緒、資料壓縮、分片的方法,盡可能的提高演算法的效率。
random forest:
gbdt和隨機森林的相同點:
1、都是由多棵樹組成
2、最終的結果都是由多棵樹一起決定
gbdt和隨機森林的不同點:
1、組成隨機森林的樹可以是分類樹,也可以是回歸樹;而gbdt只由回歸樹組成
2、組成隨機森林的樹可以並行生成;而gbdt只能是序列生成
3、對於最終的輸出結果而言,隨機森林採用多數投票等;而gbdt則是將所有結果累加起來,或者加權累加起來
4、隨機森林對異常值不敏感,gbdt對異常值非常敏感
5、隨機森林對訓練集一視同仁,gbdt是基於權值的弱分類器的整合
6、隨機森林是通過減少模型方差提高效能,gbdt是通過減少模型偏差提高效能
rf 學習隨機森林模型前,一定要先了解決策樹模型。樹越深,模型越複雜。
決策樹模型的優點如下。
1、容易理解和解釋,樹可以被視覺化。
2、不需要太多的資料預處理工作,即不需要進行資料歸一化,創造啞變數等操作。
3、隱含地創造了多個聯合特徵,並能夠解決非線性問題。
決策樹模型最大的缺點是容易過擬合。
隨機森林由很多棵不同的決策樹構成,對於乙個給定的**物件,每棵決策樹都輸出乙個label,最後採取「投票」的方式,選擇得票最多的label作為最終結果。隨機森林是一種整合方法,也被認為是最近鄰**器的一種。整合方法是將一組弱分類器以一定的方式組合起來,形成乙個強分類器。
構建單棵樹的步驟:
1、有放回的隨機取樣,樣本數佔總數的2 / 3。
2、對於每乙個結點,隨機選擇m個特徵,從中選擇能提供最好劃分的特徵和劃分點,在下乙個結點重複前兩個步驟直到所有訓練樣例都屬於同一類。
隨機森林的錯誤率依賴兩件事。
1、樹之間的相關性越大,整體錯誤率越高。
2、單棵樹的錯誤率越高,整體錯誤率越高。
隨機森林的優點:
1、容易理解和解釋,樹可以被視覺化。
2、不需要太多的資料預處理工作,即不需要進行資料歸一化,創造啞變數等操作。
3、隱含地創造了多個聯合特徵,並能夠解決非線性問題。
4、和決策樹模型,gbdt模型相比,隨機森林模型不容易過擬合。
5、自帶out-of-bag (oob)錯誤評估功能。
6、易於並行化。
隨機森林的缺點:
1、不適合小樣本,只適合大樣本。
2、大多數情況下,rf模型的精度略低於gbdt模型的精度。
3、適合決策邊界是矩形的,不適合對角線型的。
樹的剪枝
(1)前剪枝( pre-pruning)
通過提前停止樹的構造來對決策樹進行剪枝,一旦停止該節點下樹的繼續構造,該節點就成了葉節點。一般樹的前剪枝原則有:
a.節點達到完全純度
b.樹的深度達到使用者所要的深度
c.節點中樣本個數少於使用者指定個數
d.不純度指標下降的最大幅度小於使用者指定的幅度
(2)後剪枝( post-pruning)
首先構造完整的決策樹,允許決策樹過度擬合訓練資料,然後對那些置信度不夠的結點的子樹用葉結點來替代。cart 採用cost-complexity pruning(代價-複雜度剪枝法),代價(cost) :主要指樣本錯分率;複雜度(complexity) :主要指樹t的葉節點數,(breiman…)定義樹t的代價複雜度(cost-complexity):
資訊熵h(x)
資訊增益=h(d)-h(y|x)
資訊增益率=gain(x)/h(x)
gini係數=1-sum(pk^2)
基尼係數就是熵在x=1的地方一階泰勒展開得到f(x)=1-x
所以gini=sum[x(1-x)]=1-sum(x^2)
xgb比gbdt好的地方:
二階泰勒展開
節點分數懲罰
增益計算不同,gbdt是gini,xgb是優化推導公式
RF GBDT XGBOOST的區別與聯絡
2 xgboost 考慮了訓練資料為稀疏值的情況,可以為缺失值或者指定的值指定分支的預設方向,這能大大提公升演算法的效率 提到50倍。特徵列排序後以塊的形式儲存在記憶體中,在迭代中可以重複使用 雖然boosting演算法迭代必須序列,但是在處理每個特徵列時可以做到並行。按照特徵列方式儲存能優化尋找最...
RF,GBDT ,XGBoost 特徵選擇方法
rf,gbdt,xgboost 都可以做特徵選擇,屬於特徵選擇中的嵌入式方法,比如在sklearn 中,可以用屬性feature importances 去查特徵的重要度。如何計算的 1 隨機森林 用袋外資料oob 做 隨機森林在每次重抽樣建立決策樹時,都會有一些樣本沒有被選中,那麼就可以用這些樣本...
記憶體的使用 棧區 堆區 靜態區 唯讀區
記憶體的使用感覺好亂啊,需要整理一下!於是參考c primer與網上資源,整理如下 一 綜述 記憶體中的棧區分配的是區域性變數和函式的引數值的空間,棧的生長方向是從高往低的 堆區是向上增長的用於分配程式設計師申請的記憶體空間 比如new 申請的動態記憶體 注意它與資料結構中的堆是兩回事,分配方式倒是...