TechFULの中の人

triple-four’s blog

機械学習の基礎①(回帰)

こんにちは!TechFULでアルバイトしているあたかです。 今回は機械学習の「回帰」について解説します!


機械学習

機械学習とは、機械が自動的に過去のデータから傾向性を学習して、未来の予測ができるようになることです。
たとえばGmailの迷惑メールフィルタやYouTubeの関連動画表示のような機能は機械学習によって実現されています。ユーザによって迷惑メールであると見なされたメールの履歴から、迷惑メールの特徴を抽出し機械的に判断できるようになります。YouTubeの関連動画も、過去にその動画を見たユーザたちの視聴履歴から、同じ動画を見たユーザが気に入りそうな動画を学習しています。
もちろん100%正しく迷惑メールに振り分けたり、関連表示された動画に興味が惹かれるわけで はありません。しかし人の手によって一つ一つ手間をかけてやったり、自動化するにしても人間の主観が混じってしまうようなやり方よりも機械に任せるほうが客観的で正確な予測が得られやすいです。
じつは機械学習はscikit-learnなどフレームワークが充実していて中身がよくわかっていなくても、とりあえずは動くものができてしまいます。良い結果が得られている間はそれでもいいかもしれませんが、うまくいかなくなったときにパイパーパラメータなどのチューニングなどは機械学習についての理解が深まっていないと効率的におこなえない場面がでてくるかもしれません。いくつかのアルゴリズムについては、0から実装できるようになると理解も自然と深まっていくと思います。

教師あり学習 教師なし学習

機械学習教師あり学習教師なし学習の2種類あります。
教師あり学習とは、入力に対する正しい出力があらかじめわかっているときの学習方法です。例えば手書き数字の分類をしたいときに、この手書き数字は「2」を書いたつもりだったということがわかっている状態です。
教師なし学習は、その名の通り正解ラベルのない場合の学習のことです。現実的な問題として、学習には大量なデータが必要でありラベル付けの作業をおこなうのはコストがかかるので、教師なしであることも多いです。教師なしでも入力データの特徴量を抽出し、似た特徴を持つデータ同士をいくつかの組みに分類することができます。このような分類をクラスタリングといいます。

回帰とは

回帰は教師あり学習に含まれます。入力されたデータと正解となる数値から入力と出力の関係性を学習します。学習した結果、未知の入力に対応しても実数値を予測します。

線形回帰

線形回帰とは、データの集合に線形な計算式で表される図形を当てはめることです。
線形な計算式とは例えば以下のような式です。

$$y = w_{0} + w_{1}x_{1} + \cdots + w_{n}x_{n}$$

二次元では直線、三次元では平面です。四次元以上だと直線や平面といった具体的な呼び方はないですが、二次元三次元のときも含めてこのような図形を超平面と呼びます。

この直線を求めるアルゴリズム最小二乗法といいます。 データと直線との差の二乗の和が最小となるように係数の値を決定します。この二乗和を目的関数と言います。
例えば、学校のテストで数学と理科の点数のデータがあったとします。
n人の生徒に対して、数学の点数を{x_1, x_2, \cdots , x_n} 理科の点数を{y_1, y_2, \cdots, y_n}としたとき、
直線y =  w_0 + w_1xについて考えます。
このとき目的関数は以下のようになります。
$$\displaystyle E(w_0,w_1 ) = \sum_{i=1}^{n}{\left\{y_{i} - (w_0 + w_1x_{i}) \right\}^2}$$ 目的関数を係数w_0, w_1のそれぞれについて偏微分する(すなわち\displaystyle \frac{\partial E}{\partial w_0} = 0,\frac{\partial E}{\partial w_1} = 0 を解く)ことで、w_0, w_1は以下のように求まります。
$$ \begin{align} \displaystyle w_{0} &= \sum_{i=1}^{n} {(y_i - w_1x_i)} \\ w_{1} &=\frac{ \sum_{i=1}^{n}{x_{i}y_{i}} - \frac {1}{n} \sum_{i=1}^{n} x_{i} \sum_{i=1}^{n} y_{i} }{\sum_{i=1}^{n} x_{i}^2 - \frac{1}{n}(\sum_{i=1}^{n} x_{i})^2} \end{align} $$

図にするとこのようになります。

f:id:sanbaiefforts:20181215163205p:plain
この生徒たちは数学の点数が高いと理科の点数も高いという傾向性があることがわかりますね。

リッジ回帰

係数を決定するために用いたデータだけでなく、未知のデータに対してもより良い予測をして欲しいですが、正則化によって汎化性能を高くすることができます。
汎化性能とは訓練データに対してだけでなくテストデータに対してもより良い予測ができる性能のことです。
正則化とは係数の大きさを目的関数に正規化項として加えることによって、係数が大きいとペナルティが与えられるようにすることです。係数が大きいと過学習が起こりやすいためです。
目的関数に重みの二乗和の項を加えることをL2正規化といいます。
このとき目的関数は以下のように表されます。\lambdaは正規化項をどの程度重視するかを決めるパラメータです。
$$\displaystyle E(w_0,w_1 ) = \sum_{i=1}^{n}{\left\{y_{i} - (w_0 + w_1x_{i}) \right\}^2} + \lambda{\sum_{i=0}^{1} w_{i}^2}$$ データの中に、他と比べて大幅に異質な外れ値が入っている場合にも、その外れ値による影響が少なくなるような手法です。データの種類によって、この特性がメリットにもデメリットにもなります。
例えば先ほどの例だと、数学はめちゃくちゃできるのに理科がとても苦手な人が含まれていても、そのような人が少ない場合は直線の形に影響してきません。