我有一个大型数据集(假设有10,000个变量,每个变量大约有1000个元素),我们可以将其视为2D列表,例如:
[[variable_1],
[variable_2],
............
[variable_n]
]
我想从该数据中提取高度相关的变量对。我希望“高度相关”成为我可以选择的参数。
我不需要提取所有对,并且我不一定需要最相关的对。只要有一种有效的方法让我高度相关,我很高兴。
此外,如果变量不会出现在多个对中,那就太好了。虽然这可能不是至关重要的。
当然,有一种蛮力的方法可以找到这样的对,但对我来说太慢了。
我已经搜索了一下,发现了一些关于这个问题的理论工作,但我找不到能够做我想要的东西的包。我主要在python中工作,所以python中的一个包最有帮助,但是如果R中有一个包来做我正在寻找的东西就会很棒。
有没有人知道在Python或R中执行上述操作的程序包?还是其他任何想法?
提前感谢
答案 0 :(得分: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秒。这太慢了吗?
答案 1 :(得分:0)
10,000 x 1,000听起来不像是一个尺寸问题。查看pandas
答案 2 :(得分:0)
对于 R:
# load data
library(ISLR)
# Corrlation of numeric columns
corr = cor(College[sapply(College, is.numeric)])
# Display |correlations| > 0.55
as.data.frame(apply(corr, 2, function(x) ifelse (abs(x) >=0.55, round(x,3), "-")))
输出片段
#> Apps Accept Enroll Top10perc Top25perc F.Undergrad P.Undergrad
#> Apps 1 0.943 0.847 - - 0.814 -
#> Accept 0.943 1 0.912 - - 0.874 -
#> Enroll 0.847 0.912 1 - - 0.965 -
#> Top10perc - - - 1 0.892 - -
#> Top25perc - - - 0.892 1 - -
#> F.Undergrad 0.814 0.874 0.965 - - 1 0.571
#> P.Undergrad - - - - - 0.571 1