如何可视化 n 维特征?

How do I visualize n-dimensional features?

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

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

我假设矩阵 AB 中的每个样本都由任一矩阵中的一行确定。如果我没理解错的话,你想画一系列1000维的向量,这是不可能的。我们无法从物理上想象超出三个维度的任何东西。

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

如果您想在 MATLAB 中实现此目的,请使用 MATLAB 中的 Principal Components Analysis, specifically the pca 函数,如果您要将残差和重新投影的样本重新投影到较低维度,该函数会计算它们。我假设您有 Statistics Toolbox...如果您没有,那么很抱歉,这将不起作用。

具体来说,给定你的矩阵 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');

我们得到这个:

如果你想要三个维度,只需更改 numDimensions = 3,然后更改绘图代码以使用 plot3:

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

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