19
17

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 1 year has passed since last update.

時間・スキルがなくてもauto-sklearnで機械学習して予測モデルをつくる

Last updated at Posted at 2017-11-09

2019/06/25 追記:
MS製のLightGBMでも簡単に予測ができそうです。
https://www.kaggle.com/shep312/applying-lightgbm-to-titanic-dataset

以前社内コンペで同僚がLightGBMを使って開始30分でハイスコアを叩き出していました(そのコンペは評価関数が Log Loss だったのもあったのか、私はあまり良い結果は出せませんでした)。
追記終わり


auto-sklearnという機械学習の自動化ツールがあるらしいです。これを使うことで、時間・スキルがなくてもそこそこの精度でKaggleの問題がとけないかやってみました。下記チュートリアルを試してみました。

Notebook

auto-sklearnを使ってみたNotebookは下記です:

自分の環境だと、それぞれ1時間程度の実行時間となりました。

準備

今回は、下記を参考にしてDocker for Mac上にコンテナを立てました。

$ docker run -it -v $PWD:/opt/nb -p 8888:8888 felixleung/auto-sklearn /bin/bash -c "mkdir -p /opt/nb && jupyter notebook --notebook-dir=/opt/nb --ip='0.0.0.0' --port=8888 --no-browser --allow-root"

コンテナが立ち上がったら、いくつかライブラリをインストールしました(コンテナ内のTerminal等から)。

$ pip install arff matplotlib seaborn  # in docker container

データの確認、整形

Notebookではまずデータの確認をして、その後に簡単な整形をしています。
auto-sklearnに食わせるデータは、NA値を補完したりLabelEncoderを使ってCategoricalな文字列を数値に直したりする必要があるようです(ソースコードに書かれていたのを後から気づきました...)。

ユーティリティ

Notebookではいくつかユーティリティを用意しています。

  • fillna() 関数: NA値を補完
    • 数値であれば平均値を、それ以外は前後の行の値で埋めるようにしています
  • categoricalize() 関数: Categoricalなデータを数値に変換

ローカルでモデル精度の確認

House Price予測では、まずは train.csv のデータをトレーニング用とテスト用に分割して精度を確認しました。その後テスト用に使ったデータも使って refit() し、提出用予測の精度向上を図ります。

refit()のエラー回避

使用したバージョンではrefit()でエラーが発生したため、とりあえず回避策として下記のように置換しました:

#`refit` raises an error, so modified
!sed -i -e 's/if self.max_leaf_nodes == "None":/if self.max_leaf_nodes == "None" or not self.max_leaf_nodes:/' \
  /usr/local/lib/python3.5/dist-packages/autosklearn/pipeline/components/regression/gradient_boosting.py

結果

予測して結果を提出した結果、下記のようになりました。

問題 Score
Titanicの生存予測 0.78468
House Price予測 0.15161

例えばTitanicの方はLeaderboardによると下記のようになるので、まずまずの精度ではないでしょうか? (2017-11-09 19:30時点 20989投稿)

【参考】Titanicの回答の統計量

統計量 Score
平均 0.74271
最頻値(個数) 0.76555
中央値 0.77033

まとめ

一度auto-sklearnの環境を作ってしまえば人手が必要な作業は下記だけで済み、精度もそれなりに出るので良いと思いました(ただ機械学習モデルの生成に時間がかかるのと試行ごとに生成されるモデルがばらつくのが...)。

  • 何を予測するのか(regressionなのかclassificationなのか)
    • AutoSklearnClassifier を使うのか AutoSklearnRegressor を使うのか
  • 各カラムのデータはCategoricalなのかNumericalなのか
19
17
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
19
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?