私はあなたが、バイアスBが欠落していると言うでしょう...
あなたはそれを追加した場合、それは見事に収束します。

import numpy as np
import matplotlib.pyplot as py
np.random.seed(42)
w = np.random.rand(2)
b = 0
errors = []
eta = .2
n = 10
for i in range(n):
for x, y in training_set:
u = np.sum(x*w)+b
error = y - activation_function(u)
errors.append(error)
for index, value in enumerate(x):
#print(index, " ", value)
w[index] += eta * error * value
b += eta*error
から来たその機能はどこ私が知っているように私は、いくつかのより合理的な名前で異なっあなたよりもライブラリをインポート注...それはあなたを助けている場合、私に教えてください...
これは分類の結果です。私は色が意味をなさないことを願って... REdと青は一見派手なものですが、あなたはそのアイディアを得ます。この問題に対する無限の解を見つけることができます。ランダムシードを変更すると、ポイントを線形に分離する別のラインが得られます。

あなたは(0,0)を通るあなたのラインを持っている場合、あなたの予測が間違っているものの、重みは、この特定のポイントのためにvalue=0
以降に更新されませんので、また、あなたのアルゴリズムは収束しません。だから問題はあなたのアップデートが何もしないということです。それがエラーの振動の原因です。
EDIT私は、クラシファイアの決定境界を描く方法の例を示す小さなチュートリアル(Jupyterノートブック)を作成しました。あなたはgithubの
githubのリポジトリにそれを見つけることができます:https://github.com/michelucci/python-Utils
は、それが有用であると思います。
EDIT 2:そして、あなたは、迅速かつ非常に汚いバージョン(私は赤と青でプロットするために使用されるものを)したい場合は、ここでのコード
lim = 3.0
X1 = [x1 for x1 in np.arange(-lim,lim,0.1)]
X2 = [x2 for x2 in np.arange(-lim,lim,0.1)]
XX = [(x1,x2) for x1 in np.arange(-lim,lim,0.1) for x2 in np.arange(-lim,lim,0.1)]
Xcolor = ["blue" if np.sum(w[0]*x1+w[1]*x2)+b > 0 else "red" for x1 in X1 for x2 in X2]
x,y = zip(*XX)
py.scatter(x,y, c = Xcolor)
py.scatter(0,0, c = "black")
py.scatter(1,0, c = "white")
py.scatter(0,1, c = "white")
py.scatter(1,1, c = "white")
py.show()
であるあなたが、ここでのコードを投稿してくださいでした決定境界?あなたの優れた説明をありがとう! –
こんにちは私は決定境界を描く方法についてのチュートリアルを書いています。お楽しみください:)それはあなたを助けるかどうか私に教えてください。 – Umberto