私はPythonとNumpyを使ってパーセプトロンを実装しています。 this Wikipedia articleに記載されているアルゴリズムを使用してトレーニングしていますが、結果のウェイトベクトルは、トレーニングセットのものではなくサンプルベクトルを正しく分類しません。パーセプトロンの誤分類エラー
私が書いたこのトレーニングコード:
:としてtraining_set = np.array([[0,0],[0,1],[1,0],[1,1]])
とそれに対応するクラスラベル:この後
epochs = 50
unit_step = lambda x: 0 if x < center else (0.5 if x == center else 1)
def train(data_set, labels):
number_of_samples, dimension = data_set.shape
# Generate the augmented data set, adding a column of '1's
augmented_data_set = np.ones((number_of_samples, dimension + 1))
augmented_data_set[:,:-1] = data_set
w = 1e-6 * np.random.rand(dimension + 1)
for _ in xrange(epochs):
for sample, target in zip(augmented_data_set, labels):
predicted_output = unit_step(np.dot(w, sample))
update = (target - predicted_output) * sample
w += update
return w
を私はトレーニングのように設定を通りAND論理機能を学ぶためにnecesaryベクトルを設定しました
labels = np.array([-1,-1,-1,1])
ここで、-1はFalseを表し、1はTrueを表します。
w = train(training_set, labels)
を実行した後、私は結果の重みベクトルをテストし、この誤った結果だ:ここでエラーがあることである
np.dot(w, [0,0,1]) = -1.0099996334232431
np.dot(w, [0,1,1]) = -1.0099991616719257
np.dot(w, [1,0,1]) = -1.009999277692496
np.dot(w, [1,0,1]) = -1.009999277692496
を最後のケースはvaを返すべきです私は明確にここで何が起こっているのか分かりません。私は何が欠けていますか?事前
コードに関係なく、パーセプトロンはトレーニング入力に基づいて統計モデルを作成します。トレーニングデータで100%正しいとは思わないでください。あなたのケースでは、私はエポックの数を増やそうとします。パーセプトロンがそのような小さなトレーニングセットに収束するのにどれくらいの時間がかかるか分かりません。 – alexis