一、概述
如果你的預測模型表現得有些不盡如人意,那就用XGBoost吧。XGBoost算法現在已經成爲很多數據工程師的重要武器。它是一種十分精緻的算法,可以處理各種不規則的數據。 構造一個使用XGBoost的模型十分簡單。但是,提高這個模型的表現就有些困難(至少我覺得十分糾結)。這個算法使用了好幾個參數。所以爲了提高模型的表現,參數的調整十分必要。在解決實際問題的時候,有些問題是很難回答的——你需要調整哪些參數?這些參數要調到什麼值,才能達到理想的輸出?
有人會說,這個簡單哇,直接使用sklearn集成的交叉驗證,比如:gridsearchCV等
但是這樣我們往往碰見一個問題,就是這個方法自定義的驗證集是從你給出的訓練集隨機分割的,在合理一點就是按照label等比例分割,保證訓練集和測試集的label分佈一致。但是有時候我們的測試集分割方式可能是按照時間分出來的(特別是在各種機器學習競賽上),這時候我們爲了儘量保證驗證集和測試集同分布,也應該使用時間分割,這個時候怎麼使用自定義的驗證集去調參的問題就擺在了我們面前
話不多說,直接進入正題,實例代碼加講解告訴各位怎麼做
二、在gridsearchCV上使用自定義驗證集
(1)首先我們要先了解一個sklearn的類
就是下面這個類:
class sklearn.cross_validation.PredefinedSplit(test_fold)
下面是該類的官方示例代碼:
這個方法主要的功能就是,傳入一個list,list的每個index對應你的數據集的對應樣本(如下圖傳入的X有4行也就是4個樣本,所以你傳入PredefinedSplit的list也有四個元素,每個元素對應X的每一行樣本數據),list中-1對應的樣本一定會被分入train,其他如圖的0和1對應的樣本會被輪流放入train,而另一個對應的樣本就放入test,所以下圖會有兩種切分結果。如果你只有-1和其他一種元素(如1),那麼只會得到一種切分,-1對應樣本爲train,1對應樣本爲test。
(2)使用自定義驗證集去調參
測試樣例我們使用目前表現非常優秀的xgboost算法
測試代碼如下我們用:(sklearn.cross_validation.PredefinedSplit去作爲驗證集生成器)
運行結果如下:
三、這裏附上xgboost交叉驗證調參的完整教程鏈接
XGBoost參數調優完全指南(附Python代碼)英文原文地址:
Complete Guide to Parameter Tuning in XGBoost by Aarshay Jain
XGBoost參數調優完全指南(附Python代碼):
原文翻譯與校對:工藥叉 && 韓小陽