Наименее коррелированное подмножество случайных величин из корреляционной матрицы


10

У меня есть корреляционная матрица A , которую я получил, используя коэффициент линейной корреляции Пирсона через функцию Matlab corrcoef () . Корреляционная матрица размерности 100x100, т.е. я вычислил корреляционную матрицу на 100 случайных величин.

Среди этих 100 случайных величин я хотел бы найти 10 случайных величин, чья матрица корреляции содержит как можно меньшую «корреляцию» (см. Количественную оценку того, насколько «больше корреляции» содержит матрица корреляции A по сравнению с матрицей B корреляции для измерения метрик общая корреляция в корреляционной матрице). Я забочусь только о парной корреляции.

Существуют ли хорошие методы, чтобы найти эти 10 случайных величин за разумное время (например, я не хочу пробовать комбинации )? Алгоритмы аппроксимации в порядке.(10010)


1
metrics to measure the overall correlation, Вы думаете конкретно об определителе?
ttnphns

1
Очень похожий вопрос stats.stackexchange.com/q/73125/3277 .
ttnphns

1
Лог-определитель является субмодулярной функцией (см. Стр. 18 здесь ). К сожалению, оно не увеличивается, а это означает, что классический результат жадного приближения не применяется, но все равно кажется, что это может быть как-то полезно ...1-1/е
Дугал

1
Если вместо этого вы хотите использовать среднее значение корреляции, это становится проблемой клики с максимальным весом ребра , которая, конечно, NP-сложная, но в ней были некоторые работы по алгоритмам аппроксимации.
Дугал

3
Как насчет этой простой идеи с кластерным анализом. Взять как расстояние (различие) и делать кластеризацию выбранным методом (я бы, вероятно, выбрал Ward или среднее иерархическое связывание). Выберите самый жесткий кластер, состоящий из 10 предметов. |р|
ttnphns

Ответы:


3

Давайте рассмотрим сумму абсолютных парных корреляций в качестве нашей меры выбора. Таким образом, мы ищем вектор с l 1 ( v ) = n, который минимизирует v Q v, где Q i j = | A i j | ,v{0,1}NL1(v)знак равноNv'QvQяJзнак равно|AяJ|

Предположим, что Q также положительно определен как A, задача сводится к решению ограниченной задачи квадратичной оптимизации:

v*знак равномин v'Qv s,T, L1(v)знак равноN, vя{0,1}

Это предполагает следующее расслабление:

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

которая может быть легко решена с помощью готовых решателей; тогда результат дается наибольшими компонентами в v .nv*

Пример кода 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)

Есть ли у вас Python-версия этого скрипта случайно?
Казимир

2

Это может быть хуже, чем идея иерархической кластеризации @ ttnphns. Но: я только что натолкнулся на статью, в которой журналйе(я+A) в качестве растущей субмодульной целевой функции:

Ванчинатан, Марфурт, Робелин, Коссман и Краузе. Обнаружение ценных предметов из массивных данных . KDD 2015. ( doi , arXiv )

Если вы считаете, что это разумная мера «наименее коррелированной», вы можете получить коэффициент 1-1/е оптимального набора, просто итеративно выбирая точку, которая максимизирует это. Это может быть эффективно выполнено с помощью блока разложения LU , где v - вектор корреляций с записями, уже находящимися в матрице:

det[I+AvvT2]знак равнойе([я0vT(я+A)-11][я+A002-vT(я+A)-1v][я(я+A)-1v01])знак равнойе[я0vT(я+A)-11]йе[я+A002-vT(я+A)-1v]йе[я(я+A)-1v01]знак равно(2-vT(я+A)-1v)йе(я+A)

и, конечно, вы должны вычислить vT(я+A)-1vзнак равно| |L-1v| |2 , гдеL - факторизация Холецкого дляя+A и используя треугольный решатель, который равенО(N2) . Так что весь этот процесс должен занятьO(k=1nNk2+k3)=O(Nn3) время выбратьn изN элементов, предполагая, что корреляционная матрица уже вычислена.


Похоже, ссылка на газету мертва. Есть ли у вас под рукой цитата?
Sycorax сообщает, что восстановит Монику

@Sycorax Он доступен на Wayback Machine , но я не смог найти текущую копию в Интернете. Похоже, что этот семинар был превращен в документ конференции , который я добавляю к ответу.
Дугал

1

Я не совсем понимаю, что вы подразумеваете под «меня волнует только парная корреляция» , но вот что может помочь: используйте инверсию вашей корреляционной матрицы. - 1 я я член равен д е т (Aii1dеT(A0я)/dеT(A) , где 0 я является ( п - 1 )A0я(N-1) х (N-1) матрица построена из A , где ястолбец и строка были удалены.

Таким образом, получение индекса минимального диагонального коэффициента в A-1 говорит вам, какая точка имеет наименьшую корреляцию с остальной частью набора.

В зависимости от того, что вы действительно хотите сделать, вы можете либо взять 10 самых низких значений по диагонали инвертирования, либо получить первое, затем вычислить инвертирование с удаленной точкой и так далее.

Если это не то, что вам нужно, я чувствую, что этот трюк может быть полезен, но я не уверен, как, хотя.


0

Найдите из n элементов с наименьшей попарной корреляцией: поскольку, скажем, корреляция 0,6 объясняет 0,36 отношения между двумя рядами, имеет больше смысла минимизировать сумму квадратов корреляций для ваших целевых k элементов. Вот мое простое решение.КN0.60,36К

Перепишите свою матрицу корреляций в матрицу квадратов корреляций. Суммируйте квадраты каждого столбца. Удалите столбец и соответствующую строку с наибольшей суммой. Теперь у вас есть ( n - 1 ) × ( n - 1 ) матрица. Повторяйте, пока не получите матрицу k × k . Вы также можете просто сохранить столбцы и соответствующие строки с k наименьшими суммами. Сравнивая методы, я нашел в матрице с n = 43 и k = 20N×N(N-1)×(N-1)К×ККNзнак равно43Кзнак равно20 что только два предмета с близкими суммами были по-разному сохранены и исключены.


2
Это может сработать, но это звучит ad hoc (читается как жадный алгоритм), и вы не предложили никаких математических причин, позволяющих предположить, что он должен работать. Есть ли у вас какие-либо гарантии того, что это сработает, или какие-либо ограничения на то, насколько близко оно подойдет к лучшему решению?
whuber

Я использовал ветвь Гуроби и решил: условии, что nИкс*знак равноArgминИкс{0,1}N(ИксTС Икс)Σязнак равно1NИксязнак равноК418×418Кзнак равно20, Я получил окончательное объективное значение 8,13. Для сравнения, этот жадный метод достиг 42,87, тогда как случайный отбор имел ожидаемое объективное значение 62,07. Так что не так здорово, но и не бесполезно. И у этого метода есть простота и скорость!
Казимир

Икс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.