24
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Gradient Boostingについて - Scikit-Learnを使ったfeature transformation(GBDT + LR vs LR) -

Last updated at Posted at 2015-11-14

1. scikit-learnを使った実験概要

Gradient Boostingについて - 準備編 - ( http://goo.gl/y2EVLI ) の予告通り今回はSklearnで実験をしてみました。目的は、GBDTを使ったfeature transformationが予測を改善するのか、という点を確認する事です。
ところで、Gradient Boostingでfeature transformationする話は昔からあったはずですが、ADKDD'14で発表されたPractical Lessons from Predicting Clicks on Ads at Facebook[1]が非常に有名です。実験はこの論文がやっている事と同じですが、featureの安定性等は計算していません。実務で適用する場合は重要な点ですので、ぜひトライしてみて下さい(結果を教えて頂けるととてもうれしい・・・)。
流れは以下の通りです。まずfeatureをgbdtでfeature transformationし、それをLogistic Regressionでaccuracy・precision・recall・f-valueを計算します(モデル1)。他方、純粋にLogistic Regressionを適用した場合(モデル2)も計算。この二つを比較して考察してみようと思います。特に、feature transformationする動機はfeature間の相関をうまくとらえる事ですので、性能が大幅に改善する場合は設計したfeatureが互いに相関していることが確認できるはずです。
ちなみに、featureが互いに相関する設計が正しいのかという話は別途あり、この辺がfeature engineeringの難しいところです。
なお、モデル1・2については、各々5-foldのCVで各モデルを最適化しています。
以下URLが実験で使ったコード( https://goo.gl/my1dz7 )です。
注意としてはデータを~/data/gdbt/adult.data.csvとセットしてください。
全く気が利いていないのですが、optionで渡すようにしていません。

2. ねらい

1章で書いた通り、gbdtがfeature間の相関をうまく処理してくれるかという点です。

3. データ

https://github.com/bluekingsong/simple-gbdt/tree/master/data
にあるadult.data.csvを使います。適宜wgetして下さい。以下、一部を載せておきます。

age workclass fnlwgt education education-num
39 State-gov 77516 Bachelors 13
50 Self-emp-not-inc 83311 Bachelors 13
38 Private 215646 HS-grad 9
53 Private 234721 11th 7
28 Private 338409 Bachelors 13
37 Private 284582 Masters 14
49 Private 160187 9th 5
52 Self-emp-not-inc 209642 HS-grad 9
31 Private 45781 Masters 14

で、予測する問題はfeatureが14個与えられたとき、incomeが50Kより大きいかどうかを当てる問題です。大きい場合が1、そうでない場合は0の2値予測となります。

4. 結果

accuracy precision recall f-value
GBDR + LR 8.55E-01 9.23E-01 8.90E-01 9.06E-01
LR 7.58E-01 9.72E-01 7.70E-01 8.59E-01

注)
accuracy = float(TP + TN) / float(TP + FP + FN + TN)
precision = float(TP) / float(TP + FP)
recall = float(TP) / float(TP + FN)
f-value = 2.0 * precision * recall / (precision + recall)
TP : True Positive
TN : True Negative
FP : False Positive
FN : False Negative

ちょっと気になったので加筆。
precision : GBDR + LR < LR
recall : GBDR + LR > LR
の件。分子は同じなので、分母が違う。
分母の違いは、FPかFNか。
GBDR + LRのprecisionはLRより5%低く、GBDR + LRのrecallはLRより12%高いという事は、GBDR + LRがFNした予測がLRより低かったという事。FNは実際1だが予測が0の場合。FPは実際0だが予測が1。つまり、正例に予測重要性が高い場合、recallが高い方が良い。

5. 考察

PrecisionがLRに負けましたが、全般的に精度が改善したようです。
データをよく見るとわかるのですが、incomeを予測するためのfeatureは元々14個あるのですが、結構独立したfeatureになっていて、LRでもまあいいかなという印象も受けます。実用上は改善した幅がチャリンチャリン上意味があるかという話になるかと。
gbdtがfeature間の相関をうまく処理してくれるか、という点は触れておかねばなりません。結論を言えば、まあ今回のデータセットでは処理していないとは言いませんが、どっちでもいい・・・。
作ったtreeアンサンブルですが、max_depthが2でして、そもそもfeature間の相関はあまりないように思います。

6. 次号

次回は正則化の話をしようと思います。boostingの正則化は学習率のスケジューリングをしているのであり、Xgboostは正則化を行っているという話です。

7. 参考文献

[1] X.He etc, Practical Lessons from Predicting Clicks on Ads at Facebook, ADKDD'14

24
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?