如何可视化n维特征?

时间:2015-07-29 18:18:11

标签: matlab grouping data-analysis

我有两个矩阵ABA的大小为200 * 1000 double(此处:1000表示1000个不同的功能)。矩阵A属于第1组,我使用ones(200,1)作为标签向量。 B的大小也是200 * 1000双(这里:1000也代表1000个不同的特征)。矩阵B属于第2组,我使用-1*ones(200,1)作为标签向量。

我的问题是如何可视化矩阵AB,以便我可以根据给定的群体清楚地区分它们?

1 个答案:

答案 0 :(得分:2)

我假设您的矩阵AB中的每个样本都由矩阵中的一行确定。如果我理解正确,你想绘制一系列1000维向量,这是不可能的。我们无法对三维以外的任何东西进行物理可视化。

因此,我建议您执行dimensionality reduction来减少数据,以便将每个输入减少到2或3维。减少数据后,您可以正常绘制它们并为每个点指定不同的标记,具体取决于它们属于哪个组。

如果要在MATLAB中实现此目的,请使用Principal Components Analysis,特别是MATLAB中的pca函数,如果要将它们重新投影到较低维度,则计算残差和重新投影的样本。我假设您拥有统计工具箱...如果您没有,那么抱歉这不会有效。

具体而言,根据您的矩阵AB,您可以这样做:

[coeffA, scoreA] = pca(A);
[coeffB, scoreB] = pca(B);
numDimensions = 2;
scoreAred = scoreA(:,1:numDimensions);
scoreBred = scoreB(:,1:numDimensions);

pca的第二个输出为您提供了重新投影的值,因此您只需通过提取第一个N列来确定所需的维数,其中N是所需的数量你想要的尺寸。

我现在选择了2,我们可以看到它之后的3个维度。一旦我们拥有了2个维度所需的内容,那只需要绘制:

plot(scoreAred(:,1), scoreAred(:,2), 'rx', scoreBred(:,1), scoreBred(:,2), 'bo');

这将生成一个图,其中矩阵A的样本为红色十字,而矩阵B的样本为蓝色圆圈。

这是一个完全随机数据的样本运行:

rng(123); %// Set seed for reproducibility
A = rand(200,1000); B = rand(200,1000); %// Generate random data

%// Code as before
[coeffA, scoreA] = pca(A);
[coeffB, scoreB] = pca(B);
numDimensions = 2;
scoreAred = scoreA(:,1:numDimensions);
scoreBred = scoreB(:,1:numDimensions);

%// Plot the data
plot(scoreAred(:,1), scoreAred(:,2), 'rx', scoreBred(:,1), scoreBred(:,2), 'bo');

我们得到了这个:

enter image description here

如果您想要三个尺寸,只需更改numDimensions = 3,然后更改地图代码即可使用plot3

plot3(scoreAred(:,1), scoreAred(:,2), scoreAred(:,3), 'rx', scoreBred(:,1), scoreBred(:,2), scoreBred(:,3), 'bo');
grid;

通过这些更改,我们得到的是:

enter image description here

相关问题