2016年12月9日 更新

「パターン認識と機械学習」理解のための数学〜pythonで最小二乗法を解く(改良版)part1〜

今回は昨今話題になっている機械学習を理解する上で必要となる数学についてご紹介します。

431 view お気に入り 0

先日,インターンのみんなで「パターン認識と機械学習(上)」の第1章の輪読会を行いました.

 (1790)

輪読会の中で主に議論となったのは,多項式フィッティング. 多項式フィッティングとは,たくさんあるデータ点を多項式で表現する,というものです. 例えば,下の図を見てください. 散布図に当てはまりの良い直線 $y=ax+b$ を引いています.

データ点が散布している

データ点が散布している

 (1793)

上の例では直線,つまり一次関数を考えていますが, 「多項式」と言うわけですから,一般には何次の関数でも同じことができます. $N$ 次の関数を仮定すれば, \begin{align} y=w_0+w_1x+\cdots +w_Nx^N \end{align} という形で書くことができます.この形に統一するなら,先ほどの直線 $y=ax+b$ は \begin{align} y=w_0+w_1x \end{align} に相当します.ここまではOKですよね! 直線の例は,結局1次多項式の例を考えていたにすぎない,というわけです.

では,データ点にちょうどうまくフィットするようなパラメータ $a,b$ は どうやったら見つけられるのでしょうか?

ここで係数を求める方法が, 最小二乗法と呼ばれる方法です. 最小二乗法とは

データとの差を縦に見て,差分の二乗の和が最も小さくなるように係数を決める

というものです.下図を見てイメージをつかんでください. 点線部分が「差分」に相当します. この差分 $d$ の二乗を全てのデータ点について計算して足しあわせ, それが最も小さくなるように係数を設定するとよい.これが最小二乗法です.

 (1797)

一般に,$M$ 点からなるデータがそれぞれ $(x_i,y_i)$ と表されており, これを $N$ 次の多項式でフィッティングすることを考える場合,差分 $d$ は \begin{align} d&=y_i-(w_0+w_1{x_i}+\cdots+w_N{x_i}^N)\notag\\ &=y_i-\sum_{k=0}^Nw_k{x_i}^k \end{align} と表されますから,全ての差分の2乗の総和は \begin{align} S(w_0,\ldots,w_N)=\dfrac{1}{2}\sum_{i=1}^M\left(y_i-\sum_{k=0}^Nw_k{x_i}^k\right)^2 \end{align} となります.$\dfrac{1}{2}$ というのは,後々の都合を考えて便宜上つけたものです.

これを最小にすれば,求めたい多項式の係数 $w_k$ が得られる,ということがわかりますね! しかし,ここからが問題です. どうやってこの $S(w_0,\ldots,w_N)$ を最小にするものを求めるのでしょうか.

当てずっぽう,では到底無理ですよね. なぜなら,決定するべきパラメータがたくさんあるからです.

もしもパラメータが1つしかなかったら,最小値を求めるのは比較的簡単です. 例えば, \begin{align} f(w)=w^2+4w+1 \end{align} の値を最小にするものを求めたいとき,どのようにするでしょうか.

こういうときに強力な力を発揮するツールが微分です. 微分とは,大雑把に言えば傾きのこと. 二次関数ならその関数の傾きが0になるところが最小値となるだろう,と予測できるわけです.

上の関数を微分してみると \begin{align} f'(w)=2w+4 \end{align} となり,この値が0になるのは $w=-2$ のときだから, $f(w)$ は $w=-2$ の時に最小になる,と瞬時に求まるわけです.

実は,この微分するという方針,これはパラメータが沢山あっても使えます. では今回の最小二乗法の場合,何を微分すればよいのでしょうか. 決定したい変数は,多項式フィッティングの係数 $w_0,\ldots,w_N$ です. 先程,一変数の場合は「パラメータ$w$」で微分することで 目的のパラメータの値が分かるのでした. その類推で,今回も $w_0$ から $w_N$ までで微分すればよいのか,と想像ができます. そうなんです.しかし,$N+1$ 個も微分するのは確実に大変ですね.

ここで導入するのが,「ベクトルで微分を行う」という方法です. が,今回は長くなったのでひとまず休憩し, 次の章からベクトルでの微分について考えていきます.

9 件

関連する記事 こんな記事も人気です♪

Deep learningで画像認識⑨〜Kerasで畳み込みニューラルネットワーク vol.5〜

Deep learningで画像認識⑨〜Kerasで畳み込みニューラルネットワーク vol.5〜

U-Netと呼ばれるU字型の畳み込みニューラルネットワークを用いて、MRI画像から肝臓の領域抽出を行ってみます。
木田智士 | 258 view
VR解剖アプリを作る その2 ~Unity上でCTデータを扱う~

VR解剖アプリを作る その2 ~Unity上でCTデータを扱う~

3DデータをUnityに取り込んで、カメラで観察するアプリを作ります。 非VRとVRを実装します。
山田涼太 | 350 view
現役JDと学ぶ画像処理入門①〜openCV入門〜

現役JDと学ぶ画像処理入門①〜openCV入門〜

openCV入門(画像の読み込み、表示、保存、線形変換、拡大縮小)
広部ゆりか | 3,154 view
Deep learningで画像認識⑧〜Kerasで畳み込みニューラルネットワーク vol.4〜

Deep learningで画像認識⑧〜Kerasで畳み込みニューラルネットワーク vol.4〜

転移学習と呼ばれる学習済みのモデルを利用する手法を用いて白血球の顕微鏡画像を分類してみます。
木田智士 | 3,022 view
【機械学習勉強会】パターン認識と機械学習(PRML)第1章のまとめ Part.3 ~決定理論~

【機械学習勉強会】パターン認識と機械学習(PRML)第1章のまとめ Part.3 ~決定理論~

機械学習理論の名著である『パターン認識と機械学習』(Pattern Recognition and Machine Learning, PRML)の内容をまとめます. 第1章の Part.3 では,「決定理論」について説明します.
最上 伸一 | 846 view

この記事のキーワード

この記事のキュレーター

三好 裕之 三好 裕之