機械学習が一般的な会話にものぼるようになってきた昨今、機械学習って何となく意味はわかるけど実際どんなことやってるんだろう?って人は多いのではないでしょうか。そこで、AI碁や画像認識などのAIの最先端技術のベースとなるような概念を1から説明してみます。
今回は一番ベーシックな線形回帰。
身長(x) | 体重(y) |
172.5 | 70.2 |
171 | 62.1 |
165.5 | 58.1 |
169.9 | 60.4 |
170.2 | 64.1 |
yp = x * w1 + w2
|
予測体重をypとした体重予測関数をこのように仮定します。
yp – yt
|
実際の体重をytとすると以下が誤差になります。
これが最少になるようなw1, w2を決定するという計算処理に落とし込めます。
L(w1, w2) = (yp0 – yt0)**2 + (yp1 -yt1)**2 + …
|
身長– 平均身長(X) | 体重 – 平均体重(Y) |
2.68 | 7.22 |
1.18 | 0.88 |
-4.32 | -4.88 |
0.08 | -2.58 |
0.38 | 1.12 |
Yp = X * w1
|
L2(w1) = (Yp0 – Yt0)**2 + (Yp1 – Yt1)**2 + …
|
L2(w1) = (X0 * w1 – Yt0)**2 + (X1 * w1 – Yt1)**2 + …
|
=a(w1 – b)**2 + c
|
x = X + 169.82
|
2で最適化された予測式 y = b * x + d のxに身長をいれれば体重が予測できます。(計算すればb, dは実数値で決定されてるので結果がでます。)こうして出た予測値をそのまま使ったり、予測値と実際の測定値を比較することで異常検知に使ったりなどいろいろ応用できます。
D = np.array(((172.5,70.2),(171,62.1),(165.5,58.1),(169.9,60.4),(170.2,64.1)))
|
def lose_score(X, w):
|
l = X[:,0] * w - X[:,1]
|
lose = np.sum(l**2)
|
def grad(X, w):
|
x = X[:,0]
|
g = x**2 * 2 * w - 2 * x * y
|
l**2 = (x * w - y)**2 = x**2 * w**2 - 2 * x * y * w + y**2
|
x**2 * 2 * w - 2 * x * y
|
def train(X, l_rate=0.01, max_run=50):
|
y – 62.98 = (x – 169.82) * b
|
これが与えられたデータから導き出した予測式になります。
import numpy as np
|