2012-06-29 1 views
4

У меня есть большой набор данных (скажем, 10 000 переменных с примерно 1000 элементами каждый), мы можем рассматривать его как 2D-список, например:Эффективный способ получить сильно коррелированные пары из большого набора данных в Python или R

[[variable_1], 
[variable_2], 
............ 
[variable_n] 
] 

Я хочу извлечь высококоррелированные пары переменных из этих данных. Я хочу, чтобы «сильно коррелированный» был параметром, который я могу выбрать.

Мне не нужны все пары, которые нужно извлечь, и мне не обязательно нужны наиболее коррелированные пары. Пока есть эффективный метод, который дает мне сильно коррелированные пары, я доволен.

Также было бы неплохо, если бы переменная не отображалась более чем в одной паре. Хотя это может быть не очень важно.

Конечно, есть способ грубой силы найти такие пары, но для меня это слишком медленно.

Я немного искал язык и нашел теоретическую работу по этой проблеме, но мне не удалось найти пакет, который мог бы делать то, что я ищу. Я в основном работаю на python, поэтому пакет в python будет наиболее полезен, но если в R есть пакет, который делает то, что я ищу, это будет здорово.

Кто-нибудь знает о пакете, который делает выше в Python или R? Или любые другие идеи?

Спасибо заранее

+0

О каком количестве переменных мы говорим? –

+0

Скажем, 10 000 переменных, каждая из которых содержит около 1000 элементов. – Akavall

+0

Хотите поделиться указателями или резюме теоретической работы, которую вы нашли? –

ответ

0

10000 на 1000 не походит на большую часть вопроса размера. Выезд pandas

+1

Можете ли вы предложить некоторые конкретные функции в Пандах? – Akavall

9

Вы не сказали нам, как быстро вам нужно быть быстрым, поэтому вот наивное решение.

Просто вычислить корреляционную матрицу, а затем использовать which, чтобы получить индексы пара вы после:

x <- matrix(rnorm(10000*1000), ncol = 10000) 
corm <- cor(x) 
out <- which(abs(corm) > 0.80, arr.ind=TRUE) 

Вы можете использовать Подмените, чтобы избавиться от диагональных и резервированных пар:

out[out[,1] > out[,2]] 

Вычисление корреляционной матрицы занимает около 75 секунд на моей машине, часть which() занимает около 3 секунд ... Подмножество избыточности занимает около 1,2 секунды. Это слишком медленно?

+0

Спасибо за ваш ответ. Когда я пытаюсь создать корреляционную матрицу в python, он падает (не дает ошибки памяти, хотя я думаю, что это проблема с ram), поэтому для меня это не вариант. – Akavall

+0

С другой стороны, я мог бы просто разбить свои исходные данные на более мелкие куски и найти корреляционные матрицы из них. Это займет меньше памяти. – Akavall

+0

@Akavall - FYI код выше находится в R, а не python. Не уверен, что ваш комментарий подразумевает, что вы пытаетесь запустить вышеуказанный код в python или нет ...Я сомневаюсь, что это сработает, так как это код R :) – Chase

Смежные вопросы