2018年12月からKaggle開始:3日間ほどの情報収集のまとめ

Kaggle頑張ってみる

今月12月からはKaggleに挑戦していく。まずは半年以内にメダルを1個でも取るのが目標。さらに1年間かけて金メダル1個、銀メダル2個を取ってマスターになるのが中期目標。技術チュートリアル作成と並行して進めていく。経過は本ブログで適宜Updateしていく。

早速、Kaggleを触り始めてる。Bishop本(PRML=プレモル, 洋書は https://www.microsoft.com/en-us/research/people/cmbishop/#!prml-book から無料でダウンロード可能)を『パターン認識と機械学習の学習 普及版』(こちらも無料。日本語。) を見つつ、1年かけて読破したいところ。

Kaggleメダル獲得までの最短ルートは?

しかし、理論を固めるより実践が何よりも最短ルートな気がしている。 @currypurin さんのチュートリアルCourseraコースtkm2261さんの動画あたりを押さえて、XGBoost・LightGBM関連中心にひたすらKernelを読むのが良さげっぽい。

Titanic等のGetting Startedに触れつつも、Activeで最前線なFeaturedに物怖じせず飛び込んでHotness/MostVotesのKernelを行(セル)ごとに追いまくるのが最大効率かと。もちろん、まずはEDA関連のKernelを読んでデータの概要を把握するのも必要。

あとGoogle Colab良い。インタラクティブ環境に限れば今後はAnacondaよりColabが主流になりそう。Google Drive共有やTPU利用も最近できるみたいだし。

調べるに、〜半年で初メダル、〜2年でMasterが現実的なタイムラインっぽい。自分もそれくらいが目標。Meetupのプレゼンは今の所わけわからん。KernelやDiscussionでそれなりの貢献できるには1〜2年は必要か。Kernel共有含む仕組みがeLearningであるしコンペがeSportsだし、これは流行る理由わかるわ。

Kaggle情報掘ってく中で浮気して調べたんだが、ポーカーってAIが進展しててヘッズアップテキサスホールデムでは2年近く前にプロ負かしてるのね。アルバータとカーネギーメロン。囲碁なんかと違う不完全情報ゲームが解かれているとは。こういう研究は将来的にはトレードの世界で生かされるんだろうね。

以下、調べたことのまとめメモ書き。情報ソースは割愛しています(問題あればTwitterDMにてご連絡ください)。

XGBoost

XGBoost(≒Booosted Trees?)とは、勾配ブースティング(Gradient Boosting)とランダムフォレスト(Random Forests)を組み合わせたブースティングを基にしたアンサンブル学習メソッド。XGBoostのGはGradientのG。アンサンブル学習は、複数の弱学習器を組み合わせることで強学習器を作るメタ学習メソッド。

予測精度はRandom Forestsよりも向上するが,チューニングが必要なパラメータが複数存在する。一方,Random Forestsはチューニングが不要なのだが、学習データに依存しやすく、過学習となりやすい。

オーバーフィッティングを防ぐために、サブサンプリングや縮退化などの仕組みも導入されており、汎化性能が良くなるようになっていることもKaggleのコンテストで人気の理由の一つ。 画像処理に関する課題でなければ、多くの方のビジネス上の課題はこの一本で相当解決するはず。もしXGBoostがダメなら次はロジスティック回帰などを検討するべきか。 

Boosting(ブースティング)

Boosting(ブースティング)とは、弱識別器(weak learners)の集団を直列的に結合することで、予測における正確性を高めようとするアルゴリズム。ブースティングの基本的な姿勢として、各ステップごとに弱学習器を作り、ロス(損失)関数を最小化していく。任意のt時点において、モデルの予測は以前のt-1時点での結果に基づいて重み付けがなされる。つまり、今までに学習したモデルの情報を使って、新たなモデルを構築することでデータの学習を進める方法。

正しく予測されたデータに対しては、重みを小さくする。誤って予測されたデータに対しては重みを大きくする。後段で学習する識別器ほど、誤ったデータに集中して学習を進める。間違ったものを重点的に学習し、分類精度を高めていく。XGBoostでは、1つ目の決定木では予測できなかった部分、つまり誤差を目的変数として、2つ目の決定木を構築する。誤差を予測するモデルを作る。

毎回のステップで実行されることというのは、ロス(損失)関数の最小化。 その最小化をするために使っている方法が「勾配降下法」であり、勾配降下法を用いた勾配ブースティングがXGBoost。

LightGBM

Microsoftが関わる勾配ブースティング(Gradient Boosting)ライブラリの一つ。勾配ブースティングというと真っ先にXGBoostが思い浮かぶと思うが、LightGBMはXGBoostの対抗位置を狙っている模様。

勾配ブースティングは決定木 (Decision Tree) から派生したアルゴリズムで、複数の決定木を逐次的に構築したアンサンブル学習をするらしい。勾配ブースティングによる性能の高さはもちろん、細部まで使いやすさに配慮されているよう。

同じアルゴリズムを分類にも回帰にも応用できる上、Cross Validationや特徴量の重要度まで確認できる。計算量はDeep Learningほど大きくなく、最近のコンペで Winning Solution を獲得した実績も多い。

ディープラーニングではCPUではなくGPUを使うことで学習を高速におこなうが、LightGBMでもGPUを使って高速化を行い学習をおこなうことができる。

開発も活発なので、XGBoostにしかないような機能も続々と取り込まれている上に、コードもスッキリしており改造が比較的容易になっている。 Neural Networkの構成をデータに合わせて調整するのは非常に難しく、案の定多くの参加者はLightGBMでの精度にNeural Networkが敵うことなく、多様性を増すためにNeural NetworkをEnsembleに加える程度という解法だったとのこと。

Amazon SageMaker

Amazon SageMakerは昨年のre:invent 2017で発表されリリースされたばかりのフルマネージドなエンド・ツー・エンド機械学習サービスで、 データサイエンティストや開発者、機械学習のエキスパートがクイックに機械学習モデルをスケーラブルにビルド・学習・ホストすることを可能とする。機械学習に関する全ての試みを急激に加速し、プロダクションアプリケーションに素早く機械学習を追加可能とする。

Amazon SageMaker は、TensorFlow、Apache MXNet、Chainer を Docker コンテナで実行するよう事前構成されている。 Amazon SageMakerノートブックインスタンスとは、Jupyter Notebookがインストールされたフルマネージドな機械学習EC2コンピューティングインスタンスのこと。