相関行列からの確率変数の最小相関サブセット


10

相関行列A。これは、Matlabのcorrcoef()を通じてピアソンの線形相関係数を使用して取得しました。次元100x100の相関行列。つまり、100個の確率変数で相関行列を計算しました。

これらの100個の確率変数の中で、相関行列に含まれる「相関がほとんどない」10個の確率変数を見つけたいと思います(測定するメトリックについて、相関行列Bと比較して相関行列Aに含まれる「より多くの相関」の量の定量化を参照してください)相関行列の全体的な相関関係)。私はペアワイズ相関のみを気にします。

それらの10個の確率変数を妥当な時間内に見つけるための良い方法はありますか(たとえば、私は試したくない(10010)組み合わせ)?近似アルゴリズムは問題ありません。


1
metrics to measure the overall correlation。あなたは特に行列式について考えていますか?
ttnphns 2014

1
非常によく似た質問stats.stackexchange.com/q/73125/3277
ttnphns 2014

1
対数行列式は部分モジュラー関数です(18ページのここを参照)。古典的な意味、残念ながら、増加していない ....貪欲な近似結果が適用されませんが、それは何らかの形で役に立つかもしれませんように、それはまだ感じている11/e
ドゥーガル

1
代わりに相関の平均値を使用したい場合、これは最大エッジ重みクリーク問題になります。これはもちろんNP困難ですが、近似アルゴリズムにいくつかの作業が見られます。
Dougal 2014

3
クラスター分析によるその単純なアイデアはどうでしょうか。取る距離(非類似度)として、選択した方法でクラスタリングを行います(おそらくWardまたは平均リンケージ階層を選択します)。10アイテムからなる最もタイトなクラスターを選択します。|r|
ttnphns 2014

回答:


3

絶対的なペアワイズ相関の合計を選択基準として考えてみましょう。我々は、このようにベクトルシーク用いて、L 1V = N最小になるV 'のQ V Q 、I 、J =を| A i j | v{0,1}Nl1(v)=nvQvQij=|Aij|

QもAと同様に正定であると仮定すると、問題は制約付き2次最適化問題を解くことに帰着します。

v=min vQv s.t. l1(v)=n, vi{0,1}

これは次のリラクゼーションを示唆しています:

v=min vQv s.t. l1(v)=n, vi[0,1]

市販のソルバーを使用して簡単に解決できます。次に、結果は最大コンポーネントによって与えられます。v nv

サンプルMATLABコード:

N=100;
n=10;
% Generate random data
A=rand(N,1000);
C=corrcoef(A');
Q=abs((C+C')/2); % make sure it is symmetric
x = cplexqp(Q,zeros(1,N),[],[], ones(1, N),n, zeros(N,1), ones(N,1));
% If you don't use CPLEX, use matlab's default
% x = quadprog(Q,zeros(1,N),[],[], ones(1, N),n, zeros(N,1), ones(N,1));
assert(abs(sum(x)-n)<1e-10);
% Find the n largest values
I=sort(x); 
v=zeros(size(x)); v(x>I(N-n))=1; 
assert(abs(sum(v)-n)<1e-10);
% Make sure we do better than 10K random trials
for i=1:10000
   vc=zeros(size(x)); vc(randperm(N,n))=1;
   assert(sum(vc)==n, 'Wrong l0 norm');
   assert(vc'*Q*vc>v'*Q*v, 'Improves result');
end
% Show results
J=find(v==1);
fprintf('The optimal solution total off-diagonal correlations are %1.3f\n', v'*Q*v-n);
fprintf('The matrix:\n');
C(J,J)

万が一、このスクリプトのPythonバージョンがありますか?
Casimir

2

これは@ttnphnsの階層的クラスタリングの考えよりも悪いかもしれません。しかし:私は増加する準モジュラー目的関数としてを使用する論文で起こりましlogdet(I+A)

Vanchinathan、Marfurt、Robelin、Kossman、およびKrause。膨大なデータから貴重品を発見。KDD2015。(doiarXiv

それが「最小相関」の妥当な尺度であると考える場合、それを最大化するポイントを反復的に選択するだけで、最適セットの係数内に収めることができます。これは、ブロックLU分解で効率的に実行できます。ここで、は、既に行列にあるエントリへの相関のベクトルです。11/ev

det[I+AvvT2]=det([I0vT(I+A)11][I+A002vT(I+A)1v][I(I+A)1v01])=det[I0vT(I+A)11]det[I+A002vT(I+A)1v]det[I(I+A)1v01]=(2vT(I+A)1v)det(I+A)

そしてもちろん、を計算する必要があります。ここで、はコレスキー分解であり、三角ソルバーを使用します。これは。したがって、相関行列がすでに計算されていると仮定すると、このプロセス全体で時間をかけて要素からを選択する必要があります。 。vT(I+A)1v=L1v2LI+AO(n2)O(k=1nNk2+k3)=O(Nn3)nN


論文へのリンクが切れているようです。便利な引用はありますか?
Sycoraxによると、モニカの復活は'23

@SycoraxこれはWayback Machineで利用できますが、Webで最新のコピーを見つけることができませんでした。ワークショップペーパーが会議用ペーパーに変わったようです。これを回答に追加します。
Dougal

1

「ペアワイズ相関のみを気にしているという意味を完全に理解しているとは思いませんが、ここで役立つことがあります。相関行列の逆行列を使用します。用語に等しい、である X行列から構築されたここで、番目の列と行が削除されています。Aii1det(A0i)/det(A)A0i(n1)(n1)Ai

したがって、の最小対角係数のインデックスを取得すると、セットの残りの部分との相関が最も低いポイントがわかります。A1

実際に何をしたいかに応じて、反転の対角線上で10個の最低値を取得するか、最初の値を取得してから、ポイントを削除して反転を計算します。

これが必要なものでない場合でも、このトリックはまだ役立つかもしれませんが、方法はわかりません。


0

最小のペアワイズ相関を持つアイテムのを見つけます。たとえば、相関は2つの系列間の関係のを説明するため、ターゲット アイテムの相関の二乗の合計を最小化するほうが理にかなっています。これが私の簡単な解決策です。kn0.60.36k

相関の行列を相関の二乗の行列に書き換えます。各列の二乗を合計します。合計が最大の列と対応する行を削除します。これで行列ができました。行列になるまで繰り返します。列と対応する行を最小の合計で保持することもできます。これらの方法を比較すると、および行列で、合計が近い2つの項目のみが異なって保持および削除されていることがわかりました。n×n(n1)×(n1)k×kkn=43k=20


2
これはうまくいくかもしれませんが、その場しのぎのように聞こえ(貪欲なアルゴリズムのように読みます)、それがうまくいくはずの数学的な理由を提供していません。それが機能するという保証はありますか?それが最高のソリューションにどれだけ近づくかについての限界はありますか?
whuber

私はグロビのブランチを使用してを解くためにバインドしましたは相関行列と最適性です。最終的な目標値は8.13です。比較のために、この貪欲な方法は42.87を達成しましたが、ランダム選択は62.07の期待される客観的な値を持っていました。それほど素晴らしいことではありませんが、役に立たないこともありません。そして、この方法は確かにそれのために行くシンプルさとスピードを持っています!Σ N iが= 1、Xiは=K418×418のk=20x=argminx{0,1}n(xTC x)i=1nxi=k418×418k=20
カシミール

また、のどのエントリがGurobiによって1に設定されたかと、この貪欲な方法の間には正の相関がありました。x
Casimir
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.