2016-10-30 19 views
0

私は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を返すべきです私は明確にここで何が起こっているのか分かりません。私は何が欠けていますか?事前

+0

コードに関係なく、パーセプトロンはトレーニング入力に基づいて統計モデルを作成します。トレーニングデータで100%正しいとは思わないでください。あなたのケースでは、私はエポックの数を増やそうとします。パーセプトロンがそのような小さなトレーニングセットに収束するのにどれくらいの時間がかかるか分かりません。 – alexis

答えて

0

最も明白な誤りで

おかげでトレーニングセットのラベル間の統一の欠如である(-1〜1)とどのようなあなたのモデル出力(0、0.5および1.0)。 0と1の両方に変更してください。

+0

それを指摘してくれてありがとう。それは問題を解決した。 – tulians

関連する問題