田中TOMのめざせKaggleMaster #15 半分松江、半分東京

動画

今後やること

  • kaggleのコンペを覗いたら画像解析のコンペが殆どだった
  • ゼロから始めるディープラーニングの畳み込みNNの章をやってなかった
  • 畳み込みNNの勉強をしてから取り組んでいきたい

Kernels Awards

EagerFMNIST | Kaggle
– データは Fashion MNIST
– TensorFlow の Eager Execution を利用している
Tensorflow 1.5のEager Executionを触ってみた - Qiita

Julia now

【お知らせ】たのは島根の松江に引っ越しました。
– せっかくなので普段仕事でも使ってるRubyと趣味で使っているJuliaで何かしたい。
データサイエンスにおけるRubyの現在の位置づけと可能性 | しまねソフト研究開発センター
– 記事著者の村田 賢太さんはRubyでPythonが呼べるpycall.rbも作ってる人
– 記事ではJuliaについても触れていてRubyでJuliaが呼べるruby-juliaも作ってるけどメンテはされていない
– Matsue.rb とか勉強会でここらへんの技術を触っていく予定

今週のニュース

田中TOMのめざせKaggleMaster #14 TOMは めのまえが まっくらに なった!

動画

Kaggle

いろいろやってみたけど順位は上がらなかった

これまでのやり方

・特徴量選択(10)
・XGBoost

スコア:0.13660

試行1

・特徴量選択をする(10)
・主成分分析を行う(5)
・XGBoost

生の特徴量使ったほうが良かった

試行2

・特徴量選択をする(10)
・XGBoostとSVMで学習する
・スタッキング

SVMが足を引っ張る

試行3

・特徴量選択をする(10)
・主成分分析(5)からのXGBoost
・主成分分析(5)からのSVM
・スタッキング

SVMが足を引っ張る

今週のKernels award

毎週優秀なKernelが選ばれるのでそれを取りあげてモダンな解析方法を学んでいく
KB-->MB-->GB-->TB-->?B (BigQuery)

Julia

今週のニュース

Julia DataFrames.jl で数字で始まるカラム名を取得する場合の工夫

以前の記事 で紹介した

DataFrame(load("./input/train.csv"))

だと、どうやら数字が先頭のカラム名をそのまま扱ってしまう。

Julia DataFrame columns starting with number? - Stack Overflow

によると、 :2aa という表記は Julia 上シンボルではなく 1:2aa というレンジの扱いになってしまうため、"1st"というカラムが存在しているからといって、df[:1st] と書いても想定しているカラムを取得できない。

DataFrame.readtable だと、いい感じにカラム名の先頭を "1st" => "x1st" のように x を入れてくれていた(これも、実際データ触る時邪魔な気もするけど)

解決方法

ちゃんとシンボルだと指定してあげればいいので、

df[Symbol("1st")]

としてあげれば取得できる。少し不格好だが嫌いじゃない。

Julia の DataFrames.readtable が deprecated になって CSV.read 推奨になったけど使いづらいので別の方法を探してみた

DataFramesでreadtableを実行しようとすると、deprecated warningが出る。

DataFrames.readtable

DataFrames.readtable("./input/train.csv")
=>
WARNING: readtable is deprecated, use CSV.read from the CSV package instead

CSV.read

これに対応しようとして CSV の read メソッドを呼ぼうとするが、現状このメソッドでやろうとするとNull値を許可したり、Unionで型を指定してあげないといけなかったりする。

CSV.read("./input/train.csv")
=>
CSV.ParsingException("error parsing a `Int64` value on column 27, row 235; encountered 'N'")

CSVFiles.jl

他に良さそうなライブラリがないか探してみたら、CSVFiles.jl: FileIO.jl integration for CSV filesが使いやすそうだった。そういえば、提出用ファイルで出力する時にheaderのカラムにダブルクォーテーションを使いたくないときにもこのライブラリで対応できた。スター数は全然付いていないがメンテもされているし使い勝手が良い。作者のdavidanthoffさんがjuliaの質問サイトとかで自分のライブラリを紹介して広めているのも健気で好感が持てる。Read file with CSV.read - Usage / First steps - Julia discourse

使い方としては

DataFrame(load("./input/train.csv"))

DataFrames.readtable と同じように扱うことができる。

田中TOMのめざせKaggleMaster #11 主成分分析を使う

YouTube

House Prices

Kaggleの練習問題(Regression)を解いてKagglerになる - Qiita

Metabase

  • Heroku x BigQueryで動かしてみた

主成分分析

機械学習と主成分分析
– 機械学習では特徴ベクトルの次元(特徴変数の数)が増えるとパターンも増えてしまい、必要なデータも膨大になる
– 特徴ベクトルの次元数は少ない方が良い。
– 主成分分析PCAは次元の数を削減して「次元圧縮」や重回帰分析の前処理として特徴量同士を無相関にすることができる
– 元のデータの特徴の情報量をどれだけ持っているかを寄与率で表現して、累積率を見て上位を選択することで、次元を減らす

主成分分析の作業手順

  1. 外れ値を除去する
  2. 元データから教師ラベルを取り除く
  3. 主成分分析を行う
  4. 累積寄与率を吟味して、第何主成分まで利用するかを決める
  5. 教師ラベルを戻し教師データを作成する
  6. 学習
  7. 学習に用いなかった教師データを用いて学習成果を評価
  8. 新たに得られた未知データを識別・予測する

Julia でやってみた

PCA RandomForest 2018/01/13 2625/2949位

今週のニュース

田中TOMのめざせKaggleMaster #10 回帰問題へ挑戦

動画URL

田中TOMのめざせKaggleMaster #10 回帰問題へ挑戦 - YouTube

Next Competition

House Prices: Advanced Regression Techniques | Kaggle

  • 米国アイオワ州のエイムズという都市の物件価格を予測する問題
  • データは、”築年数”、”設備”、”広さ”、”エリア”、”ガレージに入る車の数”など79個の変数および物件価格による1460戸の学習データが与えられる
  • データをもとにモデルを作成し、1459戸の家の価格を予測する

参考記事

今週のニュース

田中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

田中TOMのめざせKaggleMaster #7

動画リンク

田中TOMのめざせKaggleMaster #7 コンペティションに挑戦だ!!

Next Competition

WSDM - KKBox’s Churn Prediction Challenge | Kaggle

KKBoxという定額音楽配信サービスの離脱を予想する。

概要(もとの文は英語なので間違ってるかも)
KKBoxのサービスは30日毎にアカウントの更新を行う、今回の問題では2017年4月にてサービスが継続されるか解約(churn)を予想する。

「解約」の基準は、現在のメンバーシップの有効期限が切れてから30日以内に申し込むかどうか。
自動継続オプションも存在する。

提供されているファイルの内容

情報ごとにファイルが別れている。
ログのファイルサイズが圧縮されて6GB超え

  • train.csv: 2017年3月の継続・解約情報。目的変数
  • transactions.csv: 2017年3月31日までの契約更新情報。支払い方法など
  • members_v3.csv: ユーザー情報(年齢、性別、住んでいる街など)
  • user_logs:2017年3月のユーザサービス利用状況。日毎に曲の何%まで聞いたかの曲数ログ

kernel

例の如く良さげなkernelをあさってみた
Should I stay or should I go? – KKBox EDA

Julia Now

kkbox触りだけ
kkbox.ipynb

News