北のシュガポン

北海道大学の工学部生。電気・情報・ロボット・エネルギー専攻。 札幌で一人暮らし満喫中。 お菓子作り、プログラミング、機械学習と色々なことに手を出している暇人。

北大生がつぶやく大学生活や勉強や趣味のブログ。毎日21:00更新予定。

1ミリも知らなくてもわかる機械学習① 線形回帰

シュガポンです。

今回から、私が機械学習について学んだことをわかりやすくお伝えしていこうと思います。パソコンや数学についての知識がなくても分かる!をコンセプトに行っていきますので、よろしくお願いします。

 

 

 

 

そもそも機械学習って?

今回の話題に入る前に、まず機械学習とは何かについてお話します。

とはいっても、「機械学習」という語自体、定義に議論があるところなので一口にいうのはなかなか難しいです。

 

おおざっぱに言うと、「機械学習」=「いちいちプログラムしなくても勝手に学んで判断してくれるコンピュータを作る分野」です。

通常、コンピュータというのは人間がプログラムしてやらないと何もできません。それこそ、「物をとってくる」「10m先まで歩く」などの単純な行為でさえ、踏み出す方向や手の角度などをすべて指定してやらないと何もできないのです。

それを打破するために考え出されたのがこの機械学習。

機械学習では、「どのように学び取るか」だけ人間の手でプログラムし、様々データから学習するというステップはコンピュータにやらせます。

 

例えば、コンピュータに大量の画像データを与え、そこから犬の画像だけを取り出したい、とします。従来は画像のどの辺を見るか、どのように判断を下すかをすべて人間がプログラムしなければいけませんでした。

しかし、機械学習により、データさえ与えればそこから画像の特徴を捉え、「これは犬の画像である」という判断を勝手に下してくれるようになりました。これは非常に大きなイノベーションです。

 

Googleでは翻訳精度の上昇・画像認識など、様々な分野に機械学習(とりわけディープラーニングと呼ばれる学習法)を応用し、莫大な利益を上げています。もちろんGoogle以外にも機械学習を利用している企業・研究機関はたくさんあります。

そのほかにも、コールセンターのオペレーターを機械に置き換えるなど、機械学習に関する様々な試みが今行われているところです。この先数年間で機械学習はさらに進歩・応用されることでしょう。

もしかしたら、人間を超えるロボットが出現するのもそう遠くない未来かもしれません。

 

機械学習の概要については終わり。ここから具体的な理論に入っていきます。

 

 

線形回帰とは

さて、今回見ていくのは「線形回帰」(特に線形単回帰)という問題です。

これは何かというと、「与えられたデータに対し、最も当てはまりの良い曲線(直線)を求める」という問題です。特に単回帰と言った場合は、求める対象が直線に限ります(線形回帰自体が直線を意味することも文脈によりありますが)。今回は直線に限ってお話しましょう。

 

って言葉で言っても全然イメージわかないですよね。というわけで、下の画像をご覧ください。

データ群

上のグラフで青丸で示した一点一点がここで言うデータです。例えば、これが土地に関するデータで、横軸が土地の広さ、縦軸が土地の値段だとしましょう。右に行くほど土地は広く、また上に行くほど値段は高くなる、というグラフです。一個一個のデータは「広さ」と「値段」という2つの情報を持っています。

点の分布をみると、土地が広ければ広いほど(=右のほうに行くほど)、値段は高くなっている(=点は上のほうにある)のがわかります。土地が広ければ値段が高くなるのはまあ当たり前ですね。このように「広さ」と「値段」という2つ1組のデータ(=点)がいくつかあるとします。

 

ここで考えたいのが、「この点の大体の分布を関数(曲線や直線)で表せないか?」ということです。今回は特に直線について考えているので、これを言い換えると「この点の大体の分布を直線で表せないか?」ということ。

先ほども言った通り、データ全体を見渡してみると右上がりの傾向があることがわかります。この傾向に最もよく当てはまる直線を探す、これが線形回帰問題です。

 

例えば、このような直線はどうでしょうか?

直線1

この直線だと、データの分布は上手く表せていませんね。なぜなら、直線とデータが離れすぎているからです。直線に対し、実際のデータはもっと上らへんにあります。

 

では、次の直線は?

直線2

これは分布をよく表せていますね。直線の周りにデータが分布していて、直線を見ればだいたいのデータの値がわかります。

このように、分布をよく表す直線を探すのが線形回帰です。

 

 

最小二乗法

先ほど、「分布をよく表す」と言いました。これはすなわち、「実際のデータとの誤差(=直線とデータの縦方向の距離)が少ない」ということです。

 

こちらは、先ほどの2つ直線と適当な1個のデータとの誤差をビジュアル化したものです。

誤差1

誤差2

前者より後者の直線のほうが誤差が少ないですね。これはすなわち、「実際のデータからの『ズレ』が少ない」=「分布をよく表している」ということです。このように線形回帰問題では、直線と実際のデータとの誤差をより少なくする方向で直線を探していきます。

もちろん、ほかのデータに対する誤差も計算しなければなりませんので、線形回帰で求められるのは「与えられた全てのデータに対する誤差が一番少ない直線」ということです。このような直線の求め方を最小二乗法と言います。(なぜ「二乗」なのかは割愛。ここでは、距離が二乗で与えられる、とだけ説明しておきます。)

 

機械学習では、「誤差を最小にする」という問題をコンピュータに解かせます。

そして、いったん誤差を最小にする直線が求まれば、例えば土地の広ささえわかればその土地の値段はある程度予測できますね。例えば、下のグラフで広さが黄丸で与えられれば、直線から値段が赤丸で予想されます。

予測

 

このように、回帰問題では「当てはまりのいい直線を求め、それをもとに未知のデータに対する予測を行う」ことがゴールとなっています。未知のデータの一方がわかればもう一方を予測できる、ということですね。

 

 

過学習

ここで1つ疑問が生まれるかもしれません。「誤差を最小にしたいんだったら、こんな線を考えればいいんじゃないの?」的な。

最適解?

確かにこれなら、「与えられたデータに対する」当てはまりは最高です。誤差が0ですから。

 

しかし、例えば次の黄丸のような「新たなデータ」が与えられたとしたら?

誤差

この2つの黄丸のデータは、全体の傾向から十分予測されるデータと言えるでしょう。しかし、求めた曲線との間には隔たりが生じています。当てはめがうまくいっていない状態です。

このように、既存のデータに対して完全に当てはまる線を考えると、新しいデータに対しての当てはまりがかえって悪くなる、つまり未知のデータに対する予測ができなくなってしまう、という状況に陥ってしまいます。これを過学習と言います。

過学習、つまりコンピュータが既存のデータを学び過ぎて、それにしか当てはまらなくなってしまった、ということ。これでは本末転倒ですね。

ですから、すべてのデータに完全に当てはまるというよりは、アバウトでいいから大体の傾向をつかんで、そこから未知のデータの予想ができるようにする、というのが回帰問題で求められることなのです。

ちなみに、上のデータを先ほどの直線に反映するとこのようになります。

誤差

このように、未知のデータもある程度の誤差で近似することができます。これが、「大体当てはまる直線」を求める理由です。

 

 

実用例

回帰問題の実用例としては、例えば消費電力の予測などがあげられるでしょうか。

上のグラフで、横軸を時間(分単位)に、縦軸を消費電力と考えると、回帰問題により求めた曲線(回帰問題では直線以外も扱うことがあります)は、1日の中で消費電力が大体どのように変化するかを表すことになるでしょう。

例えば、ある家庭の消費電力についてのデータが与えられたとして、求められる曲線は・・・大体こんな感じ・・・かな?左側が朝、右側が夜としましょう。

回帰曲線

曲線が求まれば、どの時間帯にどれだけ電力が必要になるか予想が立ちますね。その予想をもとに発送電の計画を行ったりできます。

このように、回帰問題は得られたデータをもとに将来の予想を立てるなどの用途に使われています。

 

 

今回はここまで。

次回は、どのようにコンピュータにこれらの計算をさせるかを見ていきます。