您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > 西安交大-模式识别-基于IRIS的PCA与KPCA算法
一、PCA1.1实验目的练习PCA算法,对IRIS数据进行主成分分析以降低数据维数,对IRIS数据各维贡献进行讨论。1.2实验原理1.2.1PCAPCA运算就是一种确定一个坐标系统的直交变换,在这个新的坐标系统下,变换数据点的方差沿新的坐标轴得到了最大化。这些坐标轴经常被称为是主成分。PCA运算是一个利用了数据集的统计性质的特征空间变换,这种变换在无损或很少损失了数据集的信息的情况下降低了数据集的维数。PCA的主要步骤如下:设训练样本集Tnxxxx],...,,[21=,均值)(xEx=。协方差]))([(TxxxxxEc−−=为是对称阵,可用来分解为TxUUDcλ=,其中IUUUUTT==−,1,==nndiagDλλλλλλλ00000.0],...,,[2121,且021≥≥≥≥nλλλ矩阵U可以写成],,,[21nUφφφ=,其中Tiniii],,,[21φφφφ=是列向量,λλUDUUUDUcTx==,得λφφφφφφDcnnx],...,,[],...,,[2121=选取较大的k个特征值所对应的特征向量(主成分)组成变换矩阵*U,对测试数据进行变换,变换后的新模式向量为*testYXU=,降低了数据维数,最后再对向量Y进行分类。各主成分的的累积贡献率定义为:11kniiiiλλ==∑∑我们进行主成分分析的目的之一就是希望利用尽可能少的主成分来代替原来的n个指标,在实际中需要根据具体情况具体分析。1.2.2K-means聚类本文在完成PCA分析之后,使用K-means聚类算法对测试数据进行分类,并采用基于人工标注簇的F值来评价聚类效果的优劣。K-means聚类算法具体步骤与F值的计算方法详见实验报告3,此处不再赘述。1.3实验结果与分析在IRIS数据中随机抽取30个样本作为训练数据,另外120个样本作为测试数据。在K-means聚类时,在测试数据中随机选取三个样本作为初始聚类中心。在某一单次试验中分解所得的特征值为[]2.8242,0.9976,0.1577,0.0206可以明显看出,第一个特征值明显大于其他特征值,该特征值所对应的主成分对数据分类起了最主要的辨识作用。因为每次实验的训练样本是从全体数据集中随机抽取的,而且K-means聚类的初始聚类中心也是随机抽取的,这两个因素都有可能对最终的聚类结果造成影响。所以,仅凭一次实验难以看出PCA效果的优劣。因此,对同样参数的实验进行200次MonteCarlo实验,通过计算聚类效果的平均Class_F值来评价PCA效果的优劣。选择全部4个主成分时(评价三类数据分类效果的平均F值分别为F1,F2,F3,整体的平均F值为Class_F)累计贡献率F1F2F3Class_F10.93300.77550.78730.8319选择特征值大的前3个主成分时累计贡献率F1F2F3Class_F0.99530.92460.76860.77390.8223选择特征值大的前2个主成分时累计贡献率F1F2F3Class_F0.95940.93850.77870.78570.8343选择特征值大的前1个主成分时累计贡献率F1F2F3Class_F0.73010.95930.80120.81490.8585从以上数据可以看出降维之后聚类效果没有明显的下降,反而有所提高。这可能和我采用的聚类方法有关,因为K-means聚类方法是一种基于距离的聚类方法,而数据集中有些主成分可能不利于数据分类,因此降维之后聚类效果反而提高了。从之前的单次实验中可以看出,第一个特征值明显大于其他特征值,为了验证该特征值对应的主成分所含的数据信息量最大,对分类起到了最主要作用。我抛弃这个主成分,使用其他三个主成分对数据进行聚类,聚类结果如下:累计贡献率F1F2F3Class_F0.26670.94520.67840.70870.7774可见,聚类结果错误率较高,因此,该主成分包含了大部分数据信息,不能被去掉。只使用第二个特征值所对应的主成分进行聚类,聚类结果如下:累计贡献率F1F2F3Class_F0.22320.48890.46720.56750.5079只使用第三个特征值所对应的主成分进行聚类,聚类结果如下:累计贡献率F1F2F3Class_F0.03490.63000.46880.55770.5521只使用第四个特征值所对应的主成分进行聚类,聚类结果如下:累计贡献率F1F2F3Class_F0.00460.94040.75390.74100.8117由以上数据可以看出,虽然第四个特征值最小,但使用第四个特征值所对应的主成分进行聚类时,聚类效果却相对较好,仅次于使用第一个特征值所对应的主成分进行聚类。这说明,特征值较大的主成分所对应的数据信息较多只是一种趋势,并不是绝对得贡献率越大聚类效果就越好,贡献率越小聚类效果就越不好。对训练数据个数进行改变,采用前2个主成分进行主成分分析,实验结果如下:训练数据个数10305070100Class_F值0.83390.83120.82700.83580.8319由实验结果可见,训练数据的个数与主成分分析的效果没有明显关系。1.4程序实现%Auther:XXX%StudentNumber:XXX%Date:2014.5.20.%Purpose:PractiseofPCAcloseall;clearall;clc;%数据导入iris_dataset=load('iris_dataset.txt');%导入iris数据集x=iris_dataset;%样本%给数据添加类别标签label=[ones(50,1);ones(50,1)*2;ones(50,1)*3];iris_dataset=[iris_dataset,label];%给定聚类数目k=3;MonteCarlo=200;FF_MC=0;%各类的MonteCarlo平均F值F_final_MC=0;%MonteCarlo平均F值E_MC=0;%累积贡献率forr=1:MonteCarlorun=r%选择训练数据num_train=30;%训练数据个数n=randperm(150);x_train(1:num_train,:)=x(n(1:num_train),:);%训练集,不带类别标签%非训练数据为测试样本x_test(1:150-num_train,:)=iris_dataset(n(num_train+1:150),:);%测试集,带类别标签num_test=zeros(1,3);%存储测试集中各类样本的数目fori=1:3index=find(x_test(:,5)==i);num_test(i)=length(index);end%PCA—主成分分析[U,D,E]=PCA(x_train);%U为特征向量,D为特征值,E为累计贡献率%D%累计贡献率%disp('累计贡献率为:E=');E_MC=E_MC+E;%对测试样本做线性变换,y_test不带类别标签y_test=x_test(:,1:4)*U;%随机选取3个初始聚类中心n=randperm(150-num_train);center(1,:)=y_test(n(1),:);center(2,:)=y_test(n(2),:);center(3,:)=y_test(n(3),:);%调用K-means函数[class,num,center]=kmeans(y_test,k,center);%调用K-均值函数%统计聚类效果%result(i,j)代表第i类数据被聚类至第j簇的数量result=zeros(k,k);fori=1:3index=find(class==i);forj=1:length(index)forp=1:3ifx_test(index(j),5)==presult(p,i)=result(p,i)+1;endendendend%计算准确率,召回率,F值%P(i,j)代表第i类数据与第j簇相应的准确率%R(i,j)代表第i类数据与第j簇相应的召回率fori=1:3forj=1:3P(i,j)=result(i,j)/num(j);R(i,j)=result(i,j)/num_test(i);F(i,j)=2*P(i,j)*R(i,j)/(P(i,j)+R(i,j));endendF;%F(i,j)代表第i类数据与第j簇相应的F值FF=max(F,[],2);%FF(i)代表第i类数据的F值FF_MC=FF_MC+FF;F_final=mean(FF);%整个聚类结果的F值F_final_MC=F_final_MC+F_final;enddisp('200次MonteCarlo后,所选主成分的平均累积贡献率为');E_MC=E_MC/MonteCarlodisp('200次MonteCarlo后,各类数据的F均值为');FF_MC=FF_MC/MonteCarlodisp('200次MonteCarlo后,整体的F均值为');F_final_MC=F_final_MC/MonteCarlo%PCA算法函数function[U_hat,D,E]=PCA(x)x=zscore(x);%数据标准化[n,d]=size(x);%n为样本个数,d为向量维数Cx=cov(x);%训练样本协方差矩阵%训练样本特征向量矩阵U与特征值D%因为Cx为对阵矩阵,所以D按照从小到大排列[U,D]=eig(Cx);%按特征值从大到小排列fori=1:4U_1(:,i)=U(:,5-i);D_1(i,i)=D(5-i,5-i);endU=U_1;D=D_1;%计算所有特征值得和E_all=0;fori=1:4E_all=E_all+D(i,i);end%选择需要的向量,计算选取特征向量对应的特征值之和E=0;fori=1:3U_hat(:,i)=U(:,i);E=E+D(i,i);end%累计贡献率E=E/E_all;end%K-means算法函数function[class,num,center]=kmeans(x,k,center);[n,d]=size(x);%n为数据个数,d为数据维数class=zeros(n,1);%存储类别标签num=zeros(1,k);%各类样本数目center_last=zeros(k,d);while(center_last~=center)center_last=center;%将待分类数据分别分配给距离最近的聚类中心\fori=1:nforj=1:kdistance(i,j)=norm(x(i,:)-center(j,:));endend[m,index]=min(distance,[],2);class=index;%计算各聚类的新中心fori=1:kindex=find(class==i);num(i)=length(index);center(i,:)=mean(x(index,:));endendend二、KPCA2.1实验目的练习KPCA算法,对IRIS数据进行核主成分分析以降低数据维数,对各主成分贡献进行讨论。2.2实验原理2.2.1KPCA假设12,,...,Mxxx为训练样本,用{}ix表示输入空间。KPCA方法的基本思想是通过某种隐式方式将输入空间映射到某个高维空间(常称为特征空间),并且在特征空间中实现PCA。假设相应的映射为Φ,其定义如下:()dFxxxΦ→=Φ核函数通过映射Φ将隐式的实现点x到F的映射,并且由此映射而得的特征空间中数据满足中心化的条件,即1()0Mxµµ=Φ=∑(1)则特征空间中的协方差矩阵为:11()()MTCxxMµµµ==ΦΦ∑(2)现求C的特征值0λ≥和特征向量\{0}VF∈,Cνλν=(3)即有(())(())vxCxννλνΦ⋅=Φ⋅(4)考虑到所有的特征向量可表示为12(),(),...,()MxxxΦΦΦ的线性张成,即1()Miiivxα==Φ∑(5)则有1111((()()()()))(()())MMM
本文标题:西安交大-模式识别-基于IRIS的PCA与KPCA算法
链接地址:https://www.777doc.com/doc-4662658 .html