tkm2261's blog

研究員(OR屋) → データ分析官 → MLエンジニア → ニート → 米国CS PhDが諸々書いてます

Kaggle Boschコンペ15位でした

お久しぶりです。最近、色々ありましてブログを再開しようと思います。

基本的に、スライド作って話す事が多いので、まずその辺りのこと書こうと思います。時系列狂うかもですがご容赦を

昨年2016年の末に、同僚のhskkskさんとg_votteさんとともにBoschコンペに参加してきました

Bosch Production Line Performance | Kaggle

コンペは生産ラインの各種センサー情報から不良品の検知をするものでした。

アンサンブルやモデル作成面では貢献出来たと思うのですが、hskkskさんのデータを詳細に見る力に圧倒的で、彼の貢献が大半を占めてこの結果となりました。

このコンペからKaggleガチでやり始めたのですが、出来る人の作業を間近で見るのが上達の近道なのを実感しました。

特に『Kaggle上位に行くには特別な手法は必要なく、些細なことの積み重ね』というのが感じられて、上位を狙う感覚がわかったのが収穫でした

我々のチームの手法はhskkskさんがKaggle Meetupで話したスライドがあるのでそちらを参考にしてください

決定木からxgboostまで調べてみた

お久しぶりです。最近、色々ありましてブログを再開しようと思います。

基本的に、スライド作って話す事が多いので、まずその辺りのこと書こうと思います。

会社の輪読会でElements of Statistical Learning: data mining, inference, and prediction. 2nd Edition.の10章『Boosting and Additive Trees』の担当になったのと、

Kaggle Boschコンペでxgboostの一部パラメータを意味知らずにチューニングしてたりしたので、調べました。

ネットで探しても意外と"木"って目線でまとまった資料がなかったので、参考なればと思います

あと、英語の勉強で英語資料にしたのですが、インド系や中国系の方からの反応があったりして新鮮でした。

ICML2015読み会 『Sparse Subspace Clustering with Missing Entries』

皆様、こんにちは

最近業務が忙しすぎて更新が滞っております。
分析官の仕事よりも、分析結果をお客様に使って貰うための画面・インフラ構築に忙殺されていたり。。。
私は今後何になって行くのか若干不安を抱える今日この頃です。

久しぶりの投稿ですが新ネタではなく2ヶ月前にPFN様主催のICML読み会で話したので投稿します。

感想

  • 計算時間的に有用性は微妙だが、高次元空間に複数の低次元空間が埋め込まれていて、それをクラスタリングしたいという動機は好きである。
  • カーネルが分かれば、元の行列に欠損値あってもいいよね!という系のアイデアはかなり好き
  • 良い論文だったが、資料にまとめるのに提案手法と既存手法が一杯出てくるので伝え切れて無い気がする。

www.slideshare.net

最近は仕事でアウトプットばかりなので、そろそろ自分にガッツリとインプットの時間を取りたい。

遺伝的アルゴリズムでAA自動生成

皆さまこんちにちは

今回は遺伝的アルゴリズム(GA)でAA自動生成してみたので、コードと資料を共有

コードは以下に公開しています。

github.com

今回のお題

左の画像を、右のようなAAにするのが今回のお題。右は2chのAA職人さんによるものです。
詳細は、下記の資料をご覧下さい。

f:id:tkm2261:20150608171826j:plain

*1

やっぱ人間スゲー

先に結果から、遺伝的アルゴリズムで最適化されていくGIFの共有

f:id:tkm2261:20150608164623g:plain

やはり人間には勝てないか・・・ただGAは評価関数次第なので
我こそは神の評価関数を設計出来るという方は是非ご一報お願いします。

ちょっと前にLTしてきた

実は少し前に、リブセンスさんの勉強会でLTして来たネタです。
LTって分量では無いですが・・・

LTじゃなくて、もう少しちゃんとした勉強会で話そうと思ってたが、
時間だけが過ぎて、自分自身忘れかけてきたのでブログでの共有にしました。

www.slideshare.net

ものを作るのは大事だ

やっぱり、アイデアだけでなく手を動かさないと良くないと思ったネタでした。

イデアは凄い詰まらない理由(忙しい、環境構築出来ない、画像扱えない etc.)で死んでしまうので、

ちゃんとゴールに行き着けるかを、定期的に自分に訓練として課さないと行けないと自戒

*1:画像著作権者の方、問題ありましたらご一報お願いします。

もう迷わない Caffe入門 その1

皆様お久しぶりです。

今回から深層学習(ディープラーニング)フレームワークのcaffeの環境構築使い方について解説していこうと思います。

インストールに難ありと言われるcaffeに対して、AWSインスタンスを立てる所から、
cuDNNでのコンパイル、pycaffe等の使用方法、出来ればDIGITSまで話せると良いなと思っています。

理論的なところに触れる予定は一切ありません。その辺りが気になる方は以下をご参照下さい。

www.amazon.co.jp

www.slideshare.net

www.slideshare.net

www.slideshare.net

ディープラーニングにもう振り回されない

最近は、営業先のお客様からもディープラーニングという単語を聞くようになりました。 我々としては営業機会が増えて良いことなんですが、人工知能ブームと相まって若干加熱しすぎな感もあったり。

会社の上司から「これからはディープラーニングだ!」との号令の元、途方に暮れている方もおられるかと想像しています。

どこまで助けになるか微妙ですが、とりあえず回して精度評価できるとこまでは解説しようと思っています。

一度皆で回した上で、「じゃあ何が出来るの?」といった議論のフェーズに世の中がなって行けば良いなって感じです。

デモを触ってみる

caffeの配布元が既にデモサイトを用意しているので、触ってみる。

demo.caffe.berkeleyvision.org

適当な画像を入れると、1000クラスの所属スコアを出してくれます。

f:id:tkm2261:20150605032825p:plain

確かに、食べ物なので合っていそうです。
困った上司にとりあえず教えておけば、時間が稼げます。

環境構築

サーバの用意

GPUの刺さったLinux機を個人で持ってる方はほぼいないと思うので、AWSで構築します。
設定はデフォルトで大丈夫ですが、今後のことを考えてインスタンスストレージをつけといた方が良いかも。

項目 内容
インスタンスタイプ g2.2xlarge
OS Ubuntu 14.04 LTS

f:id:tkm2261:20150603173621j:plain

g2.2xlargeは定価では時間100円($0.89)と高額なインスタンスなのでスポットインスタンスの利用をオススメします。

スポットインスタンスもちょっと前は時間10円($0.1)ぐらいで借りれましたが、最近は高騰してるので時間30円($0.3)程度は覚悟したほうが良さ気です。

f:id:tkm2261:20150603175707j:plain

※最近はオンデマンド価格を上回るぐらい高騰してます。

CUDAとcuDNNの準備

CUDA7.0とcuDNN v2を入れていきます。

とりあえず、依存ライブラリを入れとく

$ sudo apt-get update
$ sudo apt-get install -y build-essential git libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libatlas-base-dev
$ sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler

カーネルパッケージも追加しておく。詳細は不明

$ sudo apt-get install -y linux-image-extra-`uname -r` linux-headers-`uname -r` linux-image-`uname -r`

次にcudaのインストール。今回はcuda7を入れます。 最新バージョンが出たら適宜コチラをみて変えて下さい。

CUDA 7 Downloads

$ wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1404/x86_64/cuda-repo-ubuntu1404_7.0-28_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu1404_7.0-28_amd64.deb
$ sudo apt-get update
$ sudo apt-get install -y cuda
$ echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
$ echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
$ sudo reboot

cuDNNを以下から調達する。色々登録あるけど頑張って下さい。
NVIDIA® cuDNN – GPU Accelerated Deep Learning

インストールはcudaのところにヘッダとライブラリをぶち込みます。

$ tar zxvf cudnn-6.5-linux-x64-v2.tgz
$ cd cudnn-6.5-linux-x64-v2
$ sudo cp cudnn.h /usr/local/cuda/include
$ sudo  sudo cp libcudnn.so libcudnn_static.a /usr/local/cuda/lib64
$ sudo ldconfig /usr/local/cuda/lib64

caffeのインストール

やっとcaffeを入れます。

$ git clone https://github.com/BVLC/caffe.git
$ cd caffe/
$ cp Makefile.config.example Makefile.config

↑でコピーしたMakefile.configを編集して、4行目のUSE_CUDNNのオプションを有効にする。

USE_CUDNN := 1

コンパイルしてテストしてみる。ここでmodprobeしないと失敗するので要注意

$ sudo modprobe nvidia
$ make all -j8
$ make runtest

pycaffeのインストール

ここまでで一応caffeは動くけど、需要ありそうなのでpycaffeも入れておく。

numpy等はコンパイルすると時間がかかるのでバイナリで入れておく。

BLASにこだわりたい人は、各自お願い致します。

$ sudo apt-get install python-pip python-dev
$ sudo apt-get install python-numpy python-scipy python-matplotlib cython python-pandas python-skimage

残りの依存ライブラリはcaffeのrequirements.txtで入れる

$ cd python/
$ sudo pip install -r requirements.txt

あとはpycaffeをコンパイルしてPYTHONPATHを通しておく。別の場所に入れた人は適宜変えて下さい。

$ cd ../
$ make pycaffe
$ echo 'export PYTHONPATH=~/caffe/python/:$PYTHONPATH' >> ~/.bashrc
$ source ~/.bashrc

とりあえず動かしてみる

ipython notebookのサンプルが付いているので動かしてみる。

動かすためにライブラリを幾つか入れる。

$ sudo apt-get install libzmq-dev python-tornado ipython ipython-notebook
$ sudo pip install pyzmq jinja2 jsonschema

ここを参考にipython notebookをセットアップ

ipython notebookをリモートサーバ上で動かす。 - 忘れないようにメモっとく

セキュリティグループのポートも開けなとローカルからは見えない。IPは適宜制限して下さい。

f:id:tkm2261:20150605030835p:plain

そんでもって実行

$ ipython notebook caffe/examples/ --profile=myserver

試しにclassification.ipynbを開いて以下が表示されれば成功

f:id:tkm2261:20150605031050p:plain

せっかくcuDNNまで入れたので、2セル目のcaffe.set_mode_cpu()をcaffe.set_mode_gpu()にして実行して下さい。

次回予告

reference model(caffeで配布されているトレーニング済みモデル)を使ったサンプルとか、
何か例を使って解説予定

流石にMNISTは飽きた感があるので、何か面白いものを用意したいところ

Pydata.Tokyoで「High Performance Python Computing for Data Science」を話してきた

先日4/3にPyData.Tokyo meetup #4で話して来ました。

pydatatokyo.connpass.com

経緯としては、最適化超入門を話したときに丁度PyDataの運営の方がいて、
スピーカーにならないかと誘われてお話することに。

印象としては、以前話したTokyoWebMiningよりもデータ分析業界の人が多い感じでした。

運営方針の違いなわけですが、発表内容をマニアックにしといて良かったです。

今回の資料のウリとしては、この2点です。

  • GPGPU(Numba)
  • 疎行列周り

この2つは特に公開されている情報がほぼ見当たらなかったので、
勉強会に参加した皆さんに良い情報をお伝え出来たかな、と思っています。

専門全体像の発表はブルーオーシャン

勉強会の中でも触れましたが、前回の「最適化超入門」と今回の「High Performance Python Computing for Data Science」は、偉そうに分野の全体像を語っています。

普通はこう言うのは分野の権威の先生しか恐れ多くて話せないところですが、
逆説的に厳密な正確性を要求されない勉強会にフィットする発表だと思っています。

 

表:世にある著作

分野の一部分 分野の全体像
厳密 論文 教科書
大体合ってる 勉強会 ブルーオーシャン

 

アカデミックの方々は大体あってる分野の全体像なんて、恐れ多い+厳密性にかけるので中々取り扱えないですが、一般の勉強会なら、何も気にせず話すことが出来ます。

ちゃんと勉強したい人は是非教科書を読むべきですが、
勉強するにしても漠然と全体像が分かっていると学習効率が高い気がしています。

結局何が言いたいかと云うと、
私が勉強したいので皆さんの分野の全体像の資料を作って下さい。笑

アカデミックと一般の出来る事出来ない事を補完し合って行けるといいですね。

『2014 Data Science Salary Survey』によると米国と日本は年収が680万円違うらしい

お久しぶりです。

今日は、Strata+Hadoop San Joseで貰った。『2014 Data Science Salary Survey』を紹介します。

f:id:tkm2261:20150323115251g:plain

私は会場でペーパーバック版を貰ったのですが、なんとこのレポートは無料で公開されており、こちらからDL出来ます。

www.oreilly.com

詳細は、これから語りますが、このレポートは最後に給料を重回帰分析したモデルがくっついています。

そのモデルではAsiaで働くのと、Californiaで働くのでは、年収に$56,691の開きがあり、

日本円にして約680万円 、対ヨーロッパだと約82万円($6,856)日本より高いです。

アメリカヤバいですね・・・

では、気になったところを幾つかピックアップ

全体の年収中央値は昨年比で84万円($7,000)増加

全体では1092万円($91k)から1176万円($98k)に増加しているみたいです。

景気の良い話ですね・・・日本でも人手不足と相まって上がっている感はありますが、どうなんでしょう

ちなみに、米国に限定すると1260万円($105k)から1728万円($144k)に増加しているみたいです。もう何だか・・・という感じです。

21~35歳の年収は低め

21~35歳の年収の中央値は960万円($80k)と低め(?)なのに対し、

35歳は大体1440万円($120k)とかなり開きがあります。
データサイエンティストはマネージャーの役割を求められているのでしょうか。

スケールするツールを使えると年収増

HadoopやSparkといったスケーラブルなツールを使えると年収が高い傾向にあるようです。

RDBMSのみ使える人は年収中央値は1116万円($93k)に対して、Hadoopのみ使える人の年収中央値は1416万円($118)となり300万円ほど高くなっています。

さらに、両方使える場合は1464万円($122k)と微増します。

もはや、Hadoop周りの知識はデータサイエンティストに必須のスキルになってきている感があります。

使っている人の年収が高いツールTop 10

HBase, Teradata, Hortonworks, Pig, HomeGrown, Amazon EMR, Cassandra, Netezza, Storm, Spark

Hadoop周りがやはり高いようです。

使っている人の年収が低いツールTop 10

Google BigQuery Table, Oracle BI, VBA, SPSS, Windows, SQL Server, C#, Google Chart Tools/Image API, Excel, SQLite

Windows環境でポチポチやってる人は年収が低い傾向ですかね。

年収回帰

さて、私の年収を回帰してみようと思います。

その前に、回帰用にツールクラスターに分けているので引用します。

クラスタ ツール
Cluster 1 Windows, C#, SPSS, SQL, VBA, Business Objects, Oracle BI, PowerPoint, Excel Oracle, SAS, SQL Server, Microstrategy
Cluster 2 Linux, JAVA, Redis, Hive, Amazon EMR, MongoDB, Homegrown ML Tools, Storm, Cloudera, Apache Hadoop, Hortonworks, Spark, MapR, Cassandra, HBase, Pentaho, Mahout, Splunk, Scala, Pig
Cluster 3 Python, R, Matlab, Natural Language/Text Processing, Continuum Analytics(Numpy + Scipy), Network/Social Graph, libsvm, Weka
Cluster 4 Mac OS X, Javascript, MySQL, PostgresSQL, D3, Ruby, Google Chart Tools/Image API, SQLite
Cluster 5 Unix, C++, Perl, C

そして、回帰式が以下となっています。

変数名 単位 係数($) 私の変数
(constant) - + $30,694 -
Europe - – $24,104 0
Asia - – $30,906 1
California - + $25,785 0
Mid-Atlantic - + $21,750 0
Northeast - + $17,703 0
Industry: education - – $30,036 0
Industry: science and technology - – $17,294 0
Industry: government - – $16,616 0
Gender: female - – $13,167 0
Age per 1 year + $1,094 26
Years working in data per 1 year + $1,353 2
Doctorate degree - + $11,130 0
Position per level + $10,299 1
Portion of role as manager per 1% + $326 10%
Company size per 1 employee + $0.90 150
Company age per 1 year, up to ~30 – $275 11
Company type: early startup - – $17,318 0
Cloud computing: no cloud use - – $12,994 0
Cloud computing: experimenting - – $9,196 0
Cluster 1 per 1 tool – $1,112 5
Cluster 2 per 1 tool + $1,645 4
Cluster 3 per 1 tool + $1,900 7
Bonus - + $17,457 0
Stock options - + $21,290 0
Stock ownership - + $14,709 0
No retirement plan - – $21,518 1

このAsiaとCaliforniaの係数の差が表題の680万円に繋がります。

 

この式による私の年収は・・・289万円($24,111) 超低いorz

退職金制度あれば500万にはなったんですが・・・

 

ちなみに、勤務地をカリフォルニアにすると私の年収は969万円($80,802)
誰かこれで雇って下さい(´・ω・`)

 

日本で働いたら負けの時代が来ているのかな?

 

・・・という感じで、ここまで結果に一喜一憂しましたが、
実はこのモデルの決定係数は0.58しかありません。

金額値は気休め程度も信頼できない感じです。

ただ、単純な回帰なので定性的には正しいっぽいので結構思うところがありますね。

データサイエンティストはこれからどうなっていくんでしょうか

とりあえず、給料上がることを切に願います。