田中TOMのめざせKaggleMaster #9 2017年に扱った機械学習の技術を振り返ろう #LetsRewind

動画 URL

田中TOMのめざせKaggleMaster #9 2017年に扱った機械学習の技術を振り返ろう #LetsRewind - YouTube

  • 今年の頭から機械学習スタート
    • ゼロから作るディープラーニング
      • 全10回
    • Keras
      • 全4回
      • keras使いやすい
    • RandomForest
      • 全4回
      • 分類問題で頼りになる
    • Kaggleマスター
      • 継続中
      • マスターになれるのか!!?

Julia now

Kaggle の Kernel が動いている Julia Docker を最新版にしていく - Qiita

今週のニュース

田中TOMのめざせKaggleMaster #8 初コンペの結果発表

田中TOMのめざせKaggleMaster #8 初コンペの結果発表 - YouTube

Kaggle kkbox 挑戦

kaggle アドベントカレンダー 2017 データサイエンティストを目指すための Kaggle チュートリアル

  • まずは愚直に数字を出してみる
  • そこから数値が良くなるにはを考える

データ処理でやったこと

  • Date系はとりあえず年だけにしてみた
  • 日付情報が入ると数値に直した時に飛び飛びの値になってしまう気がする
  • trainデータのmsno(id)にTransactions Logs Members が全て対応しているわけではない
  • test データに対応する場合は 「transactions logs members」と「transactions members」 と 「transactions」の3種類で学習を行いそれぞれ、予測をしていった
  • データ処理を行ったものはcsvで再び保存しておいて次回から使えるようにしておく

今後の課題

  • ローカルで重めのファイルを動かしながらだとPCが作業できなくなるのでAWS上でメインにしていきたい
  • AWS上で作業するならデータをs3に入れてデータマウントするみたいな仕組みが必要そう。
  • XGBoost と MXNet 使いこなせるようになりたい
  • グラフ化するのが上手くできないところもあり、どこで区切ったりすれば良い結果になるのか判別できない
  • 自分でカラムを作っていく必要がありそう
  • 提出回数制限に無駄に引っかからないために、trainデータを更にtrainとtestに分割してやって手元でテストするのが良さそう

xgboost

1ヶ月ぐらい前から、julia 0.6 に対応し出した。
最近 Xgboost や MXNet をメンテナンスしている dmlc というグループが julia のメンテも積極的にしてくれてるようになってる。特に MXNet は活発に開発が進んでくる Gluon が julia で使えるようになる日も近いかもしれない。

xgboost の クロスバリデーション

News

Amazon Comprehend – 継続的に学習される自然言語処理

AWS EC2 に Julia 開発環境を構築し MXNet.jl でGPU処理したい

Julia Advent Calendar 2017の4日目の記事です。

最近は田中TOMという名前で、データサイエンスコンペティションサイトのKaggleの問題に挑戦するYouTube動画を投稿してます。

田中TOM - YouTube

普段 Julia 言語を使って解析をしていて、AWSでAmazonが公式にサポートしているMXNetをGPU使って処理してみたかったのでチャレンジ。

実は、既に MXNet.jl をAWSで動かして記事にしてました。

AWS の Deep Learning AMI を使って EC2 インスタンス上で 最新のJuliaを動かせるように

けど、この記事を書いた後に使っていた Deep Learning AMI が大幅に変更された。

AWS Deep Learning Conda と Base AMI の利用開始について | Amazon Web Services ブログ

そして、Julia 0.6.1だとインストールが失敗するためPkg.build('MXNet') してビルドして使っていた MXNet.jl も v0.3.0 がリリースされてインストールできるようになったぽい。

なので環境構築を最初からやり直して、AWS上で動かせるようにして、サンプルコードを使ってCPU処理とGPU処理でどれだけ速さが違うのかも確かめてみる。

利用する EC2 環境

  • インスタンスタイプ:  p2.xlarge(GPUを利用するため)
  • AMI: Deep Learning AMI with Conda (Ubuntu) – ami-f0725c95

サーバーへsshログイン

最後の -L オプションを使うことで、サーバーの8888ポートをローカルとしてつかえるので jupyter notebook を使う場合に便利。

$ ssh -i your-key.pem [email protected] -L 8888:localhost:8888

Juliaのインストール

Ubuntuだと最新のJulia 0.6.1 がインストールできないのでビルドする。最初から必要なライブラリ系はだいたい揃ってるみたい。並列処理で make するけど、それでも結構時間かかる。

$ sudo su -
# apt-get update
# apt-get install libpango1.0-0 -y
# add-apt-repository ppa:staticfloat/julia-deps -y
# apt-get update
# cd /usr/local/src
# git clone https://github.com/JuliaLang/julia.git
# cd julia
# git checkout v0.6.1
# echo "JULIA_CPU_TARGET=core2" > Make.user
# make -j 4 julia-deps
# make -j 4
# make install
# ln -s /usr/local/src/julia/julia /usr/local/bin/julia

MXNet.jlのインストール

juliaコマンドで起動してパッケージをインストール。以前はMXNetがインストール失敗してたけど、バージョンアップでインストールできるようになった。

$ julia
> Pkg.add("IJulia")
> Pkg.add("MXNet")

Jupyter notebook でCPUとGPUを比較

jupyter notebook を実行して、MXNet.jl のサンプルコードでMNISTのデータを処理する。先にCPUでやってみて、後半GPU。変更部分は context=mx.gpu(0) の部分。

CPUとGPUの比較結果

CPUだと1epochの処理に100秒かかっているのが、GPUだとなんと1秒に。パネェ。

今回作ったAMI

オハイオで公開しています。

AMI名: deep learning julia mxnet 2017-12-02
AMI ID: ami-0a270e6f

データサイエンティストを目指すための Kaggle チュートリアル

Kaggle Advent Calendar 2017 一日目の記事です。

皆さんデータサイエンスしてますか?

機械学習の本読んだけど、MNISTやIrisデータの解析も飽きてきた(ディスっているわけではない)のであれば、実際の企業や団体が公開しているデータに触れることができるデータサイエンスコンペティションサイトのKaggleに挑戦してみましょう。

今回は、日本語対応しておらず少しハードルの高いKaggleのコンペティションに参加できるように、よく出てくる単語とかを説明していきます。

重要なKaggle用語

Kernels

Kaggleで公開されているデータに対して、統計処理を行った結果や予測結果が公開されている。一流のプロが解析しているKernel等も見ることができ、評価の高いKernelのコードを写経するだけでも価値があると思う。

Competitions

企業が賞金を出したりして、参加者がより良い予測ができるモデルを作って競い合います。上部メニューのCompetitionsで飛ぶと一覧で出てきます。Activeというのが現在開催中のもので、最近(2017年12月)だと、メルカリが値段予測問題でコンペティションを開催しています

Datasets

企業等が公開しているデータ。コンペティションではないので他のユーザーとは競わないですが、他のデータサイエンティストが公開しているKernelも見ることができるので、色々と参考になる。

Kaggleをどう利用したらいいのか?

登録してみたものの、何をすればいいのか迷いますよね。これについては、KaggleのCTOが Quora という Q&Aサイト(実名版のヤフー知恵袋のようなもの)で回答した内容だと機械学習やAIを学ぶには次のようにKaggleを使っていくと良いそうです。(あまり英語得意じゃないので勝手な解釈になってるかもしれませんが間違ってたらコメントで指摘してください)

1. 興味のある問題を選ぶ

好きなものこそ上手なれという言葉もあるように、まず自分の興味ある分野のDatasetsを探してみましょう。画像を解析する問題や、株価を予測する問題が色々あります。Kaggleだとチュートリアル的な問題として、タイタニックの生存者予測家の値段予想があります。

2. 一回愚直に問題を解いてみる

あれこれ、アルゴリズムを考えたりしてドツボにはまるのであれば、一度愚直に、簡単な方法で解いてみましょう。例えば性別の情報が入っているなら、性別だけで一回予測してみて答えを出してみたりすると、精度は悪いですが回答できるようになります。

3. 最初のモデルを改善していく

一度回答は出せたので、今度はその回答の精度を上げてみます。先程の例ですと、性別の他に年齢を加えてみたり、使ったアルゴリズムの変数を調整して、どうすれば良い結果が得られるか色々試してみます。

4. 自分の解法を公開する

ある程度、良い結果がでたら、Kernelを公開してみましょう。フィードバックを得られて学びになったり、高評価を得てKaggleのプロフィールの見栄えがよくなるかもしれません(就職・転職の際に使えそうですね)。日本語でフィードバックが欲しいならQiitaなどで公開しても良さそうですね。

5. 1~4を繰り返す

他の問題でも同じように解いてKernelを公開したり、他人のKernelを読んで勉強して色々な問題に対応できるようにしていきましょう。

6. Competitionに参加してみる

実力を付けたらCompetitionに挑戦してみましょう。(別に参加は無料なのでいきなりCompetitionに参加しても大丈夫です)

チーム機能もあったりするので、一緒にデータサイエンスを学んでいる人と協力して挑戦するのも良さそうです。

7. プロを目指して機械学習を実践していく

ある程度、Competitionに慣れてきたら、実際に自分の仕事で機械学習を実践してみたり、転職などで使える環境に挑戦してみましょう。ここまでくると最新の論文を読んだり、良いコードの書き方を意識しだしたりするようです。(ちなみに私はまだこのレベルまで達してないです。)

あとは、自分が将来進む道(アカデミックな分野かAIエンジニアかデータサイエンティストなのか)も決めて専門性を高めていく必要があるみたいです。(なんか、ゲームの2次職みたいですね)

8. 他の人に教えてみる

ここまできたら、実際に他の人にも教えてみましょう。

勉強会で発表したり、ブログや本を書いたり、アウトプットする方法は色々あると思います。他人に説明することで、自分のなかであやふやな部分とかも気づけたりするので大事ですね。

Kaggleで目指すもの

KaggleではCompetitionで上位に入賞したり、高評価のKernelを作ったりすると、メダルがもらえて、そのメダルの種類と枚数によってランクが上がって行きます。最終的にはグランドマスターという称号が用意されているので、それを目指してみるのもいいですね。

宣伝

普段は田中TOMという名前でKaggleのコンペに挑戦するYoutube動画あげています。一緒にKaggleでプロフェッショナルの証であるMasterランクを手に入れましょう。

田中TOM - YouTube