利用GBDT模型构造新特征具体方法
利用GBDT模型構造新特征具體方法
數據挖掘入門與實戰 ?公眾號: datadw
?
?
實際問題中,可直接用于機器學**模型的特征往往并不多。能否從“混亂”的原始log中挖掘到有用的特征,將會決定機器學**模型效果的好壞。引用下面一句流行的話:
?
特征決定了所有算法效果的上限,而不同的算法只是離這個上限的距離不同而已。
?
本文中我將介紹Facebook最近發表的利用GBDT模型構造新特征的方法。
?
(Xinran He et al. Practical Lessons from Predicting Clicks on Ads at Facebook, 2014)
論文的思想很簡單,就是先用已有特征訓練GBDT模型,然后利用GBDT模型學**到的樹來構造新特征,最后把這些新特征加入原有特征一起訓練模型。構造的新特征向量是取值0/1的,向量的每個元素對應于GBDT模型中樹的葉子結點。當一個樣本點通過某棵樹最終落在這棵樹的一個葉子結點上,那么在新特征向量中這個葉子結點對應的元素值為1,而這棵樹的其他葉子結點對應的元素值為0。新特征向量的長度等于GBDT模型里所有樹包含的葉子結點數之和。
?
舉例說明。下面的圖中的兩棵樹是GBDT學**到的,第一棵樹有3個葉子結點,而第二棵樹有2個葉子節點。對于一個輸入樣本點x,如果它在第一棵樹最后落在其中的第二個葉子結點,而在第二棵樹里最后落在其中的第一個葉子結點。那么通過GBDT獲得的新特征向量為[0, 1, 0, 1, 0],其中向量中的前三位對應第一棵樹的3個葉子結點,后兩位對應第二棵樹的2個葉子結點。
?
?
那么,GBDT中需要多少棵樹能達到效果最好呢?具體數字顯然是依賴于你的應用以及你擁有的數據量。一般數據量較少時,樹太多會導致過擬合。在作者的應用中,大概500棵左右效果就基本不改進了。另外,作者在建GBDT時也會對每棵樹的葉子結點數做約束——不多于12個葉子結點。
?
下面是這種方法在我們世紀佳緣的一個概率預測問題上的實際效果。我們只使用了30棵樹。第一個圖是只使用原始特征的結果,第二個圖是原始特征加GBDT新特征的結果。圖中橫坐標表示預測概率值,縱坐標表示真實概率值。所以預測的點越靠近y=xy=x這條參考線越好。顯然,使用了GBDT構造的新特征后,模型的預測效果好不少。
?
?
?
已經有人利用這種方法贏得了Kaggle一個CTR預估比賽的冠軍,這種方法的具體實現代碼可見 ??https://github.com/guestwalk/kaggle-2014-criteo
轉載于:https://www.cnblogs.com/DjangoBlog/p/6201593.html
總結
以上是生活随笔為你收集整理的利用GBDT模型构造新特征具体方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 昨天7月21号,笑笑又生病了
- 下一篇: c#Math