2016-12-23 11 views
0

MLを学び、単層ニューラルネットワークを作成しようとしていました。学習の部分は完全に進んでいます。残念ながら、私はどのように結果ウェイトsyn0を使用して、x_testのテストケースに対する答えを予測できるのか理解できません。ここでML予測アルゴリズムに問題がある

はコードです:

import numpy as np 

def nonlinear(x, deriv = False): 
    if(deriv==True): 
     return x*(1-x) 

    return 1/(1+np.exp(-x)) 

def predict(x_test, y_test, ss): 
    prediction = nonlinear(np.abs(np.dot(x_test,ss))) 
    error = np.mean(np.abs(y_test - prediction)) 
    print("P:",prediction,"\nE:",error) 

x = np.array([[1,0,1], 
       [0,1,1], 
       [0,1,0], 
       [1,1,1]]) 

y = np.array([[1], 
       [0], 
       [0], 
       [0]]) 

x_test = np.array([[1,0,0], 
        [1,0,1], 
        [0,1,1], 
        [0,1,0]]) 

y_test = np.array([[1], 
        [1], 
        [0], 
        [0]]) 

np.random.seed(1) 

syn0 = 2*np.random.random((3,1)) - 1 

for _ in range(100000): 

    l0 = x 
    l1 = nonlinear(np.dot(l0, syn0)) 

    l1_error = y - l1 

    if (_%10000) == 0: 
     print("Error at Gen",_,":", str(np.mean(np.abs(l1_error)))) 
     print(l1) 

    l1_delta = l1_error * nonlinear(l1, deriv = True) 

    syn0 += l0.T.dot(l1_delta) 

print(syn0) 

predict(x_test, y_test, syn0) 

私は本当に任意の助けをいただければ幸いです。ありがとう!

P.S.してくださいStackOverflowによると、この質問をd​​ownvoteしないでください、私はより多くの私の答えdownvoted得る質問をブロックされます。私がこれを改善できるのか、それとも重複しているのかを教えてください。私は、ここの驚くべき心のすべてからそんなに多くを学ぶ特権を失うことが嫌いです。

+0

は、あなたが何を意味するthisウェブサイトがお勧め、あなたの問題はより多くの実装で数学と少ないとあったと思いますか? 'predict(x_test、y_test、syn0)'を呼んでいる最後の行ですでに起こっています。その関数はあなたの予測と 'x_test'のエラーを出力します – plumSemPy

+0

しかし、予測はオフです。エラーは常に1のスケールでほぼ0.5であり、すべての予測はほぼ1です。 –

答えて

1

あなたの予測関数には、絶対値を含めるべき理由はありません。これはsoftmax関数AFAIKの一部ではありません。私は次のように変更しました:

def predict(x_test, y_test, ss): 
    prediction = nonlinear(np.dot(x_test,ss)) 
    error = np.mean(np.abs(y_test - prediction)) 
    print("P:",prediction,"\nE:",error) 

これは問題を修正し、私は完璧な予測を受けました。 [0.9,0.9,0.0,0.0]。あなたが気づく必要があると思うのは、あなたの応答変数がラベル、すなわち0と1であるということです。あなたのモデルは確率を返します。エラーのヒューリスティックは問題ありませんが、個人的には分類器のパフォーマンスを確認するために、私は切り捨てたいと思っています。私。私は予測が終わった後、確率0.5以上のものはラベル1であり、確率0.5未満のものはラベル0です。

これは、モデルIMOの精度をより良く測定できますが、ラベルがよく分かれているときに本当にうまく動作し、分類子が自信を持っているという連続誤差測定のメリットがわかります。

私はあなたが、ニューラルネットワークについての詳細をお知りになりたい場合は、私が