KPCA的matlab實現
在網上看到了的實現,其中的好些註釋不能令自己滿意,故此,copy過來,自己修改註釋!其中有些地方也不準確!故此自己修改的結果!
function [train_kpca,test_kpca] = kpcaFordata(train,test,threshold,rbf_var)
%% Data kpca processing
if nargin <4
rbf_var=10000;%?
end
if nargin <3
threshold = 90;
end
%% 資料處理
patterns=zscore(train); %訓練資料標準化
test_patterns=zscore(test); %測試資料標準化
train_num=size(patterns,1); %train_num是訓練樣本的個數
test_num=size(test_patterns,1);%test_num是測試樣本的個數
cov_size = train_num; %cov_size是訓練樣本的個數
%% 計算核矩陣
for i=1:cov_size,
for j=i:cov_size,
K(i,j) = exp(-norm(patterns(i,:)-patterns(j,:))^2/rbf_var); %核函式 rbf_var ??
K(j,i) = K(i,j);
end
end
unit = ones(cov_size, cov_size)/cov_size;%cov_size是樣本的個數
%% 中心化核矩陣
K_n = K - unit*K - K*unit + unit*K*unit;% 中心化核矩陣
%% 特徵值分解
[evectors_1,evaltures_1] = eig(K_n/cov_size);
[x,index]=sort(real(diag(evaltures_1))); %sort每行按從小到大排序,x為排序後結果,index為索引
evals=flipud(x) ;% flipud函式實現矩陣的上下翻轉
index=flipud(index);
%% 將特徵向量按特徵值的大小順序排序
evectors=evectors_1(:,index);
%% 單位化特徵向量(這裡個人認為有問題)
% for i=1:cov_size
% evecs(:,i) = evectors(:,i)/(sqrt(evectors(:,i)));
% end
%%提取主成分 主成分所佔的百分比>threshold
train_eigval = 100*cumsum(evals)./sum(evals);
index = find(train_eigval >threshold);
train_kpca = zeros(train_num, index(1)); %train_num是訓練樣本的個數
%% evecs是單位化後的特徵矩陣,K_n是訓練資料的中心化核矩陣 將訓練資料進行對映,達到降維的目的!
train_kpca=[K_n * evectors(:,1:index(1))];
%% 重建測試資料
unit_test = ones(test_num,cov_size)/cov_size;%cov_size是訓練樣本的個數
K_test = zeros(test_num,cov_size); %test_num是測試樣本的個數, cov_size是訓練樣本的個數
for i=1:test_num, %test_num是測試樣本的個數
for j=1:cov_size,%cov_size是訓練樣本的個數
K_test(i,j) = exp(-norm(test_patterns(i,:)-patterns(j,:))^2/rbf_var);
end
end
K_test_n = K_test - unit_test*K - K_test*unit + unit_test*K*unit;
test_kpca = zeros(test_num, index(1));%test_num是測試樣本的個數
alfa=ones(train_num,index(1));
alfa = patterns*evectors./(evals(1:index(1)).ones(1,test_num));
test_kpca = [K_test_n * alfa];
附上綜合講解:百度搜尋 :KPCA核主成分分析 新浪部落格
相關文章
- svpwm的matlab模擬實現Matlab
- MATLAB實現頻數表——hist的使用Matlab
- sobel運算元,matlab實現Matlab
- 水晶藍蓮花(Matlab實現)Matlab
- 排隊論演算法的matlab實現演算法Matlab
- 蒙特卡羅演算法的matlab實現演算法Matlab
- Matlab 實現介面相應滑鼠事件Matlab事件
- 使用Matlab實現AHP演算法Matlab演算法
- 奇異值分解以及matlab實現Matlab
- 主成分分析及其matlab實現Matlab
- matlab實現調整圖片的對比度Matlab
- MATLAB實現頻數直方圖——hist的使用Matlab直方圖
- FFT演算法實現與分析MATLABFFT演算法Matlab
- NSGA2 演算法Matlab實現演算法Matlab
- 牛頓插值 C++ 和 Matlab實現C++Matlab
- 灰度共生矩陣GLCM及其matlab實現矩陣Matlab
- Matlab與自己實現的平滑演算法對比Matlab演算法
- 蟻群演算法原理及Matlab實現演算法Matlab
- Matlab實現模擬調製與解調Matlab
- 運籌學——matlab實現單純形法Matlab
- kmeans聚類演算法matlab實現聚類演算法Matlab
- 量子圖形加密演算法的MATLAB程式碼實現加密演算法Matlab
- 幾種常見窗函式及其MATLAB實現函式Matlab
- Matlab批量實現圖片檔案格式轉換Matlab
- 圖論最短路徑問題與matlab實現圖論Matlab
- 貝塞爾曲線原理、推導及Matlab實現Matlab
- 小波變換檢測訊號突變點的MATLAB實現Matlab
- 基於粒子群演算法的分組揹包MATLAB實現演算法Matlab
- YUV影像質量的客觀評估SSIM matlab程式碼實現Matlab
- 基於MATLAB的指紋識別演算法模擬實現Matlab演算法
- matlab實現人臉識別(數學基礎原理)Matlab
- 影像壓縮編碼碼matlab實現——行程編碼Matlab行程
- 影像壓縮編碼碼matlab實現——DM編碼Matlab
- 模擬退火演算法舉例及其matlab實現演算法Matlab
- 數字訊號處理實驗一(離散時間訊號的MATLAB實現)Matlab
- 網格人為干擾度計算方法的matlab程式碼實現Matlab
- 差分進化演算法介紹及matlab實現演算法Matlab
- 影像壓縮編碼碼matlab實現——變換編碼Matlab