⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cork_abs_1.asv

📁 用matlab实现的几种模式识别的方法
💻 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 + -