Bir korelasyon matrisinden en az korelasyonlu rasgele değişken alt kümesi


10

Bir korelasyon matrisim var AMatlab'ın düzeltme () ile Pearson doğrusal korelasyon katsayısını kullanarak elde ettiğim . 100x100 boyutundaki korelasyon matrisi, yani I 100 rastgele değişken üzerindeki korelasyon matrisini hesapladım.

Bu 100 rasgele değişken arasında, korelasyon matrisi mümkün olduğunca "küçük korelasyon" içeren 10 rasgele değişkeni bulmak istiyorum (bkz. Bir korelasyon matrisi A'nın ölçülecek metriklerle ilgili olarak bir korelasyon matrisi B'nin ne kadar "daha fazla korelasyon" içerdiğini belirleme korelasyon matrisindeki genel korelasyon). Sadece ikili ilişkiyi önemsiyorum.

Bu 10 rastgele değişkeni makul bir sürede bulmak için iyi yöntemler var mı (örneğin kombinasyonlarını denemek istemiyorum )? Yaklaşık algoritmalar tamam.(10010)


1
metrics to measure the overall correlation. Özellikle determinant hakkında mı düşünüyorsun?
ttnphns

1

1
Log-belirleyici (bakınız sayfa 18 bir Altmodüler fonksiyonudur burada ). Maalesef artmıyor, bu da klasik 11/e açgözlü yaklaşım sonucunun geçerli olmadığı anlamına geliyor, ancak yine de bir şekilde yardımcı olabilir gibi görünüyor ....
Dougal

1
Bunun yerine, korelasyonun ortalama değerini kullanmak istiyorsanız, bu , elbette NP-sert olan ancak yaklaşım algoritmaları üzerinde bazı çalışmalar görmüş bir maksimum kenar ağırlığı kırpma problemi haline gelir .
Dougal

3
Küme analizi ile bu basit fikir ne olacak? Almesafe (farklılık) ve seçilen bir yöntemle kümeleme yapmak (muhtemelen Ward veya ortalama bağlantı hiyerarşik seçerim). 10 öğeden oluşan en sıkı kümeyi seçin. |r|
ttnphns

Yanıtlar:


3

Seçim ölçümüz olarak mutlak ikili korelasyonların toplamını ele alalım. Böylece en aza indirecek olan ile bir vektör ; burada.v{0,1}Nl1(v)=nvQvQij=|Aij|

Q'nun A olarak da pozitif olduğunu varsayalım, sorun kuadratik kuadratik optimizasyon probleminin çözülmesine indirgenir:

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

Bu, aşağıdaki rahatlamayı önerir:

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

kullanıma hazır çözücüler kullanılarak kolayca çözülebilen; sonuç, içindeki en büyük bileşeni tarafından verilir .nv

Örnek matlab kodu:

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)

Bu komut dosyasının Python sürümüne şansınız var mı?
Casimir

2

Bu @ ttnphns'ın hiyerarşik kümeleme fikrinden daha kötü olabilir. Ancak: yı giderek artan bir alt-modüler objektif işlevi olarak kullanan bir makalede :logdet(I+A)

Vanchinathan, Marfurt, Robelin, Kossman ve Krause. Büyük Verilerden Değerli Öğeleri Keşfetmek . KDD 2015. ( doi , arXiv )

Bunun "en az ilişkili" ölçüsünün makul bir ölçüsü olduğunu düşünüyorsanız, bunu en üst düzeye çıkaracak noktayı yineleyerek seçerek en uygun kümenin faktörüne girebilirsiniz . Bu, blok LU ayrışması ile verimli bir şekilde yapılabilir , burada , matristeki girişlerle korelasyonların vektörüdür: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)

ve elbette , burada , Cholesky çarpanlarına ve bir üçgen çözücü kullanır ki . Bu süreç almalıdır Böylece almak için bir zaman üzerinden ilişkiyi gösteren bir tablo varsayarak elemanlarının önceden hesaplanır .vT(I+A)1v=L1v2LI+AO(n2)O(k=1nNk2+k3)=O(Nn3)nN


Kağıdın bağlantısı ölü gibi görünüyor. Kullanışlı bir alıntı var mı?
Sycorax, Reinstate Monica'yı

@Sycorax Wayback Machine'de mevcut , ancak web'de güncel bir kopya bulamadım. Bu atölye çalışmasının cevaba eklediğim bir konferans kağıdına dönüştürüldüğü anlaşılıyor .
Dougal

1

Ne demek istediğinizi tam olarak anladığımdan emin değilim, "sadece ikili korelasyonu önemsiyorum" , ama yardımcı olabilecek bir şey var: korelasyon matrisinizin tersini kullanın. terimi eşittir , olan x matrisi inşa burada sütunu ve satırı kaldırılmıştır.Aii1det(A0i)/det(A)A0i(n1)(n1)Ai

de minimum diyagonal katsayının indeksini almak , setin geri kalanı ile en düşük korelasyonun hangi noktanın olduğunu gösterir.A1

Gerçekte ne yapmak istediğinize bağlı olarak, eviricinin diyagonalindeki en düşük 10 değeri alabilir veya ilkini alabilir, ardından evirmeyi silinen nokta ile hesaplayabilirsiniz ve bu şekilde devam edebilirsiniz.

İhtiyacınız olan şey bu değilse, bu hile hala yardımcı olabilir gibi hissediyorum, ama nasıl olsa emin değilim.


0

Bul bir az İkili korelasyon olan öğeler: söz hakkından bir korelasyon yana açıklıyor o hedef için korelasyon karelerinin toplamını en aza indirmek için daha mantıklı iki seri arasında ilişki kalemleri. İşte benim basit çözümüm.kn0.60.36k

korelasyon matrisinizi bir korelasyon kareleri matrisine yeniden yazın . Her sütunun karelerini toplayın. En yüksek toplamı içeren sütunu ve ilgili satırı eleyin. Artık matrisiniz var. matrisiniz olana kadar tekrarlayın . Ayrıca, sadece içeren sütunlar ve ilgili satırları tutmak en küçük toplamlar. Yöntemleri karşılaştırarak, ve olan bir matriste , yakın toplamı olan sadece iki maddenin farklı tutulduğunu ve elendiğini buldum .n×n(n1)×(n1)k×kkn=43k=20


2
Bu işe yarayabilir, ancak kulağa geçici (açgözlü bir algoritma gibi okunur) gelir ve çalışmasını öneren herhangi bir matematiksel neden sunmadınız. Çalışacağı konusunda herhangi bir güvenceniz var mı veya en iyi çözüme ne kadar yaklaşacağına dair sınırlarınız var mı?
whuber

Kullandığım Gurobi dalını ve bağlanan çözmek tabi , korelasyon matrisi ve için optimallik . 8.13'lük bir nihai objektif değer elde ettim. Karşılaştırma için, bu açgözlü yöntem 42.87'ye ulaşırken, rasgele seçimin 62.07'lik beklenen bir objektif değeri vardı. O kadar büyük değil ama aynı zamanda işe yaramaz. Ve bu yöntem kesinlikle sadeliği ve hızı var! x=argminx{0,1}n(xTC x)i=1nxi=k418×418k=20
Casimir

Ayrıca girişlerinin Gurobi tarafından bire ayarlandığı ve bu açgözlü yöntem arasında pozitif bir korelasyon vardı. x
Casimir
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.