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';