?? cork_ma.asv
字號:
Temp_Data=xlsread('cork.xls');
%好,在Temp_Data里,第一列是樣品的類別,第2列到第11列是樣品的特征,也就是說,一個(gè)樣品用10個(gè)特征來描述。
%因此,我們要從Temp_Data里讀出第2列到第11列的數(shù)據(jù),并把它保存在另一個(gè)矩陣Cork_Data里.Cork_Data的大小是150行10列.
%這個(gè)命令也由你們來寫.提示:Cork_Data其實(shí)是Temp_Data的所有行,第2到第11列.
Cork_Data = Temp_Data(:,2:11);
Temp1=max(Cork_Data);
Temp2=min(Cork_Data);
Temp3=Temp1-Temp2;
%好的.現(xiàn)在開始訓(xùn)練了.我們的方法是從第一類的50個(gè)樣品中取出前20個(gè),然后把這20個(gè)樣品的特征平均一下,得到一個(gè)模板,這個(gè)模板就是優(yōu)等品的標(biāo)準(zhǔn)模板.
Template=zeros(3,10); %這句話的意思是初始化三個(gè)標(biāo)準(zhǔn)模板,因?yàn)槊總€(gè)模板有10個(gè)特征,所以模板的大小是3*10
for ii = 1:3
Temp = Cork_Data(1+(ii-1)*50:20+(ii-1)*50,:); %這個(gè)命令的意思就是取每一類的前20個(gè)樣品.
%標(biāo)準(zhǔn)化
for k=1:20
Temp(k,:)=Temp(k,:)./Temp3;
end
Template(ii,:) = mean(Temp); %這個(gè)命令其實(shí)有兩個(gè)功能,一是計(jì)算前20行的平均值(也就是優(yōu)等品的標(biāo)準(zhǔn)模板),另一個(gè)是把優(yōu)等品的模板存在Template的第一行中.
end
C=zeros(10,10,3);
%計(jì)算第一類的協(xié)方差矩陣
for ii =1:3
Temp = Cork_Data(1+(ii-1)*50:20+(ii-1)*50,:);
Temp1=max(Temp);
Temp2=min(Temp);
Temp3=Temp1-Temp2;
for k=1:20
Temp(k,:)=Temp(k,:)./Temp3;
end
for k=1:20
xx=Temp(k,:); %xx表示的是第一個(gè)樣品
C(:,:,ii)=C(:,:,ii)+(xx-Template(ii,:))'*(xx-Template(ii,:));
end
C(:,:,ii)=C(:,:,ii)/19;
C(:,:,ii)=inv(C(:,:,ii));
end
%參考第36頁公式(2-19)
CorrectNum = 0; %初始化記錄判斷正確的計(jì)數(shù)器
for ii = 1:90
Sum =zeros(3,1); %因?yàn)橛欣奂拥倪^程,所以先初始化記錄累加和的變量
Sample = Test_Data(ii,:); %Sample代表當(dāng)前待測目標(biāo),取第21個(gè)樣品的特征
Temp1=max(Temp);
Temp2=min(Temp);
Temp3=Temp1-Temp2;
for k=1:20
Temp(k,:)=Temp(k,:)./Temp3;
end
for jj=1:3
Sum(jj,1)=(Sample-Template(jj,:))*C(:,:,jj)*(Sample-Template(jj,:))'; %矩陣是可以對分別進(jìn)行計(jì)算的,所以一次性就能得到對應(yīng)的結(jié)果.MATLAB認(rèn)大小寫,所以Sum和sum是兩碼事.
end
%Sum是三行一列,我們來比較哪個(gè)數(shù)小,并得到最小那個(gè)數(shù)的索引號.
[Result,I] = min(Sum); %Result是最小的那個(gè)數(shù),我們其實(shí)是用不到的,就看I,它表示是哪個(gè)數(shù)是小.
if I==Test_Class(ii,1) %Temp_Data(21,1)表示第21個(gè)樣品的真實(shí)類別,如果二者相等,表明計(jì)算機(jī)判斷正確.
CorrectNum = CorrectNum + 1;
end
end
disp('用馬氏距離法的識別率:');
CorrectNum/90
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -