?? distance_abs_nor.m
字號:
function distance_abs_nor(filename,train_num,chara_num)
Temp_Data=xlsread(filename);
%好,在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:(chara_num+1));
%好的.現(xiàn)在開始訓(xùn)練了.我們的方法是從第一類的50個(gè)樣品中取出前20個(gè),然后把這20個(gè)樣品的特征平均一下,得到一個(gè)模板,這個(gè)模板就是優(yōu)等品的標(biāo)準(zhǔn)模板.
Template=zeros(3,chara_num); %這句話的意思是初始化三個(gè)標(biāo)準(zhǔn)模板,因?yàn)槊總€(gè)模板有10個(gè)特征,所以模板的大小是3*10
for ii = 1:3
Temp = Cork_Data((1+(ii-1)*50):(train_num+(ii-1)*50),:); %這個(gè)命令的意思就是取每一類的前20個(gè)樣品.
Template(ii,:) = mean(Temp); %這個(gè)命令其實(shí)有兩個(gè)功能,一是計(jì)算前20行的平均值(也就是優(yōu)等品的標(biāo)準(zhǔn)模板),另一個(gè)是把優(yōu)等品的模板存在Template的第一行中.
end
CorrectNum = 0; %初始化記錄判斷正確的計(jì)數(shù)器
%生成測試集,這個(gè)集里面有90個(gè)樣品
Test_Data = Cork_Data([(train_num+1:50),(train_num+1+50):100,(train_num+1+100):150],:);
%生成測試集的類別庫,也就是說,這里保存的是每個(gè)樣品的真實(shí)類別
Test_Class = Temp_Data([(train_num+1:50),(train_num+1+50):100,(train_num+1+100):150],1);
%開始進(jìn)行循環(huán)測試
test_num=(150-3*train_num);
for ii = 1:test_num
Sum =zeros(3,1); %因?yàn)橛欣奂拥倪^程,所以先初始化記錄累加和的變量
Sample = Test_Data(ii,:); %Sample代表當(dāng)前待測目標(biāo),取第21個(gè)樣品的特征
for jj=1:3
Sum(jj,1)=sum(abs(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/test_num
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -