4

我有一个大数据集(假设有 10,000 个变量,每个变量约有 1000 个元素),我们可以将其视为 2D 列表,例如:

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

我想从该数据中提取高度相关的变量对。我希望“高度相关”成为我可以选择的参数。

我不需要提取所有对,也不一定想要最相关的对。只要有一种有效的方法可以让我得到高度相关的配对,我就会很高兴。

此外,如果一个变量的出现不超过一对,那就太好了。尽管这可能并不重要。

当然,找到这样的对有一种蛮力的方法,但对我来说太慢了。

我用谷歌搜索了一下,发现了一些关于这个问题的理论工作,但我无法找到一个可以做我正在寻找的包。我主要在 python 中工作,所以 python 中的包将是最有帮助的,但如果 R​​ 中存在一个包,它可以满足我的需求,它会很棒。

有谁知道在 Python 或 R 中执行上述操作的包?还是有其他想法?

先感谢您

4

3 回答 3

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 秒。是不是太慢了?

于 2012-06-29T22:34:36.147 回答
0

10,000 x 1,000 听起来不是什么大小问题。看看熊猫

于 2012-06-29T21:05:31.620 回答
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
于 2021-01-04T00:07:23.043 回答