機械学習

燃費予測コンペで1位取った話

こんにちは、チズチズです!

つい数日前に、機械学習歴3ヶ月の人がコンペで3位になった話 という記事を書きましたが、その後色々ゴチャゴチャやってたらスコア1位になったので、改めて記事を書こうと思います。

勝因

僕が3位取ったときは、Lasso回帰だけでした。(事実

あのとき僕は3位のときのスコアで精一杯でもう諦めかけていました。

では、なぜ僕が一気にスコアを上げることが出来たのでしょうか。

 

なぜならアンサンブル学習を使ったからです。

 

その晩、1位になった人が現れました。その人がTwitterでポロッと僕のLassoとその人のXgbの回帰の結果の平均を取ったとポロッと発言していて、真似してみたらパラメータが適合して巻き返して1位になったっていうことが大まかな勝因です。

このように、複数のモデルの予測の平均を取って最終的な予測をする方法をアンサンブル学習といいます。

アンサンブルについてもここでは、ただの平均を取っただけのものです。厳密というか実際にはもうちょい深いものがあります。(興味あったら調べて

Xgboost

XgboostもGradient BoostingとRandom Forestのアンサンブル学習なのですが、結構精度がいいです。

基本的というか大体は分類問題に使われますが、今回は回帰問題なのでXgboostの回帰の方を使います。

Xgboostは正直学習に時間がかかりますが、GPUを使って高速化も出来ます。

XGBoost GPU Support

この公式ドキュメントを読めば大体わかります。基本的な線形回帰やロジスティック回帰はありますが、CPUにしか対応していないものもあります。(要確認

前置きが長くなりましたが、やることは単純です。

Xgboostのregressorを使って線形回帰に対応させます。

後はパラメータを設定して(大体サンプル通り)Lassoでも予測してansに平均入れるだけです。

これを見る限り結構単純なコードだなぁ と思いますw

多分ですが、パラメータでmax_depthが60のときが1番精度良かったと思います。

ハイパーパラメータで検証してからまた調整出来るのかな? 使わないよりかは精度上がると思います。

補足:LightGBM

皆さんはLightGBMを知っていますか?

Microsoftが考案したXgboostの対抗馬のようなライブラリです。

非常に高速な上、精度も良いのでKaggleではよく使われているそうです。

実際にXgboostと同じパラメータでやってみた結果を載っけます。

上がXgboost,下がLightGBMです。

約1/3程時間が短縮されてます。 精度はあまり変わりませんでした。

まだLightGBMについての日本語の解説が少ないのでちゃんと公式ドキュメントやKernelを参考に覚えて使えるようになりたいです。

まとめ

アンサンブル学習は強い

更にスコアを上げるにはSVMでも試してみたりしても良さそうです。

とにかくアンサンブル学習は精度良いです。

今度も使ってみたいですね。

Lasso回帰は線形回帰でもトップクラス

これはマジです。

多少パラメータが粗くてもちゃんと良い精度を出してくれます。

以上がまとめです。

お読みいただいてありがとうございました!

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です