xgboost調用sklearn的交叉驗證,並且使用自定義的訓練集、驗證集進行模型的調參

一、概述

如果你的預測模型表現得有些不盡如人意,那就用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代碼):

原文翻譯與校對:工藥叉 && 韓小陽

http://blog.csdn.net/han_xiaoyang/article/details/52665396

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章