18. 線形分類器の実装例
a, b, c を指定してオブジェクトを作り predict で予測する
2019-02-13 社内勉強会 18
class LinearClassifier():
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def predict(self, x, y):
if self.a * x + self.b * y + self.c >= 0:
return 1
else:
return 0
20. 線形分類器の学習
直線の選び方 (= a, b, c の選び方) で良し悪しが変わる
2019-02-13 社内勉強会 20
0 1
0
1
よく当たる a, b, c を見つけたい
手持ちのデータを利用して良い a, b, c を学習する
21. 素朴な実装方法
以下のような方法を思いつくが・・・
◦ 三重のループで a, b, c を走査して「誤分類の数」が最小のものを選ぶ
◦ ランダムに a, b, c の組を沢山作り「誤分類の数」が最小のものを選ぶ
問題点
◦ 計算コストが大きい
◦ a, b, c を探す範囲の手がかりもない
効率的に a, b, c を探す方法が必要
2019-02-13 社内勉強会 21
22. 勾配降下法 (考え方)
適当な初期値から始める
a = 0, b = 0, c = -9 (errors = 50)
変数を一つだけ変えたときの誤分類の数をそれぞれ調べる
2019-02-13 社内勉強会 22
誤分類の数が減る方向にパラメータを更新する
23. 勾配降下法 (考え方)
適当な初期値から始める
a = 1.4, b = 0, c = -9 (errors = 33)
変数を一つだけ変えたときの誤分類の数をそれぞれ調べる
2019-02-13 社内勉強会 23
誤分類の数が減る方向にパラメータを更新する
24. 勾配降下法 (考え方)
適当な初期値から始める
a = 1.4, b = 0.05, c = -8.8 (errors = 26)
変数を一つだけ変えたときの誤分類の数をそれぞれ調べる
2019-02-13 社内勉強会 24
誤分類の数が減る方向にパラメータを更新する