核主成分分析KPCA分析

转自:http://blog.sina.com.cn/s/blog_6163bdeb0102ee95.html

之前转载了一篇博客,介绍了KPCA的推导,作者主要是参考、翻译了另一篇博客http://zhanxw.com/blog/2011/02/kernel-pca-原理和演示/,这里讲KPCA的整个过程很详细,还有R实现的代码,很不错!建议保存下来看,这个网站有时候上不去。

    理论明白了,如果想在matlab里实现KPCA或者真正去用它,可以参考如下两个代码:

    博客http://blog.sina.com.cn/s/blog_7671b3eb01012d9s.html中实现了KPCA的整个过程,但把特征向量的去单位化注释掉了,实际上这段代码是必要的(因为eig解得的特征向量是单位化的,但实际要求的向量长度不是1,详见公式推导);代码的最后还有新数据在特征空间的投影。

    还有一个实现的代码是matlab exchange上的http://www.mathworks.com/matlabcentral/fileexchange/27319-kernel-pca,代码的每一步都有英文说明,代码挺规范的,只是最后没有新数据向特征空间的投影代码。

    上面的有助于加深对KPCA的理解,如果真正要用,可以用stprtool模式识别工具箱的kpca函数,使用很方便,如下例子,这段代码用KPCA实现对一个二维圆的降维处理,可以看到效果很好:

% 3.3 Kernel Principal Component Analysis
clc
clear
close all

% generate circle data
X = gencircledata([1;1],5,250,1);

% compute kernel PCA
options.ker = 'rbf'; % use RBF kernel
options.arg = 4; % kernel argument
options.new_dim = 2; % output dimension
model = kpca(X,options);

XR = kpcarec(X,model); % compute reconstruced data

% Visualization
figure;
h1 = ppatterns(X);
h2 = ppatterns(XR, '+r');
legend([h1 h2],'Input vectors','Reconstructed');

mx32591

 

    另尝试编写的一个代码如下,实现对3类数据特征空间的聚类,如下图,红、绿、蓝三种颜色分别表示3类数据,经过rbf核映射到新的空间后,分别聚成了3类:

mx372E5

mx392B5

    这里使用的是rbf核,还可以使用多项式核或sigmoid核,要想得到好的结果就要不断改变核参数,rbf效果好调一些,sigmoid不易找到好的参数,多项式核在一些范围效果不错,但两个参数调整需要好好找找,如下为一个多项式核函数的结果

mx37797

mx39B1E

    注意,如果你测试代码,结果不一样很正常,因为gencircledata函数产生的数据有随机成分在。

% 3.3 Kernel Principal Component Analysis
clc
clear
close all

% generate circle data
X0 = gencircledata([1;1],1,250,0.1);
X1 = gencircledata([1;1],3,250,0.1);
X2 = gencircledata([1;1],6,250,0.1);
X0 = X0 - repmat(mean(X0, 2), 1, 250);
X1 = X1 - repmat(mean(X1, 2), 1, 250);
X2 = X2 - repmat(mean(X2, 2), 1, 250);

X = [X0 X1 X2];
y = [ones(1, size(X0, 2)) 2*ones(1, size(X1, 2)) 3*ones(1, size(X2, 2))];
data.X = X;
data.y = y;

figure
ppatterns(data);

% compute kernel PCA
kernelflag = 1;
if kernelflag == 1
    options.ker = 'rbf';
    options.arg = 2; % kernel argument
elseif kernelflag == 2
    options.ker = 'sigmoid';
    options.arg = [3 10]; % kernel argument
else
    options.ker = 'poly';
    options.arg = [2 0]; % kernel argument
end

options.new_dim = 2; % output dimension
model = kpca(data.X, options);
kpca_data = kernelproj(data, model);

figure
ppatterns(kpca_data);

  • 4
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: KPCA(Kernel Principal Component Analysis)是一种非线性主成分分析方法。它通过将原始数据映射到高维特征空间,并在该空间中进行主成分分析,从而有效地处理非线性数据。Matlab提供了用于实现KPCA的函数。 要使用KPCA进行主成分分析,首先需要确定要使用的函数类型和参数。常见的函数包括线性、多项式、高斯等。然后,可以使用Matlab中的kpca函数创建KPCA对象,并指定所需的函数类型和参数。 在创建KPCA对象后,可以使用该对象的train方法传入原始数据进行训练。训练过程中,KPCA会将原始数据映射到高维特征空间,并计算该空间中的主成分。训练完成后,可以使用transform方法将新的数据集映射到已训练的KPCA对象所对应的特征空间中。 在完成数据映射后,可以使用kpca对象的explainedVarianceRatio方法获取每个主成分的方差解释比例。这些解释比例可以帮助我们了解每个主成分对总方差的贡献程度。 最后,可以使用kpca对象的reconstruct方法将映射后的数据重构回原始特征空间,以便进一步分析和应用。重构后的数据可以使用各种统计方法进行处理和分析。 总之,使用Matlab的kpca函数可以方便地进行主成分分析。它提供了各种功能,包括函数选择、数据映射、方差解释比例计算和数据重构等,可以帮助我们更好地理解和处理非线性数据。 ### 回答2: 主成分分析(Kernel Principal Component Analysis,KPCA)是一种常用的非线性降维方法,通过将数据映射到高维特征空间,利用主成分分析进行降维。与传统的主成分分析方法不同,KPCA可以处理非线性数据。 在Matlab中,可以使用Statistics and Machine Learning Toolbox中的函数"kpca"来进行KPCA分析。该函数可以通过选择不同的函数来适应不同的数据类型。常见的函数有线性、多项式、高斯径向基等。用户可以根据实际情况选择最适合的函数。 首先,我们需要准备数据集,数据集通常为一个矩阵,每行代表一个样本,每列代表一个特征。然后,通过调用"kpca"函数,传入数据集和函数类型,即可得到数据在高维特征空间的映射结果。 得到映射结果后,可以通过对特征向量进行排序,选择前k个特征向量,便得到了降维后的数据集。降维后的数据可以用于可视化、分类或聚类等后续处理。 需要注意的是,KPCA虽然弥补了传统PCA只能处理线性数据的不足,但计算复杂度较高,对大规模数据集的处理可能会比较耗时。对于大规模数据集,可以使用近似算法或其他快速的方法。 总之,使用Matlab中的"kpca"函数可以方便地进行主成分分析。通过选择合适的函数和参数,可以更好地处理非线性数据,提取数据的主要特征,从而实现降维和其他后续处理任务。 ### 回答3: 主成分分析(Kernel Principal Component Analysis,KPCA)是一种非线性的主成分分析方法,它通过将数据映射到一个高维特征空间中,利用函数的技巧将非线性数据映射到一个更为易于处理的线性空间中。在Matlab中,我们可以利用相应的函数来实现KPCA。 Matlab中提供了用于KPCA的工具箱,如Bioinformatics Toolbox和Pattern Recognition Toolbox。以Bioinformatics Toolbox为例,其中的kpca函数可以用于执行KPCA,其基本语法如下: [T, Y] = kpca(X, 'kernel_type', kernel_type, 'dim', dim); 其中,X是输入的数据矩阵,每行代表一个样本,每列代表一个特征;'kernel_type'是设置函数的类型,常用的有'gaussian'(高斯函数)、'poly'(多项式函数)和'linear'(线性函数)等;'dim'是指定输出的降维后的维度。 函数的输出包括降维后的数据矩阵Y和矩阵T,其中Y是降维后的数据矩阵,每行代表一个样本,每列代表一个降维后的特征;T是矩阵,它包含了样本之间的相似度信息。 需要注意的是,在使用kpca函数之前,可能需要预处理数据,比如进行归一化或标准化等操作。 通过利用Matlab中的kpca函数,我们可以快速、便捷地进行主成分分析,并对非线性数据进行降维处理。这在数据聚类、数据可视化以及模式识别等领域中广泛应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值