以前から気になっていた Kaggle に入門してみた。

Kaggle とは

Kaggle とは、データサイエンス(統計処理や機械学習)のコンペティション(大会)を開催している団体。

データサイエンティストはコンペティションに参加することでランクづけされる。 そのことによって、自分の能力を示すことができる。

データサイエンティストの履歴書、エンジニアにとっての Github みたいなものだ。 (ちょっと違うかな、でもプロフィールページの Activity で草を生やすイメージが似ている)

最近、Google が Kaggle を買収して話題になった。

Kaggle 入門の Motivation

機械学習を勉強しはじめて、今まで教科書を写経していたり、 jupyter notebook の穴埋めをしていたりしてきた。

そろそろ自分のコードを組み立ててみたり、なにかデータを分析してみたいと思った。 自分の知識をたしかめるためにも、なにかよい題材はないかなと思ったら、Kaggle があった。

データサイエンスはデータを集めたり前処理をするのが大変ときくけれども、 入門なので、できればそういうところは後回しにしたい。

Kaggle には大量のデータが集められている。 しかも、参加者は各自の解答を公開(これを Kernels というらしい)しているので、 その Kernel を読むだけでもとても勉強になる。 投票制によって、有料な記事は注目を集めているのですぐわかる。

なにより、自分の解析結果が格付けされるのが、 もっと上位に行くために頑張ろうというモチベーションを駆り立てる。

登録方法や使い方は他のページ参照

というけで、登録してみた。以下が自分のプロフィールページ。

登録方法や使い方は他のサイトの記事に譲る。以下、リンク集。

Digit Recognizer を やってみた

数字認識データ(MNIST)をつかったコンペティションに参加してみた。

Kaggle の入門だと Titanic の問題が有名でみんなチャレンジしているけれども、 現在以下の本を読んでいる最中。

読書の進捗に合わせて、本の内容を真似て、解答を提出していくことにした。

具体的には、Python と Tens、PFlow を用いて、以下の手法を順番に実装していく予定。

  • 2 章: 多項分類器
  • 3 章:
    • 2.単層ニューラルネットワーク
    • 3.多層ニューラルネットワーク
  • 4 章: 単層 CNN
  • 5 章: 多層 CNN

データのダウンロード kaggle CLI

データのダウンロードのために CLI ツールがあるので、これをつかう。

$ pip install kaggle-cli
$ kg download -u `username` -p `password` -c digit-recognizer
$ ls
-rw-rw-r-- 1 tsu-nera tsu-nera 236K  4 月 18 07:55 sample_submission.csv
-rw-rw-r-- 1 tsu-nera tsu-nera  49M  4 月 18 07:55 test.csv
-rw-rw-r-- 1 tsu-nera tsu-nera  74M  4 月 18 07:53 train.csv

Multicilass Clasification

まずは基本的なところからいこうと思い、ソフトマックス関数を用いた多項分類器による分類を試みた。

自分の解答は、Kernels にアップロードした。 なんと、.ipynb 形式のファイルをアップロードすることができる。これは便利だ。

結果はどうだったかというと・・・・

1456/1553 位。なんと、下から数えて 100 位以内。いやーお恥ずかしゅう。これから頑張ります。

追記

単層ニューラルネットワーク実装で 1419 位になった。

バカみたいに多層(5 層)にしたら精度上がったけれども、相対順位は下がった(1421 位)