導航:首頁 > 源碼編譯 > 數據挖掘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演算法代碼相關的資料

熱點內容
用圖片做文件夾圖標 瀏覽:689
java正則表達式語法 瀏覽:865
美圖秀在線壓縮圖片 瀏覽:184
蘋果自帶控制app是什麼 瀏覽:906
孩子學編程怎麼樣 瀏覽:588
網路編程經典書籍 瀏覽:612
曲靖創建網站java程序員 瀏覽:690
256位加密中是什麼意思 瀏覽:97
php多維數組去重 瀏覽:308
做程序員這一行儲備人才怎麼看 瀏覽:460
參加密逃文 瀏覽:327
蘋果編程語言ios 瀏覽:763
求解病態系統常用的演算法 瀏覽:993
駕校用的app叫什麼 瀏覽:219
數控編程線的纏繞方法 瀏覽:972
安卓線性布局怎麼設計計算器布局 瀏覽:24
拓本pdf 瀏覽:79
2017法碩指南pdf 瀏覽:295
linuxphp命令參數 瀏覽:425
可靠性預測和推薦演算法 瀏覽:855