2013-10-07 74 views
0

分類與四類我有四個班輸入vector.The四班的分類問題是通過MATLAB

A = [1 , 1; 1 ,2]; 
B = [2,2; -1,0]; 
C = [-1,-2;2,1]; 
D = [-1,-2; -1,-2]; 

我婉落實Matlab的這個問題,我用這個代碼:

C = [-1,-2;2,1]; 
A = [1 , 1; 1 ,2]; 
B = [2,2; -1,0]; 
D = [-1,-2; -1,-2]; 

hold on 
grid on 

plot(A(1,:),A(2,:),'bs') 
plot(B(1,:),B(2,:),'r+') 
plot(C(1,:),C(2,:),'go') 
plot(D(1,:),D(2,:),'m*') 
a = [0 1]'; 
b = [1 1]'; 
c = [1 0]'; 
d = [0 0]'; 
P = [A B C D]; 

T = [repmat(a,1,length(A)) repmat(b,1,length(B)) repmat(c,1,length(C)) repmat(d,1,length(D)) ]; 
net = perceptron; 
E = 1; 
net.adaptParam.passes = 1; 
linehandle = plotpc(net.IW{1},net.b{1}); 
n = 0; 
while (sse(E)) 
n = n+1; 
[net,Y,E] = adapt(net,P,T); 
linehandle = plotpc(net.IW{1},net.b{1},linehandle); 
drawnow; 
end 

但我的代碼一點兒也不工作,我不知道爲什麼,請幫助我....

+0

什麼不行?你的錯誤是什麼?結果與預期結果有何不同? – thewaywewalk

+0

while循環永遠不會完成! – user2853483

+0

你的while循環取決於錯誤標誌'E',它是adapt函數的輸出。但是你永遠不會改變它的輸入,所以while循環一遍又一遍地做同樣的事情。 – thewaywewalk

回答

0

如已提出通過thewaywewalk,麻煩的是你的while -loop和事實ŧ您無法爲您希望評估的聲明提供足夠的檢查。
與這兩條線替換您while語句來:

ACCEPTABLE_ERROR = 3.0; 
while (sse(E)>ACCEPTABLE_ERROR) 

,你應該看到經過三次迭代腳本終止。您可以玩ACCEPTABLE_ERROR變量來檢查哪種解決方案最適合您。如果將其設置得太小,則while循環將不會退出,因爲該語句不會是錯誤的。


的理由,以你原來while語句來:
你曾經評估,如果sse(e)返回的結果全部 - 它在每一種情況下做到了。這就是爲什麼它從未停止。


sse問題需要不止一個輸入變量:
這取決於你提供什麼樣的輸入參數。
The documentation說:

PERF = SSE(淨,T,Y,EW)取這些輸入參數和可選的函數的參數,

淨:神經網絡
T:目標的矩陣或單元陣列矢量
Y:錯誤權重(缺省值= {1})

並返回誤差平方和:輸出向量
EW的矩陣或單元陣列。

然而,這是沒有必要的,提供錯誤的權重,ew,作爲源代碼顯示:

只需要前三個參數。默認錯誤權重是{1},它平等地加權所有目標的重要性。

在你的情況,你應該,基於文檔,請撥打sse這樣的:

sse(net,T,Y) 

沒有在文件中被提及(或者我還沒有找到它),這相當於對你做了什麼,通過從adapt提供提供簡單的網絡錯誤,E

sse(E) 

兩個給出相同的結果。

+0

@ user2853483這個回答對您有幫助嗎?如果是這樣,考慮接受它。如果不是,請評論剩餘的問題。 – Schorsch