导航:首页 > 源码编译 > 数据挖掘pca算法代码

数据挖掘pca算法代码

发布时间:2023-01-15 00:13:45

㈠ C#中如何编写PCA算法代码

PCA的处理步骤:

1,均值化

2,求协方差矩阵(我知道的有两种方法,这是第一种,按部就班的求,第二种是:(A*A‘/(N-1)))

3,求协方差的特征值和特征向量

4,将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵

5,将样本点投影到选取的特征向量上

matlab实现源代码

%PCA算法,matlab实现
functionF=pcad(A,n)%A是M*N
%测试实例A=[2.5,0.5,2.2,1.9,3.1,2.3,2,1,1.5,1.1;2.4,0.7,2.9,2.2,3.0,2.7,1.6,1.1,1.6,0.9]
%结果F=[0.8280,-1.7776,0.9922,0.2742,1.6758,0.9129,-0.0991,-1.1446,-0.4380,-1.2238]
%PCA第一步:均值化
X=A-repmat(mean(A,2),1,size(A,2))%去均值
%PCA第二步:求特征协方差矩阵
B=COV(X')%求协方差
%PCA第三步:求特征协方差矩阵的特征值和特征向量
[v,d]=eig(B)%求特征值和特征向量
%PCA第四步:将特征值按照从大到小的顺序排序
d1=diag(d);%取出对角矩阵,也就是把特征值提出来组成一个新的M*1的d1矩阵
[d2index]=sort(d1);%特征值以升序排序d2是排序后的结果index是数排序以前的排名位置
cols=size(v,2);%特征向量矩阵的列数
fori=1:cols%对特征向量做相反位置的调整是个降序排列。这个过程把特征值和特征向量同时做相应的降序排列
vsort(:,i)=v(:,index(cols-i+1));%vsort是一个M*col(注:col一般等于M)阶矩阵,保存的是按降序排列的特征向量,每一列构成一个特征向量
%vsort保存的是协方差矩阵降序后的特征向量,为M*M阶
dsort(i)=d1(index(cols-i+1));%dsort保存的是按降序排列的特征值,是一维行向量,1*M
end%完成降序排列
M=vsort(:,1:n)%提取主成分量
%PCA第五步:将样本点投影到选取的特征向量上
F=(X'*M)'%最终的投影

㈡ 如何结合pca算法和最近邻法进行人脸识别

%一个修改后的PCA进行人脸识别的Matlab代码
% calc xmean,sigma and its eigen decomposition
allsamples=[];%所有训练图像
for i=1:40
for j=1:5
a=imread(strcat('D:\rawdata\ORL\s',num2str(i),'\',num2str(j),'.pgm'));
% imshow(a);
b=a(1:112*92); % b是行矢量 1×N,其中N=10304,提取顺序是先列后行,即从上到下,从左到右
b=double(b);
allsamples=[allsamples; b]; % allsamples 是一个M * N 矩阵,allsamples 中每一行数据代表一张图片,其中M=200
end
end
samplemean=mean(allsamples); % 平均图片,1 × N
for i=1:200 xmean(i,:)=allsamples(i,:)-samplemean; % xmean是一个M × N矩阵,xmean每一行保存的数据是“每个图片数据-平均图片”
end;
sigma=xmean*xmean'; % M * M 阶矩阵
[v d]=eig(sigma);
d1=diag(d);
[d2 index]=sort(d1); %以升序排序
cols=size(v,2);% 特征向量矩阵的列数
for i=1:cols
vsort(:,i) = v(:,index(cols-i+1) ); % vsort 是一个M*col(注:col一般等于M)阶矩阵,保存的是按降序排列的特征向量,每一列构成一个特征向量
dsort(i) = d1( index(cols-i+1) ); % dsort 保存的是按降序排列的特征值,是一维行向量
end %完成降序排列
%以下选择90%的能量
dsum = sum(dsort);
dsum_extract = 0;
p = 0;
while( dsum_extract/dsum < 0.9)
p = p + 1;
dsum_extract = sum(dsort(1:p));
end
i=1;
% (训练阶段)计算特征脸形成的坐标系
while (i0)
base(:,i) = dsort(i)^(-1/2) * xmean' * vsort(:,i); % base是N×p阶矩阵,除以dsort(i)^(1/2)是对人脸图像的标准化,详见《基于PCA的人脸识别算法研究》p31
i = i + 1;
end
% add by wolfsky 就是下面两行代码,将训练样本对坐标系上进行投影,得到一个 M*p 阶矩阵allcoor
allcoor = allsamples * base;
accu = 0;
%
for i=1:40
for j=6:10 %读入40 x 5 副测试图像
a=imread(strcat('D:\rawdata\ORL\s',num2str(i),'\',num2str(j),'.pgm'));
b=a(1:10304);
b=double(b);
tcoor= b * base; %计算坐标,是1×p阶矩阵
for k=1:200
mdist(k)=norm(tcoor-allcoor(k,:));
end;
%三阶近邻
[dist,index2]=sort(mdist);
class1=floor( index2(1)/5 )+1;
class2=floor(index2(2)/5)+1;
class3=floor(index2(3)/5)+1;
if class1~=class2 && class2~=class3
class=class1;
elseif class1==class2
class=class1;
elseif class2==class3
class=class2;
end;
if class==i
accu=accu+1;
end;
end;
end;
accuracy=accu/200 %输出识别率
函数调用是定义函数,然后用函数名进行调用就可以了

阅读全文

与数据挖掘pca算法代码相关的资料

热点内容
未来番禺程序员待遇 浏览:207
安卓安智部落冲突密码怎么改 浏览:646
http协议单片机 浏览:71
pdfdocument 浏览:556
gcc编译vi文件 浏览:63
安卓连airpods怎么找耳机 浏览:927
加密货币转账教程 浏览:229
程序员小灰hashmap 浏览:838
国语pdf版 浏览:184
少儿编程作品美丽的小房子 浏览:974
服务器卡在网页上怎么办 浏览:54
用python自制编译器 浏览:951
android分享新浪微博客户端 浏览:26
系统中服务器在哪里下载地址 浏览:1001
新a4安卓手机怎么投屏 浏览:173
pdftoemf 浏览:886
java接口可以实现接口吗 浏览:59
vb编程10个随机函数 浏览:22
程序员个人简介100 浏览:772
土木工程师算法工程师 浏览:92