Mam macierz korelacji , którą uzyskałem za pomocą współczynnika korelacji liniowej Pearsona za pomocą corrcoef Matlaba () . Macierz korelacji o wymiarze 100x100, tj. Obliczyłem macierz korelacji na 100 zmiennych losowych.
Spośród tych 100 zmiennych losowych chciałbym znaleźć 10 zmiennych losowych, których macierz korelacji zawiera możliwie „małą korelację” (patrz Obliczanie, ile „więcej korelacji” zawiera matryca korelacji A w porównaniu do macierzy korelacji B w odniesieniu do metryk do pomiaru ogólna korelacja w macierzy korelacji). Dbam tylko o korelację par.
Czy istnieją dobre metody znalezienia tych 10 zmiennych losowych w rozsądnym czasie (np. Nie chcę próbować )? Algorytmy aproksymacyjne są OK.
correlation
Franck Dernoncourt
źródło
źródło
metrics to measure the overall correlation
. Myślisz konkretnie o wyznaczniku?Odpowiedzi:
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 ) = n v′Q przeciwko QI 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:
To sugeruje następujący relaks:
które można łatwo rozwiązać za pomocą gotowych rozwiązań; wynik jest podawany przez największe składników w .n v∗
Przykładowy kod Matlab:
źródło
Może to być gorsze niż hierarchiczna idea klastrowania @ ttnphns. Ale: Właśnie natrafiłem na artykuł, który używa jako rosnącej funkcji celu podmodularnego:logdet ( I+ A )
Jeśli uważasz, że jest to rozsądna miara „najmniej skorelowanej”, możesz uzyskać współczynnik optymalnego zestawu, po prostu iteracyjnie wybierając punkt, który ją maksymalizuje. Można to skutecznie zrobić z dekompozycją bloku LU , gdzie jest wektorem korelacji z wpisami już w macierzy:1 - 1 / e v
i oczywiście powinieneś obliczyć , gdzie jest Choleskiego na i za pomocą solwera trójkątnego czyli . Cały ten proces powinien więc zająć aby wybrać spośród elementów, zakładając, że macierz korelacji jest już obliczona .vT.( Ja+ A)- 1v = ∥L.- 1v∥2) L. ja+ A O (n2)) O (∑nk = 1N.k2)+k3)) = O ( Nn3)) n N.
źródło
Nie jestem do końca pewien, co rozumiesz przez „dbam tylko o korelację par” , ale oto coś, co może pomóc: użyj odwrócenia macierzy korelacji. Termin wynosi , w którym jest x matryca zbudowana z gdzie kolumna i wiersz zostały usunięte.A−1ii det(A0i)/det(A) A0i (n−1) (n−1) A i
Uzyskanie indeksu minimalnego współczynnika przekątnej w mówi zatem, który punkt ma najniższą korelację z resztą zbioru.A−1
W zależności od tego, co faktycznie chcesz zrobić, możesz wziąć 10 najniższych wartości na przekątnej inwertora lub uzyskać pierwszą, a następnie obliczyć inwertę z usuniętym punktem i tak dalej.
Jeśli nie jest to potrzebne, czuję, że ta sztuczka może być nadal pomocna, ale nie jestem pewien, jak to zrobić.
źródło
Znajdź z elementów z najmniejszej korelacji parami: Ponieważ korelacja Say wyjaśnia relacji między dwoma serii większy sens, aby zminimalizować sumę kwadratów korelacji dla docelowego przedmiotów. Oto moje proste rozwiązanie.k n 0,6 0,36 k
Przepisz swoją macierz korelacji do macierzy kwadratów korelacji. Zsumuj kwadraty każdej kolumny. Wyeliminuj kolumnę i odpowiadający jej wiersz o największej sumie. Masz teraz macierz . Powtarzaj, aż uzyskasz macierz . Możesz także zachować kolumny i odpowiadające im wiersze z najmniejszymi sumami. Porównując metody, znalazłem w macierzy i że tylko dwa elementy o bliskich sumach były różnie przechowywane i eliminowane.n × n ( n - 1 ) × ( n - 1 ) k × k k n = 43 k = 20
źródło