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