我有一个标称 16 维的数据集。我在一个案例中大约有 100 个样本,在另一个案例中大约有 20,000 个样本。根据我使用 PCA 和热图进行的各种探索性分析,我确信真正的维度(即捕获大部分“信号”所需的维度数)约为 4。我想创建一张幻灯片演示文稿的效果。我想要反驳的关于这些数据的“传统智慧”是真正的维度是一维或二维。
什么是显示数据集真实维度的良好、简单的可视化?最好是那些有统计学背景但不是“真正的”统计学家的人可以理解。
我有一个标称 16 维的数据集。我在一个案例中大约有 100 个样本,在另一个案例中大约有 20,000 个样本。根据我使用 PCA 和热图进行的各种探索性分析,我确信真正的维度(即捕获大部分“信号”所需的维度数)约为 4。我想创建一张幻灯片演示文稿的效果。我想要反驳的关于这些数据的“传统智慧”是真正的维度是一维或二维。
什么是显示数据集真实维度的良好、简单的可视化?最好是那些有统计学背景但不是“真正的”统计学家的人可以理解。
一个标准的方法是做 PCA,然后显示一个碎石图,你应该能够从你可能选择的任何软件中得到它。稍加修改,如有必要,您可以使其对您的特定受众更具解释性。有时它们可以令人信服,但通常它们是模棱两可的,并且总是有空间来争论如何阅读它们,因此碎石情节可能(编辑:不是!)是理想的。不过值得一看。
一种可视化的方法如下:
如果数据确实是维的,则绘图应该看起来像一条平线。
在 Matlab 中(躲避所有被抛出的鞋子):
lat_d = 2; %the latent dimension of the generating process
vis_d = 16; %manifest dimension
n = 10000; %number of samples
x = randn(n,lat_d) * randn(lat_d,vis_d) + 0.1 * randn(n,vis_d); %add some noise
xmu = mean(x,1);
xc = bsxfun(@minus,x,xmu); %Matlab syntax for element recycling: ugly, weird.
[U,S,V] = svd(xc); %this will be slow;
prev = U(:,1:2) * S(1:2,1:2);
prec = U(:,3:end) * S(3:end,3:end);
normv = sqrt(sum(prev .^2,2));
normc = sqrt(sum(prec .^2,2));
scatter(normv,normc);
axis equal; %to illlustrate the differences in scaling, make axis 'square'
这将生成以下散点图:

如果更改lat_d为 4,则线条不那么平坦。
我在 SAS 中使用 PROC Varclus 做了类似的事情。基本思想是生成一个 4 集群解决方案,选择每个集群的最高相关变量,然后证明这个 4 集群解决方案比两个集群解决方案解释了更多的变化。对于 2 集群解决方案,您可以使用 Varclus 或前 2 个主组件,但我喜欢 Varclus,因为一切都是通过变量而不是组件来解释的。R中有一个varclus,但我不确定它是否做同样的事情。
——拉尔夫·温特斯