核主元分析 KPCA及matlab代码,主要用于数据降维。

clc
clear all
close all
%% 载入数据
% 注意 数据样本为行 样本属性或者样本参数列!!!!!!!!!!!!!!!!!!!!!
% 特征参数维度与样本属性维度一致。
tztqxk = xlsread('KPCA1.xlsx');
[n,p] = size(tztqxk); % n行数 p列数
data = tztqxk';       % 样本是行属性是列就要转置
%% 2、数据标准化处理
X0 = zscore(data);  % 单位不统一
%% 3、求核矩阵
% 径向基核函数
c = 2.5;  % 径向基参数
% 径向基参数可自己定义。参数的合理选择直接影响结果
% 可以用遗传算法、粒子群算法算法去寻优
for i = 1:p
    for j = 1:p
        K(i,j) = exp(-(norm(X0(i,:) - X0(j,:)))^2/(2*c^2));
        K(j,i) = K(i,j);
    end
end
%% 4、中心化矩阵
unit = (1/p) * ones(p, p);
Kp = K - unit*K - K*unit + unit*K*unit;

%% 5、特征值分解
% 特征向量proper_vector、特征值proper_value
[proper_vector, proper_value] = eig(Kp);
% diag函数提取矩阵主对角元素
proper_value_vec = diag(proper_value);
proper_value_vec = abs(proper_value_vec);
% 特征值按降序排列
[proper_value_sort, index] = sort(proper_value_vec, 'descend');

%% 6、贡献率计算
contribution_rate =  proper_value_sort*100/ sum(proper_value_sort);  % 计算贡献率
cum_contribution_rate = (cumsum(proper_value_sort)/ sum(proper_value_sort))*100; %贡献率之和

你可能感兴趣的:(算法)