2021/04/01
機械学習が一般的な会話にものぼるようになってきた昨今、機械学習って何となく意味はわかるけど実際どんなことやってるんだろう?って人は多いのではないでしょうか。そこで、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 – yt
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
y = Y + 62.98
y – 62.98 = (x – 169.82) * b
y = b * x + d
D = np.array(((172.5,70.2),(171,62.1),(165.5,58.1),(169.9,60.4),(170.2,64.1)))
d_avg = np.average(D, axis=0)
x = D - d_avg
def lose_score(X, w):
l = X[:,0] * w - X[:,1]
lose = np.sum(l**2)
return lose
l = X[:,0] * w - X[:,1]
lose = np.sum(l**2)
def grad(X, w):
x = X[:,0]
y = X[:,1]
g = x**2 * 2 * w - 2 * x * y
grad = np.sum(g)
return grad
x = X[:,0]
y = X[:,1]
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):
w = 1
for _ in range(max_run):
g = grad(X, w)
if g == 0:
break
else:
w -= l_rate * g
return w
y – 62.98 = (x – 169.82) * b
y – 62.98 = (x – 169.82) * 1.446
y = 1.446 * x - 182.57972
import numpy as np
def lose_score(X, w):
l = X[:,0] * w - X[:,1]
lose = np.sum(l**2)
return lose
def grad(X, w):
x = X[:,0]
y = X[:,1]
g = x**2 * 2 * w - 2 * x * y
grad = np.sum(g)
return grad
def train(X, l_rate=0.01, max_run=50):
w = 1
for _ in range(max_run):
g = grad(X, w)
if g == 0:
break
else:
w -= l_rate * g
return w
D = np.array(((172.5,70.2),(171,62.1),(165.5,58.1),(169.9,60.4),(170.2,64.1)))
d_avg = np.average(D, axis=0)
x = D - d_avg
b = train(x)
s = lose_score(x, b)
print(b)
print(s)