大学生 → 社会人の雑記

統計学や機械学習について気紛れにメモメモするブログです。ゆるふわな感じでやっています。

機械学習入門!の門の前に立つには

最近「機械学習を勉強したいのだけど、何をどう勉強したらいいのか?」という質問を少なからず受けます。


個人的には機械学習というのは気軽に入門できるような類のものではなく、門の前に辿り着くのにも結構苦労する類のものだと思っています。

とはいうものの門の前まで来てしまえば何とかなりますし、門の前に立っているだけでも世間的には超人扱いされるのではないでしょうか?

そこで今回は


機械学習入門!』


ではなく


機械学習入門!の門の前に立つ!』


と題して話を進めていきたいと思います。




ここで僕がいう機械学習とは統計的学習理論のことを指します。

なんとなくですが、Twitterやらブログやらを読むに、統計学以外から機械学習に入門するものがたくさんあり、どうやら統計的学習理論以外の機械学習が存在しているようです。無知な僕にはなんのことかわかりませんが…




1.基礎から入門する???

さてと統計的学習理論もとい機械学習は、その字面からもわかるように統計学の理論をベースに構築されています。

じゃあ統計学は何をベースに構築されてるんだよの答えは確率論です。

だったら確率論は何をベースに構築されてるんだよの答えは数学です。

(もちろん「全部数学だろ!」と言われたらそこまでなのですが、まあ純粋数学ではないということでお願いします)



どうですか?これでも基礎からしっかり積み重ねたいと思いますか?純粋数学から始められますか?あなた数学科の人間じゃないですよね?僕も経営工学科なのでこれが無理のある話だということはわかります。よくわかります。死ぬほどわかるううううう!!!!!


まあ基礎からできる人であれば、とっくの昔に門をぶち壊して入門どころか門の最奥にいる、さながらラスボスの風格を身にまとっていることでしょう。

結論としては多くの人にとって基礎から入門するのは極めて難しいといえます。





2.まずはモチベーションを作ろう

基礎から入門することは極めて難しいことがわかりました。ではどこから入門するのが一番優しいのでしょうか?

いや今回は入門する直前に至るまでの話でしたね。

ここで最も優しく胡散臭く廃れやすいのは「RやPythonのパッケージをとりあえず使ってよくわからないけどいい結果が得られたからなんかすごい」というやつです。

ですが「とりあえずすごそう」というのを体験することはものすごく重要です。

まずモチベーションになります。

もしあなたが機械学習を心の底から愛しており、何か無理してでも暇を作り、その暇を惜しみなく機械学習の勉強に捧げることができるのであれば話は別ですが、多くの人はすごそうなことができるから機械学習に憧れ、勉強をしてみたいと思うのではないでしょうか?

その意味では自分で手を動かさずとも、新聞やニュースやブログを読むだけでも「なんかよくわからないけど、すごそう」「自分も同じようなことができるようになれば、すごくなれそう」という感覚を味わうことができると思います。

このようにモチベーションを得ることによって、鼻くそをほじりながらお尻をかきつつポテチをつまみながらこのブログを見ているあなたも機械学習に入門するための門を探し始めました。(←勝手にストーリーに乗せます)





3.門に至るまでの道を探す


さて機械学習の門を叩くべく、門に向かうことになりました。

向かうことは決めたのですが、どこに門があり、どのような道筋でその門にたどり着けるかはさっぱりわかりません。

そこでインターネット等で調べることにしました。
おそらくこの記事にたどり着いた人の多くはこの段階にいると思います。

しかし、ここで問題が生じます。

機械学習入門と題した記事の多くは立場を想定していないということです。

希望的には全員が同じように理想の入門をすることが良いのかもしれませんが、現実問題として学生や社会人あるいは研究者というように、どの立場にあるかによって入門する門は違うように思われます。

ここでは機械学習の会得を急いでいるわけではなく、多少時間をかけてでも機械学習に入門したい。
という人が入門する門への道筋を示していきます。





4.一番最初のモンスター『高校数学』

インターネットにいる理系の人が学校とか関係なく自分で勉強しようと思う時、まず酸素を吸って二酸化炭素を吐くが如き扱いをされることが『高校数学』です。

正直言って皆さん大学受験の数学もいまいちできていませんよね?(できている人へ、ごめんなさいごめんなさいごめんなさい)

いや難関大学の難しい問題を試験時間内にとかいう話ではなく、時間無制限で与えられて、答えを見てもokの状況でもいまいち理解できていないんじゃないかな?と思った次第です。ワタシシグマワカラナイヨという人もいると思います。ってか多いんじゃないかな?

ここでいう理解とは他人に説明してある程度納得してもらえるというレベルのことをいいます。

ましてや数学が嫌だから文系に進んだ人にとっては尚更です。レベル1のコイキングがレベル55のカイリューに挑もうとは愚かなことです。

いやでもギャラドスに進化すれば勝負になるかも!?

腹をくくりましょう。

高校数学から勉強しましょう。

もちろん数1A2B3です。

「数学の知識を全く前提としない」と書かれている本の15割は高校数学までは最低限の知識として要求してきます。

高校数学は『最低限扱い』です。なかなかつらい道のり。。。


とはいうものの高校数学をどこまでやるかということになると思います。

感覚的には芝浦工業大学中央大学東京理科大学筑波大学千葉大学あたりの入試問題(※なんとなく思いついた大学名を並べただけなので特に意味はないです。)強いていえば所謂受験標準レベルという意味です。が答えを見ながら人に説明できるぐらいで十分だと思います。

で、それって何やればいいの?ということになりますよね。

高校の教科書が残っている人は、各章末問題をひと通り解いてみるのがいいと思います。

残っていない人は、大学受験業界の盛んさに感謝しながら適当な受験用問題集を解けばよろしいかと思います。
個人的には河合出版のチョイスシリーズがオススメです。いやなんとなくそれなりにわかれば、ここまでやらなくても良いかもしれないです。

時間がかかるし、コスパを考えた時にどこまで高校数学をやるかですね。でも勉強って時間がかかるものですよね。

うーん、個人的にはやった方がいいと思うんだよなあー


チョイス新標準問題集数学3 (河合塾シリーズ)

チョイス新標準問題集数学3 (河合塾シリーズ)


チョイス新標準問題集数学1・A (河合塾シリーズ)

チョイス新標準問題集数学1・A (河合塾シリーズ)

あれ?チョイスって2Bもあったよね???
見つからん…


いや!無理無理無理無理無理!!!そんな時間捻出できん!!

という人はとりあえず教科書の内容を全部浚ってみましょう。なんとなく言ってることがわかって、イメージできればまあ良しとしていいかも。



5.一体目のモンスターを倒したぞ

高校数学を勉強し、めでたく1体目のモンスターを倒せるまでに成長することができました。

ここからやっと大学数学に入ります。

とはいうもののここからの意見はいろんなものがあり、一概にこれが良いとは言いにくいです。

何冊もやるのは辛いし、そもそも目的は機械学習入門だよね?ということになりかねません。

が、

最近、そのあたりの事情に対して素晴らしい1冊が出版されました。

その名も

機械学習のエッセンス』



これは素晴らしいです。機械学習に必要であろう数学が綺麗にわかりやすくまとまっています。

これまでになかった種の意志が強く伝わってくるようです。

著者曰く、割と誤植が多いことがわかったらしいのですが、正誤表は公開されていますし、誤植が多いことを差し引いても素晴らしい本だと思います。

エッセンスという名に相応しいです。


ちなみに機械学習でよく使われるPython機械学習の実装を行なっており、それらの勉強にもぴったりです。

機械学習のエッセンスを読んでもなんだかサッパリであれば、機械学習用に高校数学を勉強し直した方が良い」というような基準にしてもいいかもしれませんね。

いやこれはマジでオススメ。





6.やっとある種の門が見える位置に立つことができたぞ


機械学習入門で討死しない数学は揃えることができました。

ここからはどのようなモチベーションで機械学習を勉強するかに依りますが、僕の場合は応用統計学の延長で機械学習を勉強しているので、そのあたりから入門していくことを考えましょう。

まず統計学の勉強はした方が良さそうですね。
なんせ統計的学習理論ですから。

ではどのあたりからどのあたりまでやった方がいいのでしょうかね?

とりあえず門の前に立つことが目標ですから、数理統計学をやるのはやめておきましょう。入門するのにはオーバーキル極まりないです。入門してから勉強しましょう。※僕も今勉強中です。

これはかなり迷ったのですが、とりあえず簡単な推測統計学の勉強をしておいた方が良さそうですかね。
検定理論とかはとりあえず放置しておいて良いかと思います。
(ただ統計の教科書って基本的に統計的検定入ってますよね。)



というか、今更思ったのですが、、、、


簡単な確率論の勉強した方が有意義なんじゃ…???


どんな確率分布があるだとかは知っておいた方がいいですよね。

そんなわけで確率論の勉強しましょう。

藤田先生のこれがオススメです。


弱点克服大学生の確率・統計

弱点克服大学生の確率・統計



全部やるのは結構ヘビーですが、力はちゃんとつくので頑張りましょう!!!!

これの何がいいって大学受験の参考書っぽく勉強できるようになっているところです。
つまり問題を解くことによって理解をしていこうという感じですかね。




7.機械学習入門の門の前に立ったぞ


まあここまでやれば、入門しても大丈夫でしょう。


もちろんここまでのことを全部やってから機械学習の勉強をしようってんじゃありませんよ。

そんなことをしていたらモチベーションが消えて無くなってしまいます。

機械学習の勉強をしつつ、入門するに必要な知識を得ていくのがベストだと思います。

実際に僕もわからないことが出てくる都度、数学の勉強したりしています。もうあと半年ぐらいしたらもうちょい数学の基礎力を上げていきたいなとも思っています。


それに機械学習の勉強をしていたら、自然と気になってくるはずなんですよねー。
線形モデルにおいて適当な仮定の下で、最小二乗推定量はBLUEになるとか書かれていたら超気になりませんか?

その時に
正規分布ってなんぞや!
とか
独立?共分散?なんだこれは!!
とか
なんだよ不偏って!!!
とかなったら、当然それらの知識を埋める必要がありますよね。



ちなみに機械学習始めるのにあたって、1番最初にやると良いアルゴリズムは線形モデルです。

理由は色々ありますが、直感的にわかりやすいし、基本だし、多くの問題は線形モデルで片付くような気がします。もちろん線形モデルじゃどうにもならない難しい問題もたくさんありますよ。゚・(>﹏<)・゚。

たぶんあなたが知りたいのはそっちですよね。それでも線形モデルから始めた方がいいと思います。




うーん、卒論ツラい(-﹏-。)

『第1種の過誤』と『第2種の過誤』

統計的な手法で多く使うものと言えば、おそらくまずはt検定だと思います。

でなんか第1種の過誤とか第2種の過誤とか慌て者とかなんとかってわけわからなくなるやつがあると思います。

まあなんとなくどういうものかなというところを紹介します。


さて、t検定は2標本の平均が等しいか否かを検定します。

数式や統計的検定とはとか何か等の細かい話は別のサイトやブログや参考書に譲るとして、ちょっとした実験をしてみましょう。


まず2つの標本をつくります。

   a {\sim} N(50,10)
   b {\sim} N(50,10)

はい、見ての通り母平均も母分散も等しいです。
ちなみにt検定は標本の従う分布に対してロバストではありますが、正規分布を仮定した検定です。

さて、データ数は共にn = 10であるとしましょう。
分散は等しいとしましょうってか等しいです。ただし、ここでは分散の値は知らないふりをします。

t検定における帰無仮説と対立仮説は

   帰無仮説:H_0 : μ _a =  μ _b
   対立仮説:H_1 : μ _a ≠  μ _b

です。それではやってみましょう。今回はRを使います。

# データの生成

a <- rnorm(10, mean=50, sd=10) 
b <- rnorm(10, mean=50, sd=10)   


#等分散を仮定したt検定

t.test(a, b, var.equal=TRUE)

        Two Sample t-test

data:  a and b
t = 1.8429, df = 18, p-value = 0.08187
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -1.410388 21.559806
sample estimates:
mean of x mean of y 
 52.35852  42.28381 


p値は0.08程ですね。これら2つの標本は同じ分布から抽出しているんですよ。
にしてはp値が低すぎるとは思いませんか?

しかし実際標本平均は

   μ _a =  52.35852
   μ _b =  42.28381

と結構違う感じがします。


(まぁ、この結果を見てp-value > 0.05 だから採択だ!!!というのはかなり乱暴ですが、神のみぞ知る結論としては皮肉にも正しいわけです。)


ちなみに統計的検定とは、この「違う感じがする」という疑問に1つの結論を与える方法ですとだけ言っておきます(説明すると長くなるので…)。


さて、ただ1回の実験では信用に値するかわからないので実験回数を1000回にしてみましょうか。

# m・・・棄却した回数
# l・・・採択した回数

 m = 0
 l = 0

 for (i in 1:1000){
	a <- rnorm(10, mean=50, sd=10)
	b <- rnorm(10, mean=50, sd=10)
	t.test(a, b, var.equal=TRUE)
	outi <- t.test(a, b, var.equal=T)
	 if (outi$p.value < 0.05){m = m+1}else{l = l+1}
	 }
 
 P = m/(m+l)   # 帰無仮説を棄却した割合
 P
[1] 0.056


5%ぐらいは帰無仮説を棄却してしまうみたいですね。
実際aとbは同じ分布から生成されているので仮説は正しいです(もっともこれは神のみぞ知る結論ですが)。
それでも5%ぐらいの確率で誤った判断を下してしまうということをこのシミュレーションは言っています。


このように帰無仮説が正しい場合でも棄却してしまう誤りには『第1種の過誤』という名前が付けられています。

今回の場合、第1種の過誤を犯した割合はおよそ5%というわけです。
一方で帰無仮説が正しくないにもかかわらず、採択してしまう誤りには『第2種の過誤』という名前が付けられています。


もし、第2種の過誤を犯す確率だけを最小にしたいのであれば、全部棄却しちゃえばいいですもんね。そのかわり第1種の過誤を犯す確率は高くなります。

つまり良い検定とは、第1種の過誤および第2種の過誤を犯す確率が共に小さい検定であると考えることができます。





最後に

仮説検定は帰無仮説を棄却することにこそ意味を持ちます。
(感覚的には背理法に近いですね。仮説が真であれば、構築した検定統計量はある分布に従う。従っていないのであれば、それは仮説がおかしい。といった論法です。
ただし、採択されたからといって仮説が正しいというわけではありません。なぜなら仮設を肯定する材料が得られたわけではないからです。)

つまり帰無仮説を採択しても特に意味はないということです。だから無に帰る仮説とかいう名前がついてるんですねー。

ちなみに応用の場では採択することを「受容」とか「消極的採択」とかいいます。これは、一応、帰無仮説を採択することに意味はあまりないということはわかっているけれど、まあ帰無仮説が正しいと考えても良いんじゃね?ぐらいの気持ちを表したものだと考えられます。


はい!今回はこんな感じでおしまいですー!