之前讀一些部落格了解到gbdt的主要原理是去學習上一次學到的樹的殘差,那麼小朋友你是否有許多問號??????首先,殘差的具體定義是什麼?其次,為什麼要去學殘差,而不是其他的?最後,學殘差效果就會更好嗎?為什麼會更好呢?先帶著這些問題,學幾天再來記錄下自己是如何找到這些問題的答案的。
一、演算法層面的改進
1、樹的剪枝
樹的剪枝是通過替換無用的節點來減少回歸樹的大小,這些被替換的節點無助於改善葉子的分類。 修剪回歸樹的想法是為了防止訓練資料過擬合。 進行剪枝的最有效方法是「成本複雜性」或「最弱連線剪枝」,該方法使用了均方誤差,k倍交叉驗證和學習率。 xgboost會建立最大達到指定的max_depth的節點(也稱為拆分),並從後開始修剪直到損失低於閾值。 考慮乙個損失為-3的拆分,隨後的節點損失為+ 7,xgboost不會僅通過檢視負損失來刪除該拆分。 它將計算總損失(-3 + 7
= +4),如果結果為正,則兩者都保留。
2、稀疏感知拆分
我們收集的資料為稀疏的(很多缺失或空值)或在執行特徵工程後變得稀疏是很常見的。 要了解資料中的稀疏模式,預設方向是將其分配給每棵樹。 xgboost通過將丟失的資料分配給預設方向並找到最佳插補值,以使訓練損失最小。 這裡的優化是僅訪問缺少的值,這些值使演算法的執行速度比單純的方法快50倍。
機器學習 GBDT
在gbdt的迭代中,假設前一輪迭代得到的強學習器 ft 1 x f x ft 1 x 損失函式 l y ft 1 x l y,f x l y,ft 1 x 本輪迭代的目標是找到乙個cart回歸樹模型的弱學習器ht x h t x ht x 讓本輪的損失函式l y ft x l y,f t 1 x h...
機器學習 GBDT
基礎概念 gbdt gradient boosting decision tree 全稱梯度提公升決策樹,是一種迭代的決策樹演算法。gbdt是整合學習boosting的家族成員,gbdt中的樹是回歸樹,用於回歸 調整後也可以用於分類。分類樹與回歸樹的差異 分類樹大致的實現過程是 窮舉每乙個屬性特徵的...
記錄學習Golang的過程
開啟終端執行export path path usr local go bin 將go加入環境變數 現在可以建立乙個go的檔案了 編輯器自己看使用習慣 建立檔案後我們來語言第一步 hello world 開啟終端執行 go run hello.go 在這裡要注意,我們要執行的方法名和包名是要一致的 ...