Matlab 基于PCA的聚类
我在做无监督分类。为此,我有n个特征用于分类,我想使用PCA将数据投影到新的子空间,然后使用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.
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;