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

📄 pca_parzen_hypercube.m

📁 用mushrooms数据对模式识别课程讲述的各种模式分类方法[线性分类
💻 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=16;%降维后的维数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  %进行五次实验    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    %将样本分为测试样本,第一类训练样本,第二类训练样本    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    p = randperm(2000);%对1:2000的整数随机排序    experiment_test=dimenReduct_samples(p(1:500),:);%测试样本    exper_test=experiment_test(:,2:end);%测试样本,不带标签    experiment_train=dimenReduct_samples(p(501:2000),:);%训练样本    index1=find(experiment_train(:,1)==1);%找到训练样本中第一类的行号    index2=find(experiment_train(:,1)==2);%找到训练样本中第二类的行号    exper_train_class1=experiment_train(index1,2:end);%训练样本里属于第一类的样本,不带标签    exper_train_class2=experiment_train(index2,2:end);%训练样本里属于第二类的样本,不带标签    [m n]=size(exper_test);    [m1 n1]=size(exper_train_class1);    [m2 n2]=size(exper_train_class2);    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    %计算类条件概率密度    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    %计算P(x/wi)=k/(nV)    %取边长hn=1的d=10维超立方体    %首先计算落入每个待测样本点的超立方体的点的个数    hn=1;    V=hn^n;    K1=zeros(m,1);%记录第一类训练样本落入待测样本的超立方体的点的个数    K2=zeros(m,1);%记录第二类训练样本落入待测样本的超立方体的点的个数    R1=zeros(m,1);%记录待测样本在第一类的测试结果    R2=zeros(m,1);%记录待测样本在第二类的测试结果    Result=zeros(m,1);%记录最后分类结果    %先算第一类    for i=1:m%对每个待测样本        for j=1:m1%检测每个训练样本            flag=0;            for k=1:n%检查每个分量abs(xi)<(hn/2),如果都小于则待测样本落入超立方体                if(abs(exper_test(i,k)-exper_train_class1(j,k))<(hn/2))                    flag=flag+1;                end            end            if flag==n                    K1(i,1)=K1(i,1)+1;            end        end        R1(i,1)=K1(i,1)/(n*V);    end    %再算第二类    for i=1:m%对每个待测样本        for j=1:m2%检测每个训练样本            flag=0;            for k=1:n%检查每个分量abs(xi)<(hn/2),如果都小于则待测样本落入超立方体                if(abs(exper_test(i,k)-exper_train_class2(j,k))<(hn/2))                    flag=flag+1;                end            end            if flag==n                    K2(i,1)=K2(i,1)+1;            end        end        R2(i,1)=K2(i,1)/(n*V);    end    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    %画类条件概率密度图,并分类    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    %绘图    plot(R1,'-r','LineWidth',2);    hold on;    plot(R2,'-b','LineWidth',2);    xlabel ('待测样本');     ylabel ('类条件概率密度 P(x|wi)');    title ('类条件概率密度图');    %分类    for i=1:m        if R1(i,1)>R2(i,1)            Result(i,1)=1;        else            Result(i,1)=2;        end    end    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    %分析结果    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    [correct(w,1),error(w,1),ROC(w,:)] = analyse_result(experiment_test,Result);end%将结果放到一个数组中,便于观察数据correct = correct';error = error';ROC = ROC';result = [correct;error;ROC]result = result';

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -