ごはんと飲み物は紙一重

あんまり更新できてないです

XGBRegressor()でfeature_importances_が使えなかった話。

怒りに身を任せてブログを書いています。

というのも、インターンにてeXtream Gradient Boostingを使用するためにpythonにてxgboostを入れていたのですが、学習後に説明変数の重要度を確認すると、

AttributeError: 'XGBRegressor' object has no attribute 'feature_importances_'

ん?インターン先の社長さんの方では普通に動いているのだが・・・。とりあえず原因を探ってみる。

はじめは単純に参照ミスじゃないか、それとも学習前に入力するパラメータに抜け落ちがなかったか等探してみるもない。コードミスもなかった。

その次にpythonの持つdir()関数にてモジュールの持つローカルスコープのリストを返すようにして"feature_importances_"を探すも心当たりがありそうなところには見当たらない。

もしやここまでくるとpyenvとかcondaによる仮想環境が原因になってるんじゃないかと。
そう思って時間が惜しかったこともあり即決断でcondaとpyenvを削除することを決意。あっという間に削除。その上で改めてanacondaをインストールしもう大丈夫だと思ったが大丈夫じゃない。

環境のせいでもない。くそったれ・・・

と思っていたところに、上司の方が助けてくれることに・・・

2人がかかりで、原因を探っていると、1つ目の記事が・・・

stackoverflow.com

この記事は1度見たような気がするが数時間悩んでたこともあったのと英語読みたくねぇっていう怠惰な感情がスルーを決断していたらしいがこの記事にすべてが載っていた。

要約すると・・・

pipでいれた?ああ、あっちのほうはバージョンが古いのさ!githubからいれたら大丈夫^^

まぁとにかくpipだろうがcondaだろうがgithubの最新バージョンとは違うバージョンであることがわかった。

pip,conda : 0.6a2
github : 0.6

一応違いはあった。こんなところを見逃すあたり環境構築の闇を感じる。

というわけでpipやcondaで入れたxgboostを綺麗さっぱりアンインストールし、

github.com

上記のページをみながら Make & install すると無事xgboost 0.6 がインストールされ、

f:id:ST_ha1cyon:20170926200859p:plain

feature_importance_が出力されましたとさ。めでたしめでたし。

できればインターン中にここで時間を食いたくはなかったのですが・・・同じ状況になった人へ是非参考になればと思い忘れないうちに記事に。

一番はpipとcondaにさっさと最新バージョンが入ってくれることなんですがね💢💢