📄 cork_abs_1.asv
字号:
function distance_abs_apt(file_train,file_)
Temp_Data=xlsread('cork_train.xls');
%好,在Temp_Data里,第一列是样品的类别,第2列到第11列是样品的特征,也就是说,一个样品用10个特征来描述。
%因此,我们要从Temp_Data里读出第2列到第11列的数据,并把它保存在另一个矩阵Cork_Data里.Cork_Data的大小是150行10列.
%这个命令也由你们来写.提示:Cork_Data其实是Temp_Data的所有行,第2到第11列.
Cork_Data = Temp_Data(:,2:11);
%好的.现在开始训练了.我们的方法是从第一类的50个样品中取出前20个,然后把这20个样品的特征平均一下,得到一个模板,这个模板就是优等品的标准模板.
Template=zeros(3,10); %这句话的意思是初始化三个标准模板,因为每个模板有10个特征,所以模板的大小是3*10
for ii = 1:3
Temp = Cork_Data(1+(ii-1)*20:20+(ii-1)*20,:); %这个命令的意思就是取每一类的前20个样品.
Template(ii,:) = mean(Temp); %这个命令其实有两个功能,一是计算前20行的平均值(也就是优等品的标准模板),另一个是把优等品的模板存在Template的第一行中.
end
CorrectNum = 0; %初始化记录判断正确的计数器
%生成测试集,这个集里面有90个样品
Temp_Data = xlsread('cork_recog.xls');
Test_Data = Temp_Data(:,2:11);
%生成测试集的类别库,也就是说,这里保存的是每个样品的真实类别
Test_Class = Temp_Data(:,1);
%开始进行循环测试
for ii = 1:90
Sum =zeros(3,1); %因为有累加的过程,所以先初始化记录累加和的变量
Sample = Test_Data(ii,:); %Sample代表当前待测目标,取第21个样品的特征
for jj=1:3
Sum(jj,1)=sum(abs(Sample-Template(jj,:))); %矩阵是可以对分别进行计算的,所以一次性就能得到对应的结果.MATLAB认大小写,所以Sum和sum是两码事.
end
%Sum是三行一列,我们来比较哪个数小,并得到最小那个数的索引号.
[Result,I] = min(Sum); %Result是最小的那个数,我们其实是用不到的,就看I,它表示是哪个数是小.
if I==Test_Class(ii,1) %Temp_Data(21,1)表示第21个样品的真实类别,如果二者相等,表明计算机判断正确.
CorrectNum = CorrectNum + 1;
end
end
%上面这是绝对值距离法
disp('用绝对值距离法的识别率:');
CorrectNum/90
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -