gusucode.com > ​用mushrooms数据对模式识别课程讲述的各种模式分类方法matlab源码程序 > pattern-recognition-simulation/pca_KNN2.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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%对样本进行降维,PCA变换
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
k_reduction=2;%降维后的维数
cov_data=cov(samples(:,2:end));
[pc,latent,explained] = pcacov(cov_data);
pc1=pc(:,1:k_reduction);
pc1=pc1';
y=pc1*samples(:,2:end)';
y = [samples(:,1)';y];
dimenReduct_samples = y';%带标签

for w = 1:5  %进行五次实验
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%将样本分为测试样本,训练样本1,训练样本2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
p = randperm(2000);%对1:2000的整数随机排序
experiment_test=dimenReduct_samples(p(1:500),:);%测试样本
experiment_train1=dimenReduct_samples(p(501:1250),:);%训练样本1
experiment_train2=dimenReduct_samples(p(1251:2000),:);%训练样本2

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 以训练样本1作为训练样本,对训练样本2进行剪辑。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
result_class=KNN_function(experiment_train1,experiment_train2,10);
columnindex = find(experiment_train2(:,1)==result_class);
experiment_train = experiment_train2(columnindex,:);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 以剪辑后的训练样本experiment_train作为训练样本,对训练样本experiment_test进行测试。
%并分析测试结果
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%进行测试
result_class=KNN_function(experiment_train,experiment_test,10);
%分析结果
    [correct(w,1),error(w,1),ROC(w,:)] = analyse_result(experiment_test,result_class);
end

%将结果放到一个数组中,便于观察数据
correct = correct';
error = error';
ROC = ROC';
result = [correct;error;ROC];
result = result';