3

我在删除高度相关的组件时遇到了问题。我可以问如何做到这一点?

例如,我有 40 个实例和 20 个特征(随机创建)。特征 2 和 18 与特征 4 高度相关。而特征 6 与特征 10 高度相关。那么如何去除高度相关(冗余)的特征,例如 2、18 和 10?本质上,我需要剩余特征的索引 1、3、4、5、6、...、9、11、...、17、19、20。

Matlab代码:

x = randn(40,20);
x(:,2) = 2.*x(:,4);
x(:,18) = 3.*x(:,4);
x(:,6) = 100.*x(:,10);
x_corr = corr(x);
size(x_corr)

figure, imagesc(x_corr),colorbar

相关矩阵x_corr看起来像

相关矩阵 <code>x_corr</code>

编辑:

我想出了一个办法:

x_corr = x_corr - diag(diag(x_corr));
[x_corrX, x_corrY] = find(x_corr>0.8);

for i = 1:size(x_corrX,1)
    xx = find(x_corrY == x_corrX(i));
    x_corrX(xx,:) = 0;
    x_corrY(xx,:) = 0;
end
x_corrX = unique(x_corrX);
x_corrX = x_corrX(2:end);
im = setxor(x_corrX, (1:20)');

我对吗?或者你有更好的想法请发帖。谢谢。

edit2:这种方法与使用 PCA 相同吗?

4

2 回答 2

2

我认为木片的答案是相当不错的。但是当你使用特征值时,你可能会遇到一些麻烦。如果数据集足够大,总会有一些小的特征值,但你不确定它们告诉你什么。

相反,请考虑通过简单的聚类方法对数据进行分组。在 Matlab 中很容易实现。

http://www.mathworks.de/de/help/stats/cluster-analysis-1-1.html

编辑:

如果您无视木片提出的观点,那么作为算法,您的解决方案就可以了。

于 2013-08-16T13:11:51.013 回答
2

很明显,您的这种想法,即从分析中简单地删除高度相关的变量与 PCA 不同。PCA 是一种很好的方法,可以将看起来很复杂的问题降级,变成一个只有少数独立事件发生的问题。PCA 使用特征值(或 svd)分解来实现该目标。

无论如何,你可能有问题。例如,假设 A 与 B 高度相关,B 与 C 高度相关。但是,A 和 C 高度相关不一定是真的。由于相关性可以被视为对这些向量在其相应的高维向量空间中的角度的度量,因此可以很容易地做到这一点。

作为一个简单的例子,我将创建两个变量,A 和 B,它们在“中等”级别相关。

n = 50;
A = rand(n,1);
B = A + randn(n,1)/2;
corr([A,B])
ans =
            1      0.55443
      0.55443            1

所以这里 0.55 是相关性。我将创建 C 实际上是 A 和 B 的平均值。根据您的定义,它将高度相关。

C = [A + B]/2 + randn(n,1)/100;
corr([A,B,C])
ans =
            1      0.55443      0.80119
      0.55443            1      0.94168
      0.80119      0.94168            1

显然 C 是这里的坏人。但是,如果只是简单地查看对 [A,C] 并从分析中删除 A,然后对对 [B,C] 执行相同操作然后删除 B,我们将做出错误的选择。这是一个简单构建的例子。

事实上,相关矩阵的特征值可能是有意义的。

[V,D] = eig(corr([A,B,C]))
V =
     -0.53056     -0.78854       -0.311
     -0.57245      0.60391     -0.55462
     -0.62515      0.11622       0.7718
D =
       2.5422            0            0
            0      0.45729            0
            0            0   0.00046204

D 有两个重要的对角线元素和一个很小的对角线元素这一事实告诉我们,实际上,这是一个二变量问题。PCA 不会轻易告诉我们的是要简单地删除哪个向量,而且随着变量越多,所有变量之间存在许多相互作用,问题只会变得不那么清楚。

于 2013-08-16T12:55:51.723 回答