Matlab 基于PCA的聚类

Matlab 基于PCA的聚类,matlab,machine-learning,Matlab,Machine Learning,我在做无监督分类。为此,我有n个特征用于分类,我想使用PCA将数据投影到新的子空间,然后使用PCA的输出执行聚类。我编写了以下代码: for c=1:size(feature,1) feature(c,:)=feature(c,:)-mean(feature); end DataCov=cov(feature); % covariance matrix [PC,latent,explained] = pcacov(DataCov); 这给了我: PC = 0.6706 0.

我在做无监督分类。为此,我有n个特征用于分类,我想使用PCA将数据投影到新的子空间,然后使用PCA的输出执行聚类。我编写了以下代码:

for c=1:size(feature,1) 
    feature(c,:)=feature(c,:)-mean(feature);
end
DataCov=cov(feature); % covariance matrix
[PC,latent,explained] = pcacov(DataCov);
这给了我:

 PC =

0.6706    0.7348    0.0965    0.0316   -0.0003   -0.0001
0.0009   -0.0060    0.0298    0.0378    0.8157   -0.5764
0.0391   -0.1448    0.5661    0.8091   -0.0406    0.0264
0.7403   -0.6543   -0.1461   -0.0505    0.0018   -0.0005
0.0003   -0.0020    0.0193   -0.0116    0.5768    0.8166
0.0264   -0.1047    0.8048   -0.5832   -0.0151   -0.0169


latent =

0.0116
0.0001
0.0000
0.0000
0.0000
0.0000
解释=

 98.8872  <-----
1.0445
0.0478
0.0205
0.0000
0.0000

我想你想从左边乘上
PC
,但是,如果你只想使用第一个主成分,你应该能够简单地使用
feature\u New
的第一列。请注意,使用欧几里德距离的聚类方法很可能会使用原始数据和第一个PCside返回(几乎)相同的结果。请注意:使用
bsxfun
删除平均值。它更快。此外,如果您已经删除了均值
svd
on功能,则直接给出结果(更快,有时数字更准确)。@Jonas第一个主成分是最大方差的方向,因此应该能够捕获数据的大部分特征。我说得对吗?@Parag:对。顺便说一句,如果你对所有数据进行聚类,然后只对第一个主成分进行聚类,你应该会得到非常相似的结果。从前三个主成分创建变换后的特征矩阵:feature_New=feature*PC(:,1:3);%只有前三个部分
  feature_New= feature*PC;