StatsModelsとscikit-learnのElastic Net(Lasso回帰)を比較してみた
最近スパース推定の勉強会に参加しております.使っているテキストはこちら.
スパース推定法による統計モデリング (統計学One Point)
- 作者: 川野秀一,松井秀俊,廣瀬慧
- 出版社/メーカー: 共立出版
- 発売日: 2018/03/08
- メディア: 単行本
- この商品を含むブログを見る
今回使うデータはこちら.リンク先のヘッダの「Earn」が観測日の売上.「MaxTemp」が観測日の最高気温で「MinTemp」が最低気温.「Humi」は観測日の湿度.「Wind」は風の強さ.「Sun」は日照時間です.この「Earn」売上に直結する項目は何かを分析することが目的です.
ちなみに,このデータは昔お世話になったアイスクリーム屋さん・ハンバーガ屋さんの統計をイメージして作成したものです.なので実際の現象とは異なりますのであしからず.
各項目の相関係数を出してみるとこんな感じです.「Wind」がわざとらしいほどに無相関ですね.
各項目の関係をグラフにするとこんな感じ.
明らかに「Wind」がやる気がない数字が入ってますね.(まぁ,だってそういう風に作ったんだもん)
StatsModelsのエラスティックネットを用いてPythonスクリプトを書いてみた
統計を用いた分析をする時に「StatsModels」を使うか「scikit-learn」を使うか悩ましかったりします.StatsModelsはPandasのDataFrameを直接使うことができるので,私はどちらかというとStatsModelsを使うことが多いですね.現時点ではscikit-learnはDataFrameを受け付けないですが,そのうち変更があったらどうなるか分かりません.といってもscikit-learn昔書いたこちらの記事を参照にDataFrameからListに変換してあげればいいだけなんですけどね.
StatsModelsのエラスティックネットのドキュメントはこちらこちら
さて,下記のように書いてみました.
この書籍では罰則項を増加させたときの回帰係数を描画した解パス図というのを紹介していました.これに習って同じものを描いてみるとこんな感じ.
あれ?なんか変だぞ??この場合は一番売上に一番関係なさそうな「Wind」が先に消えるんじゃないの??
なんか変なのでscikit-learnではどういう振る舞いを見せるのかやってみました.
scikit-learnによるエラスティックネット
scikit-learnを使ったエラスティックネットはネット上にサンプルコードが山ほどあるのでここでは特に記載しません.Gitには上げておいたので,興味がある方は下記を参照ください.
さて,同じように解パス図を書くとこんな感じ.
あれ?StatsModelsとsklearnで結果が違う・・・・
そんな馬鹿な,,という感じですが原因不明です.これでは余りにも内容がない記事になってしまいますので,あとで加筆します.
ではそんな感じで.ではでは.