删除高度相关的组件

时间:2013-08-16 10:11:47

标签: matlab correlation

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

例如,我有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看起来像

Correlation matrix <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相同吗?

2 个答案:

答案 0 :(得分: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不会轻易告诉我们的是简单地删除哪个向量,并且只有更多变量才能解决问题,并且所有变量之间都有很多相互作用。

答案 1 :(得分:2)

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

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

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

编辑:

如果你忽视木片制造的那些点,那么你的解决方案是可行的,作为一种算法。