前言
上一篇文章對GBDT算法原理進行了總結,本文使用GBDT回歸類探討了損失函數對訓練數據的靈敏度,並介紹了參數調參實例。文末給出代碼連結,歡迎下載。
目錄
scikit-learn GBDT類庫概述
GBDT類庫boosting框架參數
GBDT回歸類損失函數的靈敏度探討
GBDT回歸類的調參實例
總結
GBDT類庫包含了GradientBoostingClassifier分類類和GradientBoostingRegressor回歸類,回歸類和分類類除了損失函數參數不相同,其他參數大致相同。之前有boosting族Adaboosting分類類的實踐,因此,本文重點介紹GradientBoostingRegressor回歸類的使用。
GBDT類包含了boosting框架和弱學習器,GBDT類使用CART決策樹作為弱學習器,前面文章有介紹決策樹的相關參數,這裡主要介紹boosting框架參數。
1)n_estimators:最大弱學習器個數。n_estimators過小容易欠擬合,模型處於高偏差狀態;n_estimators過大容易過擬合,模型處於高方差狀態。n_estimators常和learning_rate結合使用,默認值是100。
2)learning_rate:每個弱學習器的權重縮減係數v,相當於正則化參數。考慮權重係數v,那麼GBDT模型的迭代公式為:
其中,f(x)代表學習器模型,G(x)代表每次迭代的弱學習器,v為權重縮減係數(0<v≤1)。係數 v的作用:達到相同的訓練效果,含有權重縮減係數的模型需要更多的迭代次數,因此,通過設置 v 降低了模型的複雜度,防止過擬合。
3)subsample:從訓練樣本隨機無放回的抽取一定比例的子樣本集進行訓練,達到降低模型方差的效果,但同時會增大模型偏差。
4)loss:GBDT算法的損失函數,分類模型和回歸模型的損失函數是不同的。
分類模型:有對數損失函數」deviance「和指數損失函數"exponential",默認是對數損失函數。一般用對數損失函數進行二元分類和多元分類。
回歸模型:有均方差」ls「,絕對損失」lad「,Huber損失」huber「和分位數損失」quantile"。默認是均方差。如果訓練數據較好,推薦使用 ls,訓練數據含有噪聲或異常點時,推薦使用抗噪音的損失函數「huber"。如果需要對訓練集進行分段預測的時候,則採用損失函數」quantile「,表達式可參考上文。
5)alpha:這個參數只有GradientBoostingRegressor有,當我們使用Huber損失"huber"和分位數損失"quantile"時,需要制定分位數的值。默認是0.9,如果噪音較多,可以適當降低這個分位數的值。
問題:當訓練數據含有噪聲或異常點時,對不同損失函數的GBDT回歸模型影響有多大。
評價準則:均方差結果 。
數據類型:原始數據(org_data),數據含有隨機噪聲(noisy_data),數據含有異常值(outlier data)。
GBDT回歸模型:損失函數分別為 ls,lad,huber,quantile,其他參數都是默認值。
下圖為不同損失函數的回歸模型對不同數據類型的預測誤差情況:
上面四個圖橫坐標表示迭代次數,縱坐標表示預測值與實際值的均方差。
分析思路:比較同一模型對不同數據的均方差情況,就可以分析得到模型對噪聲或異常值的敏感情況,異常值可以看成是加入了比較大的噪聲。
結果分析:回歸模型對加入噪聲的數據不是很敏感,當數據加了一些異常值時,損失函數為huber的回歸模型有最好的預測結果,因為均方差是最小的。因此,當你的數據有較大的噪聲或異常值時,我建議你使用損失函數是huber的GBDT回歸模型。
前面有一篇文章介紹了boosting族的分類調參實例,因此本節介紹GBDT回歸類的調參數實例,其他集成方法類的參數擇優算法基本相同。
本節對損失函數的quantile的回歸模型進行優化,如果參數都是默認值,訓練數據的均方差情況:
輸出結果:
使用sklearn.model_selection.GridSearchCV和sklearn.model_selection.cross_validate進行調參,本文採用GridSearchCV函數進行調參:
得到最佳參數:
用最佳參數擬合訓練數據得到新模型,用該模型預測測試數據,得到均方差:
均方差結果:
參數優化後的均方差結果大大的降低了。仍可以使用GridSearchCV再次優化框架參數和決策樹參數,因為均方差結果比較小了,本文就不繼續優化參數了,感興趣的童鞋可以繼續優化。
當訓練數據含有較大的噪聲或異常值時,建議選擇損失函數為」huber「的GBDT回歸模型,參數擇優一般採用交叉驗證的方法,重點是理解交叉驗證的算法思想,若還有疑問,歡迎微信交流。
後臺回復"GBDT"獲取本文源碼連結
參考:
https://www.cnblogs.com/pinard/p/6143927.html
推薦閱讀
提升樹算法原理小結
集成學習原理總結
比較全面的隨機森林算法總結
比較全面的Adaboost算法總結
-END-