3

相関性の高いコンポーネントを削除する際に問題が発生しました。これを行う方法を尋ねることができますか?

たとえば、20 個の機能 (ランダムに作成) を持つ 40 個のインスタンスがあります。特徴 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

分析から高度に相関する変数を単純に削除するというあなたのこの考えは、PCA と同じではないことは明らかです。PCA は、複雑な問題のように見えるものをランク削減して、独立した事柄がわずかしか発生していないことが判明したものにするための優れた方法です。PCA は、固有値 (または svd) 分解を使用してその目標を達成します。

とにかく、問題があるかもしれません。たとえば、A が B と高い相関関係にあり、B が C と高い相関関係にあるとします。ただし、A と C が高い相関関係にあるとは限りません。相関関係は、対応する高次元ベクトル空間内のベクトル間の角度の尺度と見なすことができるため、これは簡単に実現できます。

簡単な例として、「中程度」のレベルで相関する 2 つの変数 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 には 2 つの重要な対角要素があり、小さな要素が 1 つあるという事実は、これが実際には 2 変数の問題であることを示しています。PCA が簡単に教えてくれないのは、どのベクトルを単純に削除するかということです。変数が多くなると、それらすべての間に多くの相互作用があるため、問題は明確ではなくなります。

于 2013-08-16T12:55:51.723 に答える
2

ウッドチップの答えはかなり良いと思います。しかし、固有値を使用していると、問題が発生する可能性があります。データセットが十分に大きい場合、常にいくつかの小さな固有値が存在しますが、それらが何を示しているかはわかりません。

代わりに、単純なクラスタリング方法でデータをグループ化することを検討してください。Matlab で簡単に実装できます。

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

編集:

木材チップが作ったポイントを無視すれば、アルゴリズムとしての解決策は問題ありません。

于 2013-08-16T13:11:51.013 に答える