質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Octave

Octaveは、数値解析のための高レベルのプログラミング言語です。主に理工系の技術者・研究者が使用しており、フリーで使うことが可能。線形もしくは非線形問題を数値的に解くCLIを提供します。

Q&A

0回答

841閲覧

最大事後確率則によるパターン認識

katkey

総合スコア15

Octave

Octaveは、数値解析のための高レベルのプログラミング言語です。主に理工系の技術者・研究者が使用しており、フリーで使うことが可能。線形もしくは非線形問題を数値的に解くCLIを提供します。

0グッド

0クリップ

投稿2021/07/28 13:33

前提・実現したいこと

手書き文字認識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);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問