2017-04-04 38 views
1

我想应用主成分分析,以减少我的数据的维度。 200x146,200个具有146个特征(维度)的观察值(样本),每个观察值可以属于三个类别之一。我想要做的是将数据可视化,以便在向我的数据添加新样本后查看类质心如何移动。由于不可能绘制这样的高维度数据,因此我正在寻找一个能够将我的数据表示在几乎不同的班级中的维度。主成分分析,获得系数告诉我什么?

我知道PCA计算特征向量的特征值,而特征值代表方差。方差越高,数据分布越多,可视化效果越好。具有最高特征值的特征向量是主分量,然后由PCA找到与该分量正交的轴。 (我有没有正确理解PCA的基本理念?)

但是我不明白,我做什么的信息获取,当我使用MATLAB函数PCA() 我得到的系数,但他们怎么告诉我,之后如何继续? PCA_CLASS_SCATTERPLOT)';

data=trndata; 
[coeff,score]=pca(data(:,1:end-1)); 

newinputdata=coeff(:, 1:3)*score(:, 1:3 
newinputdata=newinputdata'; 

class1i=find(data(:,end)==1); 
class2i=find(data(:,end)==2); 
class3i=find(data(:,end)==3); 


class1=newinputdata(class1i,:); 
class2=newinputdata(class2i,:); 
class3=newinputdata(class3i,:); 


x=1; 
y=2; 
figure; 
plot(class1(:,x), class1(:,y),'ro') 
hold on 
plot(class2(:,x), class2(:,y),'go') 
hold on 
plot(class3(:,x), class3(:,y),'bo') 
+1

尽管PCA肯定是您想要实现的好工具,但事实上,您有三个类,并且希望将数据投影到2D听起来像是应该真正查看[线性判别分析](https:// en .wikipedia.org/wiki/Linear_discriminant_analysis)也用于降维。 – kazemakase

回答

1

MATLAB PCA()函数使我们能够灵活,以提取所描述here许多有用的信息。

如果我们输出一个参数(coeff),它将以146x200矩阵的形式返回加载。现在,如果我们问,两个输出参数.i.e。

[系数_,得分= PCA(X)

我们将得到的负载以及相应的分数值。在这里,我们可以通过coeff *得分重建输入数据。

现在为了降低维度,您将选择第一个输出参数的n个元素,并以coeff(:,1:n)* score(:, 1:n)'的形式执行近似重构。

我希望它回答您的查询。

+0

感谢您的回复,我已将我的代码添加到帖子中,如果您只是看看它。我创建了一个新的输入数据矩阵,并假定新矩阵的两个第一维是绘制数据的最佳维度,因为新的输入数据矩阵根据最高得分重新排列,对吗? – xava

相关问题