けんごのお屋敷

2016-01-03

やる夫で学ぶ機械学習 - 序章 -

やる夫で学ぶ機械学習を書いてみました。

やる夫で学ぶ機械学習シリーズの第 1 回です。記事がとても長くなったので、分割してます。

目次はこちら。やる夫で学ぶ機械学習シリーズ

機械学習

やる夫
機械学習やってみたいけど、そもそもどうすりゃいいかまったくわからんお。Wikipedia を見たけど、何を言ってるのかさっぱりだお…

やらない夫
お前、Wikipedia でわかるわけがないだろ、常識的に考えて…

やる夫
そうなのかお…。しかも、やたら数式が出てきて、日本語でおkって言いたくなるお。

やらない夫
確かに数式は出てくるが、そもそも数式というのは日本語で言うと長ったらしくなるものを誰にでもわかるように厳密で簡潔に表してるものなんだぞ。というか、やる夫は機械学習で何がしたいんだ?

やる夫
えっ…、あーえーっと、ほら、アレだお…なんか、こう、パーッと、いい感じの…

やらない夫
お前、ただ機械学習って言いたいだけだろ…

やる夫
そんなことないお!!やる夫は流行に敏感なんだお!!!

やらない夫
まず機械学習で何をやりたいかを考えることは大事なことなんだが…、じゃぁ質問を変えよう。機械学習はどういうところで使われていると思う?

やる夫
スパムメールの判定とか、文字認識、金融市場の予測なんかに使われてるお。

やらない夫
その通りだ。よく知ってるじゃないか。

やる夫
Wikipedia に書いてあったお。

やらない夫
実際は、それ以外にも幅広い分野で利用されているんだ。

やる夫
万能タイプなんだお。

やらない夫
そんなことはないぞ。機械学習があればなんでもできるようになるわけじゃない。どこに適用できて、どこに適用できないのかを見極めるのも大事なことだ。それに、大抵の場合は大量の学習データを人手で用意する必要もあるんだ。

やる夫
機械学習ってそんなもんなのかお…、ちょっと面倒くさいお。勉強するモチベーションさがってきたお。

やらない夫
まあそういうな。機械学習のおかげで、今まで出来なかったことが出来るようになった事例はたくさんあるんだ。勉強してみると案外おもしろいもんだぞ。

やる夫
ふーん。そこまで言うなら勉強につきあってやってもいいお。

やらない夫
なんで急に上から目線なんだよ。

やる夫
ここでやる夫が勉強をやめると、話が続かないんだお。

やらない夫
まったく…。じゃぁ最初は機械学習でどういう問題を扱えるかという話からだ。

回帰、分類、クラスタリング

やらない夫
さっき言ったように、機械学習はどんな問題でも扱えるわけじゃない。機械学習が得意とする問題には、主に以下のようなものがある。

  • 回帰
  • 分類
  • クラスタリング

やる夫
統計学で同じような単語を聞いたことがあるお。回帰分析とか、統計的分類とか。

やらない夫
やる夫は統計学に明るいのか。

やる夫
えっ、いや、Wikipedia で読んだことあるだけだお…

やらない夫
確かに回帰や分類は、統計学で言うところのそれと同じだな。どこが違うかって言われると微妙だが、その辺を気にしてもあまり建設的ではないから、話を先に進めよう。

やる夫
やらない夫がはぐらかしたお。

やらない夫
いいんだよ。とりあえず、回帰の話をしようか。英語で Regression とも言う。回帰は、わかりやすく言うと学習データとして “連続するデータ”、例えば時系列データ、などが与えられた時、未知のデータがどういうものかを予測するものだ。

やる夫
いや、全然わかりやすくないお…、なに言ってるんだお。

やらない夫
例えば株価の予測をしたいとしよう。この場合、学習用の時系列データというのは「昨日の株価」「2 日前の株価」「3 日前の株価」…「n 日前の株価」が使えるだろう。実際に株価がいくらだったのかは、調べればわかるよな。この時、これらの学習データを使って「明日の株価はどうなりそうか」や「この先のトレンドはどうなりそうか」などを予測するのが回帰だ。

日付 株価
昨日 ¥1,000
2 日前 ¥1,100
3 日前 ¥1,070

やる夫
株価の予測ができるなんてチートだお。

やらない夫
現実はそううまくはいかない。株価が変動する要因は過去の株価だけではないからな。他にも現在の景気や企業の業績など様々な要因があるはずだし、未来を完全に見通せるわけでもない。あくまで予測と言っているんだから、参考の域を出ない。

やる夫
まあ、そこはなんとなくわかるお。時系列データじゃないけど、たとえば、身長から体重を求めるのも回帰の一種かお?

やらない夫
そうだな。まあ、体重なんかは実際に測定すればすぐわかることではあるが、例としては正しいな。よくわかってるじゃないか。

やる夫
楽勝だお。

やらない夫
では、次は分類だ。英語で Classification とも言う。これはそんなに難しくない。たとえばスパムメールの判定はこの分類問題に当てはまる。

やる夫
分類は直感的にわかるお。Twitter のつぶやきを見て、この人は男なのか?女なのか?を判別することも分類問題かお?

やらない夫
そうだな。スパムメール判定や、今やる夫が言った男女判別などは二値分類と呼ばれる。未知のデータを 2 つのうちのどちらのクラスに属するかを予測するんだ。

やる夫
回帰の話の時に出てきた学習用データは、この場合はどうなるんだお?

やらない夫
スパムメール判定の場合、過去に受信したメール 1 通に対して、人間の手でそのメールがスパムかスパムでないかを見極めた答え、という情報のペアだな。

メール スパム
2015-12-19 お疲れ様です。今度の… x
2015-12-20 主人がオオアリクイに… o
2015-12-20 ハワイ旅行に当選しま… o

やる夫
オオアリクイメール懐かしいお…まだ息してるのかお。

やらない夫
二値分類とは別に、3 つ以上のクラスに分類する問題もあって、多値分類や多値クラス分類と言う。文字認識なんかがそうだな。

やる夫
えっ、ちょっとわからんお。文字認識がどうして分類問題になるんだお。

やらない夫
0 〜 9 という数字を認識するプログラムがあったとするだろ。そのプログラムに こういう画像を与えるとおそらく 0 と識別されるだろう。 これは 9 と識別されるだろう。

やる夫
当たり前だお。

やらない夫
これはつまり、与えられた画像 が 0 〜 9 の 10 個のクラスのどれに分類されるか、という問題を解いている。文字認識はこれの拡張版で、アルファベットであれば a 〜 z の 27 個のクラス、ひらがなや漢字も含めるのであればもっとたくさんのクラスに分類する問題ということだ。

やる夫
わかったような、わかってないような…

やらない夫
全てを完璧に理解しようとする必要はないぞ。ただ、自分の中で「どこからわからなくなったのか」という境界線はハッキリさせておくんだ。そういうところは後から戻って来て何度でもやり直せばいい。

やる夫
うまく言いくるめられてるだけのような気がするけど、言いたいことはわかったお。ここでウダウダやってても進行に支障がでるんだお。

やらない夫
進行に支障ってお前、登場人物がそういうところまで気にするかよ…

やる夫
やらない夫は、いらないツッコミをするより話を先に進めて欲しいお。

やらない夫
では、最後にクラスタリングだ。分類と似ているが、ちょっと違う。たとえば生徒 100 人分の数学と国語の点数があったとして、その生徒達を数学が得意なグループや国語が得意なグループなんかに分けることをクラスタリングという。

やる夫
それって結局分類してるんじゃないかお?分類とどう違うのかがわからんお…

やらない夫
分類は学習用データにあらかじめ「ラベル」がついている。正解データとも言うな。メールがスパムかスパムでないか、という具合だ。変わってクラスタリングにはデータにそういったラベルは付いていない。

やる夫
もしかして教師あり学習と教師なし学習ってやつかお?

やらない夫
そうだな。回帰と分類は教師あり、クラスタリングは教師なし、だな。

やる夫
回帰、分類、クラスタリング、教師あり学習、教師なし学習…、単語をたくさん覚えるの面倒だお。

やらない夫
ここで完璧に覚えなくてもいいし、暗記しただけだったらどうせ覚えてもすぐ忘れるだろ。実践していくうちに嫌でも覚えるさ。

やる夫
やらない夫がそう言うなら、怠けることにするお。

数学とプログラミング

やる夫
ところで、そろそろ概要は飽きてきたお。機械学習の中身をもっと知りたいお。

やらない夫
やる夫は微分と線形代数の知識はあるか?

やる夫
うっ…、いちおう理系だったからなんとなく、なんとなくは覚えてるお…

やらない夫
多少の数学の知識は必要となってくるから、不安だったら復習はしておいて損はないぞ。とは言っても、そんなに難しいレベルが必要になるわけでもないから、わからなくなったら都度調べるというスタンスでも問題はないと思うが。

やる夫
復習なんて面倒くさいから、わからなくなったらやらない夫に聞くお。

やらない夫
お前、そんなんで大丈夫かよ…

やる夫
別に数学は嫌いじゃないから、ちゃんと教えてくれれば問題ないお。

やらない夫
プログラムは組めるのか?

やる夫
そっちは得意だお。やる夫は Ruby や PHP を使って Web サービスも作ったことがあるんだお。JavaScript もオチャノコサイサイ、プログラミング好きだお。

やらない夫
やる夫がプログラミング得意なんて、シュールだな。では、そっちの方は心強いな。

やる夫
笑うなお。

やらない夫
さっき機械学習は統計学にも近いという話をしたが、こういった分野では Python や R、それから Matlab なんかの言語がよく使われる。特に、論文の実装なんかは Matlab になってることは多いな。

やる夫
やる夫がやったことない言語ばっかりだお…、てか Matlab とかはじめて聞いたお。

やらない夫
元々プログラミングが得意なんだったら、新しい言語を覚えるのも、別になんてことないだろ。そこはきっと、やる夫にとっては大きな問題ではないさ。

やる夫
あっ、ん…?Matlab って有料なのかお?いや、Standard ライセンスとか、めちゃくちゃ高くないかお?こんだけお金があれば、数ヶ月は余裕で暮らせるお…

やらない夫
それは盛り過ぎだろ…。まあそうだな、Matlab は有料だから、趣味で使う人間はあまりいないだろう。代わりに Octave という Matlab クローンがあって、そっちはオープンソースになっていて、誰でも無料で使うことができる。

やる夫
そんなものがあるのかお。

やらない夫
実際、論文の実装として公開されている Matlab のプログラムを Octave で実行したりもできるので、かなり使える。ただ、完全互換ではないようだな。

やる夫
ふーん、世の中にはいろんな便利なものがあるお。

やらない夫
やる夫が機械学習をやってみたいなら、さっき挙げた言語を少し勉強しておいても損はないぞ。もちろん Ruby や PHP、JavaScript でも、できないことはないがな。

やる夫
新しく言語を覚えるなんて面倒くさいから、わからなくなったらやらない夫に聞くお。

やらない夫
お前、そんなんで大丈夫かよ、まじで…


やる夫で学ぶ機械学習 - 単回帰問題 - へ続く。

  • このエントリーをはてなブックマークに追加