Am wenigsten korrelierte Teilmenge von Zufallsvariablen aus einer Korrelationsmatrix

10

Ich habe eine Korrelationsmatrix , die ich unter Verwendung des linearen Korrelationskoeffizienten nach Pearson durch Matlab's corrcoef () erhalten habe . Die Korrelationsmatrix der Dimension 100x100, dh ich habe die Korrelationsmatrix für 100 Zufallsvariablen berechnet.A

Unter diesen 100 Zufallsvariablen möchte ich die 10 Zufallsvariablen finden, deren Korrelationsmatrix so wenig Korrelation wie möglich enthält (siehe Quantifizieren, wie viel "mehr Korrelation" eine Korrelationsmatrix A im Vergleich zu einer Korrelationsmatrix B in Bezug auf zu messende Metriken enthält die Gesamtkorrelation in einer Korrelationsmatrix). Ich kümmere mich nur um paarweise Korrelation.

Gibt es gute Methoden, um diese 10 Zufallsvariablen in angemessener Zeit zu finden (z. B. möchte ich keine (10010) -Kombinationen ausprobieren )? Approximationsalgorithmen sind in Ordnung.

Franck Dernoncourt
quelle
1
metrics to measure the overall correlation. Sie denken speziell über die Determinante nach?
ttnphns
1
Eine sehr ähnliche Frage stats.stackexchange.com/q/73125/3277 .
ttnphns
1
Die logarithmische Determinante ist eine submodulare Funktion (siehe Seite 18 hier ). Es nimmt leider nicht zu, was bedeutet, dass das klassische 11/e Ergebnis der gierigen Approximation nicht zutrifft, aber es scheint immer noch irgendwie hilfreich zu sein ...
Dougal
1
Wenn Sie stattdessen den Mittelwert der Korrelation verwenden möchten, wird dies zu einem Clique-Problem mit maximalem Kantengewicht , das natürlich NP-hart ist, aber einige Arbeiten an Approximationsalgorithmen gesehen hat.
Dougal
3
Was ist mit dieser einfachen Idee mit Clusteranalyse? Nimmals Abstand (Unähnlichkeit) und Clustering nach einer ausgewählten Methode (ich würde wahrscheinlich Ward oder durchschnittliche Verknüpfungshierarchie wählen). Wählen Sie den engsten Cluster aus 10 Elementen. |r|
ttnphns

Antworten:

3

Betrachten wir die Summe der absoluten paarweisen Korrelationen als unser Maß für die Wahl. Damit haben wir einen Vektor suchen mit denen minimieren wo.l 1 ( v ) = n v ' Q v Q i j = | A i j |v{0,1}Nl1(v)=nvQvQij=|Aij|

Angenommen, Q ist auch als A eindeutig positiv, dann wird das Problem auf die Lösung des eingeschränkten quadratischen Optimierungsproblems reduziert:

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

Dies deutet auf folgende Entspannung hin:

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

die mit handelsüblichen Lösern leicht gelöst werden kann; dann ist das Ergebnis durch die größten Komponenten in .v nv

Beispiel für einen Matlab-Code:

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)
Uri Cohen
quelle
Haben Sie zufällig eine Python-Version dieses Skripts?
Casimir
2

Dies ist möglicherweise schlimmer als die hierarchische Clustering-Idee von @ ttnphns. Aber: Ich bin gerade auf ein Papier gestoßen , das als zunehmende submodulare Zielfunktion verwendet:logdet(I+A)

Vanchinathan, Marfurt, Robelin, Kossman und Krause. Erkennen wertvoller Gegenstände aus massiven Daten . KDD 2015. ( doi , arXiv )

Wenn Sie der Meinung sind, dass dies ein vernünftiges Maß für "am wenigsten korreliert" ist, können Sie einen Faktor der optimalen Menge erreichen, indem Sie einfach iterativ den Punkt auswählen, der dies maximiert. Dies kann effizient mit der Block-LU-Zerlegung durchgeführt werden , wobei der Korrelationsvektor zu Einträgen ist, die sich bereits in der Matrix befinden:11/evv

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)

und natürlich sollten Sie berechnen , wobei die Cholesky-Faktorisierung von und einen Dreieckslöser verwendet das ist . Dieser gesamte Prozess sollte also Zeit benötigen, um aus Elementen auszuwählen , vorausgesetzt, die Korrelationsmatrix ist bereits berechnet .vT(I+A)1v=L1v2LI+AO(n2)O(k=1nNk2+k3)=O(Nn3)nN

Dougal
quelle
Es sieht so aus, als ob der Link zum Papier tot ist. Haben Sie ein Zitat zur Hand?
Sycorax sagt Reinstate Monica
@Sycorax Es ist auf der Wayback-Maschine verfügbar , aber ich konnte keine aktuelle Kopie im Web finden. Es sieht so aus, als wäre aus dem Workshop-Papier ein Konferenzpapier geworden , das ich der Antwort hinzufüge.
Dougal
1

Ich bin mir nicht sicher, ob Sie vollständig verstehen, was Sie unter "Ich kümmere mich nur um die paarweise Korrelation" verstehen , aber hier ist etwas, das helfen kann: Verwenden Sie die Invertierung Ihrer Korrelationsmatrix. Die Term ist gleich , wo ist die x Matrix von eingebauten wo die te Spalte und Zeile entfernt wurden.Aii1det(A0i)/det(A)A0i(n1)(n1)Ai

Wenn Sie den Index des minimalen Diagonalkoeffizienten in erfahren Sie, welcher Punkt die niedrigste Korrelation zum Rest der Menge aufweist.A1

Je nachdem, was Sie tatsächlich tun möchten, können Sie entweder die 10 niedrigsten Werte auf der Diagonale der Invertierung verwenden oder den ersten erhalten und dann die Invertierung mit dem gelöschten Punkt berechnen und so weiter.

Wenn dies nicht das ist, was Sie brauchen, könnte dieser Trick immer noch hilfreich sein, aber ich bin mir nicht sicher, wie.

Romain Reboulleau
quelle
0

Finden von Elementen mit der geringsten paarweise Korrelation: Da eine Korrelation von etwa erklärt der Beziehung zwischen zwei Serien es mehr Sinn macht , die Summe der Quadrate der Korrelationen für Ihr Ziel zu minimieren Elemente. Hier ist meine einfache Lösung.kn0.60.36k

Schreiben Sie Ihre Korrelationsmatrix in eine Matrix von Korrelationsquadraten um. Summiere die Quadrate jeder Spalte. Beseitigen Sie die Spalte und die entsprechende Zeile mit der größten Summe. Sie haben jetzt eine Matrix. Wiederholen Sie diesen Vorgang, bis Sie eine Matrix haben. Sie können auch einfach die Spalten und entsprechenden Zeilen mit den kleinsten Summen behalten . Beim Vergleich der Methoden stellte ich in einer Matrix mit und dass nur zwei Elemente mit engen Summen unterschiedlich aufbewahrt und eliminiert wurden.( n - 1 ) × ( n - 1 )n×n(n1)×(n1)k n = 43 k = 20k×kkn=43k=20

Jon Arts
quelle
2
Dies mag funktionieren, klingt aber ad hoc (es liest sich wie ein gieriger Algorithmus) und Sie haben keine mathematischen Gründe angegeben, die darauf hindeuten, dass es funktionieren sollte. Haben Sie die Gewissheit, dass es funktionieren wird, oder Grenzen, wie nahe es der besten Lösung kommt?
whuber
Ich verwendete Gurobi Niederlassung und gebunden zu lösen unterliegen zur Optimalität für eine Korrelationsmatrix und . Ich habe einen endgültigen Zielwert von 8,13 erhalten. Zum Vergleich erreichte diese gierige Methode 42,87, während die zufällige Auswahl einen erwarteten Zielwert von 62,07 hatte. Also nicht so toll, aber auch nicht nutzlos. Und diese Methode hat sicher Einfachheit und Geschwindigkeit! n i = 1 xi=k418×418k=20x=argminx{0,1}n(xTC x)i=1nxi=k418×418k=20
Casimir
Es gab auch eine positive Korrelation zwischen den Einträgen von die von Gurobi auf eins gesetzt wurden, und dieser gierigen Methode. x
Casimir