teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

6

修正

2020/06/11 09:05

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -46,9 +46,9 @@
46
46
  となります。なので、
47
47
 
48
48
 
49
- 正解が0なのに予測が1と誤識別したら
49
+ 正解が-1なのに予測が1と誤識別したら
50
50
  → self.w_[1:] = self.w_[1:] - self.eta * 2 * xi と更新
51
- 正解が1なのに予測が0と誤識別したら
51
+ 正解が1なのに予測が-1と誤識別したら
52
52
  → self.w_[1:] = self.w_[1:] + self.eta * 2 * xi
53
53
  正解と予測が一致したら
54
54
  → self.w_[1:] = self.w_[1:] + 0 * xi = self.w_[1:] (つまり、更新しないのと同じ)

5

修正

2020/06/11 09:05

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -39,17 +39,17 @@
39
39
  self.w_[1:] += update * xi
40
40
  → self.w_[1:] += self.eta * (target - self.predict(xi)) * xi
41
41
 
42
- ここで、self.eta * (target - self.predict(xi)) について考えると、ラベルが0, 1 の2クラスなら
42
+ ここで、self.eta * (target - self.predict(xi)) について考えると、ラベルが-1, 1 の2クラスなら
43
- target = 0, self.predict(xi) = 1 なら self.eta * (0 - 1) = -self.eta
43
+ target = -1, self.predict(xi) = 1 なら self.eta * (-1 - 1) = -2 self.eta
44
- target = 1, self.predict(xi) = 0 なら self.eta * (1 - 0) = self.eta
44
+ target = 1, self.predict(xi) = -1 なら self.eta * (1 - (-1)) = 2 self.eta
45
45
  target == self.predict(xi) なら0
46
46
  となります。なので、
47
47
 
48
48
 
49
49
  正解が0なのに予測が1と誤識別したら
50
- → self.w_[1:] = self.w_[1:] - self.eta * xi と更新
50
+ → self.w_[1:] = self.w_[1:] - self.eta * 2 * xi と更新
51
51
  正解が1なのに予測が0と誤識別したら
52
- → self.w_[1:] = self.w_[1:] + self.eta * xi
52
+ → self.w_[1:] = self.w_[1:] + self.eta * 2 * xi
53
53
  正解と予測が一致したら
54
54
  → self.w_[1:] = self.w_[1:] + 0 * xi = self.w_[1:] (つまり、更新しないのと同じ)
55
55
 

4

修正

2020/06/11 09:04

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -53,7 +53,4 @@
53
53
  正解と予測が一致したら
54
54
  → self.w_[1:] = self.w_[1:] + 0 * xi = self.w_[1:] (つまり、更新しないのと同じ)
55
55
 
56
- となっています。
56
+ となっています。
57
-
58
-
59
- w_new = update (target - self.predict(xi))

3

修正

2020/06/11 08:52

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -26,4 +26,34 @@
26
26
 
27
27
  ----
28
28
 
29
- これで1つのサンプルを正しく識別できるように分類超平面を調整したら、今まで正しく識別できていた他のサンプルが逆に誤識別するようになり、全部のサンプルを正しく識別できる重みが見つからないのではないかと心配になるかもしれませんが、線形識別可能 (超平面で2つのクラスのサンプルが完全に分離可能) なデータの場合、有限回の反復で収束する (すべてのサンプルを正しく識別できるようになる) ことが数学的に証明できます。
29
+ これで1つのサンプルを正しく識別できるように分類超平面を調整したら、今まで正しく識別できていた他のサンプルが逆に誤識別するようになり、全部のサンプルを正しく識別できる重みが見つからないのではないかと心配になるかもしれませんが、線形識別可能 (超平面で2つのクラスのサンプルが完全に分離可能) なデータの場合、有限回の反復で収束する (すべてのサンプルを正しく識別できるようになる) ことが数学的に証明できます。
30
+
31
+ ## 追記
32
+
33
+ > 質問のように、本のコードは```self.w_[1:] += update * xi```となっています。(誤植ではないと思います)
34
+ これでよい理由についてわかりませんか?
35
+
36
+ 回答では簡略化のために、学習率 self.eta = 1、バイアス self.w_[0] = 0 としましたが、「質問のコードの重み更新でやっていること」と、「上記回答のパーセプトロンの重みの更新」はやっていることは同じですよ。
37
+ 2次元データだとすると、重みは self.w_ = [b, w0, w1] とバイアス b と重み w0, w1 になりますよね。self.w_[1:] = [w0, w1] なので、
38
+
39
+ self.w_[1:] += update * xi
40
+ → self.w_[1:] += self.eta * (target - self.predict(xi)) * xi
41
+
42
+ ここで、self.eta * (target - self.predict(xi)) について考えると、ラベルが0, 1 の2クラスなら
43
+ target = 0, self.predict(xi) = 1 なら self.eta * (0 - 1) = -self.eta
44
+ target = 1, self.predict(xi) = 0 なら self.eta * (1 - 0) = self.eta
45
+ target == self.predict(xi) なら0
46
+ となります。なので、
47
+
48
+
49
+ 正解が0なのに予測が1と誤識別したら
50
+ → self.w_[1:] = self.w_[1:] - self.eta * xi と更新
51
+ 正解が1なのに予測が0と誤識別したら
52
+ → self.w_[1:] = self.w_[1:] + self.eta * xi
53
+ 正解と予測が一致したら
54
+ → self.w_[1:] = self.w_[1:] + 0 * xi = self.w_[1:] (つまり、更新しないのと同じ)
55
+
56
+ となっています。
57
+
58
+
59
+ w_new = update (target - self.predict(xi))

2

修正

2020/06/11 08:52

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -26,4 +26,4 @@
26
26
 
27
27
  ----
28
28
 
29
- これで1つのサンプルを正しく識別できるように分類超平面を調整したら、今まで正しく識別できていた他のサンプルが逆に誤識別するようになり、全部のサンプルを正しく識別できる重みが見つからないのではないかと心配になるかもしれませんが、線形識別可能 (超平面で2つのクラスのサンプルが完全に分離可能) なデータの場合、有限回の反復で収束することが数学的に証明できます。
29
+ これで1つのサンプルを正しく識別できるように分類超平面を調整したら、今まで正しく識別できていた他のサンプルが逆に誤識別するようになり、全部のサンプルを正しく識別できる重みが見つからないのではないかと心配になるかもしれませんが、線形識別可能 (超平面で2つのクラスのサンプルが完全に分離可能) なデータの場合、有限回の反復で収束する (すべてのサンプルを正しく識別できるようになる) ことが数学的に証明できます。

1

修正

2020/06/10 15:43

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -26,4 +26,4 @@
26
26
 
27
27
  ----
28
28
 
29
- これで1つのサンプルを正しく識別できるように分類超平面を調整したら、今まで正しく識別できていたのが逆に識別できくなったして、全部を正しく識別できる重みが見つからないのではないかと心配になるかもしれませんが、線形識別可能 (超平面で2つのクラスのサンプルが完全に分離可能) なデータの場合、有限回の反復で収束することが数学的に証明できます。
29
+ これで1つのサンプルを正しく識別できるように分類超平面を調整したら、今まで正しく識別できていたサンプルが逆に識別するようになり、全部のサンプルを正しく識別できる重みが見つからないのではないかと心配になるかもしれませんが、線形識別可能 (超平面で2つのクラスのサンプルが完全に分離可能) なデータの場合、有限回の反復で収束することが数学的に証明できます。