前提・実現したいこと
手書き文字認識USPSからtxtdataを取り出してパターン認識を行いたいです。
(以下のURLのzipファイルからテキストファイルが取り出せます)
URL:http://web.tuat.ac.jp/~s-hotta/ss2008/
パターンが0~9の10個あるので、それぞれについて正規分布を利用した最大事後確率則を用いてパターン識別を行い、
パターンごとの混同行列を出力する関数を作成しています。
以下のプログラムのように作成したのですが、行列のサイズが違うとなりエラーになってしまいます。
これを訂正するにはどのようにしたらよいでしょうか?
発生している問題・エラーメッセージ
error: step5: =: nonconformant arguments (op1 is 1x1, op2 is 256x0) error: called from step5 at line 8 column 10
該当のソースコード
octave
1clear all;,close all; 2D=load('./USPS/trai_data.txt');, trai_label=load('./USPS/trai_label.txt'); 3Q=load('./USPS/test_data.txt');, test_label=load('./USPS/test_label.txt'); 4%% Dim:次元数 xx_num:データ数 5[Dim,trai_num]=size(D);,[Dim,test_num]=size(Q); 6trai_num=trai_num/10; 7for j=0:9 8 Tr(j+1)=D(:,find(trai_label=j)); 9% 最尤推定量の算出 10 m(j+1)=mean(Tr(j+1),2);, S(j+1)=(Tr(j+1)*Tr(j+1)')./trai_num-m(j+1)*m(j+1)'; 11 b(j+1)=(2.*pi).*sqrt(det(S(j+1)));, b(j+1)=1./b(j+1); 12 iS(j+1)=inv(S(j+1)); 13end 14SUM=zeros(10,1);, CONF=zeros(10,10); 15tic 16for ii = 1 : test_num 17 for j=0:9, SUM(j+1)=b(j+1).*exp(-0.5.*Q(:,ii)-m(j+1))'*iS(j+1)*(x(:,ii)-m(j+1));, end 18 [value index]=max(S); 19 CONF(test_label(ii)+1,index)=CONF(test_label(ii)+1,index)+1; 20end 21toc 22CONF 23accuracy=(sum(diag(CONF)).test_num).*100; 24fprintf('accuracy=%3.2f\n',accuracy);
あなたの回答
tips
プレビュー