gusucode.com > ​用mushrooms数据对模式识别课程讲述的各种模式分类方法matlab源码程序 > pattern-recognition-simulation/liner.m

    clc;
clear;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%读取数据,取16个特征
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
samples = textread('data2000.txt');
samples = samples(:,[1:6,9:15,19:22]);  %17列 第1列标号,16列特征

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%对样本进行归一化处理
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[ms ns]=size(samples);
TMax=max(samples);
TMin=min(samples);
% 第一列是样本标签,从第二列开始归一化
for i=2:ns
    samples(:,i)=(samples(:,i)-TMin(i))/(TMax(i)-TMin(i));
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%使用随机下采样(random subsampling)的方法对,将样本分为测试样本,第一类训练样本,第二类训练样本
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
p = randperm(2000);%对1:2000的整数随机排序
experiment_test=samples(p(1:500),:);%测试样本
exper_test=experiment_test(:,2:ns);%测试样本,不带标签
experiment_train=samples(p(501:2000),:);%训练样本
index1=find(experiment_train(:,1)==1);%找到训练样本中第一类的行号
index2=find(experiment_train(:,1)==2);%找到训练样本中第二类的行号
exper_train_class1=experiment_train(index1,2:ns);%训练样本里属于第一类的样本,不带标签
exper_train_class2=experiment_train(index2,2:ns);%训练样本里属于第二类的样本,不带标签

[m n]=size(exper_test);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%计算每个待测样本到每个训练样本类的Mahalanobis 距离
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
R1=mahal(exper_test,exper_train_class1);
R2=mahal(exper_test,exper_train_class2);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%分类
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%分类,
for j=1:m
    if R1(j,1)<=R2(j,1)
        Result(j,1)=1;
    else
        Result(j,1)=2;
    end
end
    
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%分析结果 ,计算准确率, 错误率, 敏感性, 特异性,误判率,漏判率
%   准确率:(有毒的(1)判断为有毒(1)+可食的(2)判断为可食(2))/测试样本总数(500)
%   错误率:1-准确率
%   敏感性:蘑菇有毒(1),且判为有毒(1) 
%   特异性:蘑菇可食(2),且判为可食(2)
%   误判率:实际可食(2),但判为有毒(1)
%   漏判率:实际有毒(1),但判为可食(2)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[correct,error,ROC] = analyse_result(experiment_test,Result);