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万行!あと少しで終わりそうです。

2013年7月26日金曜日

Boot Campも折り返しだ!

明日で3週目が終わります。Boot Camp折り返しです。結構、早いなぁという印象です。毎日図書館で宿題をこなして寝るという毎日を土日関係なく繰り返しているような感じです。

備忘のため、ここまでの様子をまとめておこうと思います。


Boot Campでは、
① Computation (主にPython)
② Linear Algebra
③ Probability& Stats
④ Data Driven Business Strategy

の4科目から3科目受講します。実際は、Data Driven Business Strategyは全員必修なので、選べるのは3科目中2科目です。私は、ComputationとProbability&Statsを履修していますが、Linear Algebraも聴講しています。ほとんどの人は、履修していない科目も聴講しているので、結局ずーっと一緒にいます。


授業は結構ハード(スピード早い&宿題多い)です。毎週クイズがあるので、準備も必要です。聴講している科目でもクイズを受けるので(あんまり悪いと恥ずかしい)、結局全部宿題をやることになります。他のクラスメートも同じような感じです。

Linear Algebra
私は、聴講しているLinear Algebraが意外に苦戦中です。おそらく日本の教養科目でやる線形代数は、連立一次方程式を解く、行列式を計算できる、逆行列が求められる、固有値・固有ベクトルが求められるというのがスタンダードだと思います。各内容のコンセプトよりかは計算できることに
重きが置かれている印象です。

しかし、ここでの授業はコンセプトとそれを使いこなすことが求められているように感じます。クイズや宿題も幾何と行列の間の関係をクリアにできていて、各理論の内容を理解していることが求められています。ここが苦戦のポイントです。計算はできるけども、幾何の世界で考えていなかったので、「いったいなんのこっちゃ??」みたいなものがあります(ただの勉強不足?)。

Probability&Stats
Probability&Statsは、大学で指導教官に鍛えてもらっていたので、そんなに辛くないです(英語の教科書を使っていたこともあって、英語の問題も少ないです)。これは感謝です。内容は、基本的な期待値、分散の計算から、最尤推定、信頼区間、仮説検定といったいわゆる統計学概論でやるようなことをざーっと流していきます。しいて言えば、もう少し微積の復習をしておくべきだったかと思っています。クイズ中に、arctanがわからず、先生に「what is arc?] と質問してしまいました(恥)。

Computation
主にPythonでプログラムを書いていきます。内容は結構幅広く、乱数の発生(Libraryや関数を使わずに)やツリー構造のサーチ(Breadth-first, depth-first)といったコンピュータサイエンスチックなものから、最近はNumpy, Scipy,を使って、Central Limite Theoremのシミュレーションやbootstrapといった統計っぽいものまで幅広いです。プログラミングは好きなので、純粋に楽しいです。もはや趣味です。

Data Driven Business Strategy
Business Strategyとなっていますが、主にはAnalyticsコースに関わる数学以外のことすべてについての概論です。Analyticsのプロセスと各テクニック(Hadoopとは?Machine Learningとは?など)をざーっとみていきます。先生がコンサルティングもやっている方なので、実務上どうしているのかなどは聞きやすいですし、今予定されているゲストスピーカーも豪華です。


日本人は私以外いないので、もし興味持たれている方がいたら、質問などあったら、できる限りお答えしたいと思います。