我有两个矩阵A
和B
。 A
的大小为200 * 1000 double(此处:1000表示1000个不同的功能)。矩阵A
属于第1组,我使用ones(200,1)
作为标签向量。 B
的大小也是200 * 1000双(这里:1000也代表1000个不同的特征)。矩阵B
属于第2组,我使用-1*ones(200,1)
作为标签向量。
我的问题是如何可视化矩阵A
和B
,以便我可以根据给定的群体清楚地区分它们?
答案 0 :(得分:2)
我假设您的矩阵A
和B
中的每个样本都由矩阵中的一行确定。如果我理解正确,你想绘制一系列1000维向量,这是不可能的。我们无法对三维以外的任何东西进行物理可视化。
因此,我建议您执行dimensionality reduction来减少数据,以便将每个输入减少到2或3维。减少数据后,您可以正常绘制它们并为每个点指定不同的标记,具体取决于它们属于哪个组。
如果要在MATLAB中实现此目的,请使用Principal Components Analysis,特别是MATLAB中的pca
函数,如果要将它们重新投影到较低维度,则计算残差和重新投影的样本。我假设您拥有统计工具箱...如果您没有,那么抱歉这不会有效。
具体而言,根据您的矩阵A
和B
,您可以这样做:
[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');
我们得到了这个:
如果您想要三个尺寸,只需更改numDimensions = 3
,然后更改地图代码即可使用plot3
:
plot3(scoreAred(:,1), scoreAred(:,2), scoreAred(:,3), 'rx', scoreBred(:,1), scoreBred(:,2), scoreBred(:,3), 'bo');
grid;
通过这些更改,我们得到的是: