2013年8月17日土曜日

夏休みの思い出

KAGGLEのコンペだけやっていたわけではありません。

ちゃんと、友達と小旅行に出かけたので、その記録を残しておきます。



①アップルの本社前
住所が、1 infinite loopというなんとも言えない住所でした。





②スタンフォード大学のキャンパス
きれいです。いい天気です。





③ スタンフォード大学内の教会です。
荘厳です。すごい装飾です。






③スタンフォード大学の教室棟?の回廊
このアーチ型の影、憧れです。



KAGGLE

KAGGLEってご存知ですか? 

データ分析のコンペを行っている会社で、いろいろな会社がテーマとデータを提供し、それに対して参加者が機械学習のモデルを構築し、その精度を競い合うというものです。

先日、KAGGLEのChief ScientistのJeremy Howard氏がゲストスピーカーで来校して、いろいろとお話しされていたので、ホームページを見てみたところ、面白そう!!ということで、参加してみました。

KAGGLE
http://www.kaggle.com/



私が参加したのは以下の2つのコンペです。

・ Yelp(ぐるなびみたいなもの)のリコメンデーションシステムの精度コンペ
・ タイタニックの生存予測の精度コンペ



実際にやってみると、結構はまってしまいまして(あまりに楽しい・・・)、貴重な夏休みをほとんど使ってしまいました。まるで、テレビゲームにはまった子供状態です。


まだコンペの締切まで時間がありますが、夏休みの宿題をそろそろやり始めないとやばいので、心を鬼にしてRとPythonを閉じました。



このコンペを通じて、いくつか自分の中で考えないといけないことがあるなぁと思いましたので、忘れないようにまとめておきます。


課題その1
参加者平均はいくものの、そこから抜けられない。

両方のコンペでの課題です。この原因は2つあると思っていて、データ作り・特徴量づくりがイケてないのと、手法の習熟度が低いことです。特に前者が大きな問題だと思っています。

両方のコンペで、ランダムフォレスト、ニューラルネットワーク、rpartの決定木、ロジスティック回帰などいろいろ試しましたが、精度はランダムフォレスト、ニューラルネット、rpart概ね同じでした。インプットしているデータが判別に役立っていないからでしょう。

どうやって精度をあげていくか、アメリカにいる間に掴んでいきたいものです。


課題その2
モデルの評価をうまく整理できない。


たくさんモデルを作るなかで、「あれ、さっきのモデル、どの名前だったけ?」ということが起きて、時間をロスしました。

さらに、精度もRの打ちだしだけで見て確認して、終わり!ってやっていたので、あとで振り返ることができないという事態が発生。。。作成したモデルの管理、評価、改善点がどこかについて、うまく回せるようにしないと、効率悪くて仕方ないです。


結果は満足できないですが、いろいろと反省点や問題意識も持てたので、楽しい夏休みでした。


さぁ、マジでリーディングやらないと・・・・

2013年8月12日月曜日

Speakingの上達

こちらにきて、3か月が経とうとしています。語学学校に6週間、USFのAnaluyticsのBoot Camp5週間、と計11週間授業を受けてきました。Speakingが上達してきたね!と先生からも良いフィードバックをいただいて、ご機嫌な今日この頃です。


Native Speakerの人と話していて、よく What?って聞き返されるときは、イントネーションがおかしなときです。これは先生からもアクセントがストロングだ!と指摘されます。特に、慣れてくると、つい早口になってしまいますが、このときにアクセントがめためただとわかってもらえてないです。

なるべく丁寧に発音することが大事ですね!

昨日は飲みすぎたので、今日は一日本でも読んでゆっくりしよ。

2013年8月3日土曜日

Boot Campもあと1週間!

ついに金曜日!そして、Boot Campも残るは1週間。

Boot Campという名前だけあって、そこそこしんどいものがありましたが、何とかパスできそうです(Boot Campで1つでもFailすると、MSANのプログラムを続けられず、来年再チャレンジということになります。実際に去年は数名いたようですが、今年戻ってくることはなかったそうな)。


気は抜けませんので、最後まで頑張ります。


ここまでで面白いと思ったトピックを備忘で残しておきます。


Inverse Method
乱数発生法で、累積密度関数(CDF)の逆関数を使って、ターゲットの分布関数(pdf)の乱数を発生させる手法です。逆関数には0から1の一様分布を使います。CDFが求められる場合には簡単に乱数を発生させられます。離散分布のpmfも少し工夫すれば求められます。


Acceptance-Rejection Sampling
CDFが求めにくい関数もあるでしょう。たとえば、正規分布とか。そういうときは、Acceptance-Rejection Samplingを使うとターゲットの分布を求められます。これは、一様分布 Uとサポートする密度関数の乱数xを発生させて、U  < f(x)/c*g(x)   (f(x)がターゲットの密度関数、g(x)がサポートとなる密度関数)を満たしたときのxを、ターゲットの分布関数からの乱数として採用(Accept)するという手法です。

たとえば、標準コーシー分布をサポートの密度関数 g(x)、ターゲットの分布 f(x)を標準正規分布とします。そして、定数cは、y = f(x)/g(x)を最大化させたときのyをc とします。そして、標準コーシー分布からの乱数x と一様分布から乱数のUを以て、U < f(x)/c*g(x) を評価して、この条件を満たしたxを貯めていきます。この試行をたくさん繰り返して、貯まったxのヒストグラムを描くと、あ~ら~不思議、標準正規分布の乱数が得られてしまうのです。面白いです。


Randomization Test
ブートストラップの1種だと思われますが、私が習ったのは相関係数のケースです。2列のペアになっているベクトルのかたっぽを固定、もう一方の並びをランダムに並び替えて、相関係数を計算します。当然ゼロに近い数字になります。この試行をたくさ~ん繰り返して、全試行の相関係数をヒストグラムで描くと0を中心にした正規分布のような分布が出てきます。これって、p = 0 を帰無仮説にしたときの経験分布ですよね。これを使って、帰無仮説をp = 0, 対立仮説をp !=0 で検定する手法です。Empirical p valueを計算できますので、検定できます。



そのほか、ノンパラメトリックの検定手法(Sign Test, Signed rank Test, マン・ホイットニーのU検定など)も面白いですが、乱数については初めて勉強したので、特に興味深いです。残りのBoot Camp、そして8月中旬から始まる秋学期も楽しみです。

2013年8月2日金曜日

俺のPyCharmが止まらない

宿題で簡単なウェブログ解析(解析というほどのもんでもないんですが)をやっております。

100万ユニークユーザーのリクエストページのシークエンスを読み込んで、ユーザー数やページ遷移をPythonで集計するんですが、その処理が1時間経っても終わらず、PyCharmがうなっております・・・。そして、キーボードが暖かい。


今後、それなりの大きさのデータや多次元の最勾降下法など繰り返し計算するものもやっていくと予告されているので、速いコードを書けるようになるのは重要かもしれないです。


ただ、速くて短いコードを書けるって、センスの域も多分にあると思うんです。昔、ゼミの後輩で待ち行列のシミュレーションのコードを自分の3分の1の行で書いてきたやつがいて、「自分にはコードを書く才能はないなぁ」と感じたことを思い出しました。

とはいえ、宿題の締切もあるので、少しでも早いコードを書けるようにしたいものです。

と書いているうちに残り4万行!あと少しで終わりそうです。