Eu tenho uma matriz de correlação , que eu obtive usando o coeficiente de correlação linear de Pearson através docorrcoefde Matlab(). A matriz de correlação da dimensão 100x100, ou seja, eu calculei a matriz de correlação em 100 variáveis aleatórias.
Entre essas 100 variáveis aleatórias, gostaria de encontrar as 10 variáveis aleatórias cuja matriz de correlação contém o mínimo possível de correlação (consulte Quantificando quanto "mais correlação" uma matriz de correlação A contém em comparação com uma matriz de correlação B em relação às métricas a serem medidas a correlação geral em uma matriz de correlação). Eu só me preocupo com a correlação pareada.
Existem bons métodos para encontrar essas 10 variáveis aleatórias em um período de tempo razoável (por exemplo, eu não quero tentar combinações )? Algoritmos de aproximação estão OK.
fonte
metrics to measure the overall correlation
. Você está pensando especificamente sobre o determinante?Respostas:
Vamos considerar a soma das correlações absolutas aos pares como nossa medida de escolha. Assim, buscamos um vetor com que minimizará onde.v∈{0,1}N l1(v)=n v′Qv Qij=|Aij|
Suponha que Q também seja positivo definido como A, o problema é reduzido para resolver o problema de otimização quadrática restrita:
Isso sugere o seguinte relaxamento:
que pode ser facilmente resolvido usando solucionadores prontos para uso; então o resultado é dado pelos maiores componentes em .n v∗
Exemplo de código matlab:
fonte
Isso pode ser pior do que a idéia de agrupamento hierárquico do @ ttnphns. Mas: acabei de encontrar um artigo que usa como uma função objetivo submodular crescente:logdet(I+A)
Se você acha que essa é uma medida razoável de "menos correlacionado", você pode obter um fator de do conjunto ideal, simplesmente escolhendo iterativamente o ponto que maximiza isso. Isso pode ser feito eficientemente com a decomposição da LU do bloco , em que é o vetor de correlações para entradas já na matriz:1−1/e v
e, é claro, você deve calcular , onde é a fatoração de Cholesky de e usando um solucionador triangular que é . Portanto, todo esse processo deve levar tempo para selecionar dentre elementos, assumindo que a matriz de correlação já esteja computada .vT(I+A)−1v=∥L−1v∥2 L I+A O(n2) O(∑nk=1Nk2+k3)=O(Nn3) n N
fonte
Não tenho certeza de entender completamente o que você quer dizer com "Só me preocupo com a correlação por pares" , mas aqui está algo que pode ajudar: use o inverso da sua matriz de correlação. O termo é igual a , onde é a matriz x construída a partir de onde a ésima coluna e linha foram removidas.A−1ii det(A0i)/det(A) A0i (n−1) (n−1) A i
Obter o índice do coeficiente diagonal mínimo em indica o ponto que tem a menor correlação com o restante do conjunto.A−1
Dependendo do que você realmente deseja fazer, você pode pegar os 10 valores mais baixos na diagonal do inversor ou obter o primeiro, depois calcular o inversor com o ponto excluído e assim por diante.
Se não é isso que você precisa, acho que esse truque ainda pode ser útil, mas não sei como.
fonte
Encontre de itens com a correlação menos pareada: Como uma correlação de explica da relação entre duas séries, faz mais sentido minimizar a soma dos quadrados das correlações dos itens de destino . Aqui está a minha solução simples.k n 0.6 0.36 k
Reescreva sua matriz de correlações para uma matriz de quadrados de correlações. Soma os quadrados de cada coluna. Elimine a coluna e a linha correspondente com a maior soma. Agora você tem uma matriz . Repita até que você tenha uma matriz . Você também pode manter as colunas e as linhas correspondentes com as menores somas. Comparando os métodos, descobri em uma matriz com e que apenas dois itens com somas próximas foram mantidos e eliminados de maneira diferente.n×n (n−1)×(n−1) k×k k n=43 k=20
fonte