我假设矩阵中的每个样本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 是您想要的维度数量。 P>
我现在选择了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;
与这些变化,这就是我们得到的: