如何可视化 n 维特征?
How do I visualize n-dimensional features?
我有两个矩阵 A
和 B
。 A
的大小是200*1000 double(这里:1000代表1000个不同的特征)。矩阵 A
属于第 1 组,其中我使用 ones(200,1)
作为标签向量。 B
的大小也是200*1000 double(这里:1000也代表1000个不同的特征)。矩阵 B
属于第 2 组,其中我使用 -1*ones(200,1)
作为标签向量。
我的问题是如何可视化矩阵 A
和 B
以便我可以根据给定的组清楚地区分它们?
我假设矩阵 A
和 B
中的每个样本都由任一矩阵中的一行确定。如果我没理解错的话,你想画一系列1000维的向量,这是不可能的。我们无法从物理上想象超出三个维度的任何东西。
因此,我建议您执行 dimensionality reduction 来减少数据,以便将每个输入减少到 2 维或 3 维。减少数据后,您可以正常绘制它们并为每个点分配不同的标记,具体取决于它们属于哪个组。
如果您想在 MATLAB 中实现此目的,请使用 MATLAB 中的 Principal Components Analysis, specifically the pca
函数,如果您要将残差和重新投影的样本重新投影到较低维度,该函数会计算它们。我假设您有 Statistics Toolbox...如果您没有,那么很抱歉,这将不起作用。
具体来说,给定你的矩阵 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;
通过这些更改,这就是我们得到的:
我有两个矩阵 A
和 B
。 A
的大小是200*1000 double(这里:1000代表1000个不同的特征)。矩阵 A
属于第 1 组,其中我使用 ones(200,1)
作为标签向量。 B
的大小也是200*1000 double(这里:1000也代表1000个不同的特征)。矩阵 B
属于第 2 组,其中我使用 -1*ones(200,1)
作为标签向量。
我的问题是如何可视化矩阵 A
和 B
以便我可以根据给定的组清楚地区分它们?
我假设矩阵 A
和 B
中的每个样本都由任一矩阵中的一行确定。如果我没理解错的话,你想画一系列1000维的向量,这是不可能的。我们无法从物理上想象超出三个维度的任何东西。
因此,我建议您执行 dimensionality reduction 来减少数据,以便将每个输入减少到 2 维或 3 维。减少数据后,您可以正常绘制它们并为每个点分配不同的标记,具体取决于它们属于哪个组。
如果您想在 MATLAB 中实现此目的,请使用 MATLAB 中的 Principal Components Analysis, specifically the pca
函数,如果您要将残差和重新投影的样本重新投影到较低维度,该函数会计算它们。我假设您有 Statistics Toolbox...如果您没有,那么很抱歉,这将不起作用。
具体来说,给定你的矩阵 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;
通过这些更改,这就是我们得到的: