Rozważmy sumę bezwzględnych korelacji par jako naszą miarę wyboru. Szukamy zatem wektora przy który zminimalizuje gdzie.v ∈ { 0 , 1}N.l1( v ) = nv′Q przeciwkoQI j= |ZAI j|
Załóżmy, że Q jest również pozytywnie określone jako A, problem sprowadza się do rozwiązania ograniczonego kwadratowego problemu optymalizacji:
v∗= min v′Q przeciwko s . t . l1( v ) = n , vja∈ { 0 , 1 }
To sugeruje następujący relaks:
v∗= min v′Q przeciwko s . t . l1( v ) = n , vja∈ [ 0 , 1 ]
które można łatwo rozwiązać za pomocą gotowych rozwiązań; wynik jest podawany przez największe składników w .nv∗
Przykładowy kod 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)
metrics to measure the overall correlation
. Myślisz konkretnie o wyznaczniku?