我试图弄清楚是否有一种方法可以找到一种方法来对对象进行排序,从而最大化组内相关性并最小化组间相关性。
例如,假设有一个数据框 DF,包含 12 列 s1 到 s12,每列有 100 个观测值。假设每个都代表股票返回率。
我想找到一种方法将这些数据分为 3 组,每组 4 个变量,从而最大化组内相关性并最小化组间相关性。 假设 Pearson 方法效果良好,
df_cor <- cor(df)
这将给出一个 12x12 相关矩阵。
我的直觉是,通过使用这个相关矩阵,我应该编写一个代码来仅选择能够给出最大相关系数总和的唯一对,但我有点迷失了。
你们中的任何人都可以提供有关如何执行此操作的提示吗?
我的真实数据有 2000 列,每列有 3000 个观察值,我必须将它们分为 10 组。
我用 R 来做,但我也可以用 python 做。
感谢您的阅读!
最佳答案
不久前我写了一个函数 (func_correlation)它采用(预测变量的)矩阵或数据框,并返回高度相关的对,同时考虑到许多参数。希望这是您真正要问的。
示例数据,
lst_s = list()
set.seed(1)
for (i in 1:12) {
nam = paste0("s_", i)
lst_s[[nam]] = runif(100)
}
s_matr = do.call(cbind, lst_s)
通过使用devtools::install_github('mlampros/FeatureSelection')您可以安装该包然后运行,
dat = FeatureSelection::func_correlation(s_matr, target = NULL, correlation_thresh = 0.05, use_obs = "everything", correlation_method = "pearson")
# here the *correlation_thresh* is low because I use random data, adjust it to your needs
它返回一个列表 (out_list) 和一个数据框 (out_df)。该列表显示了高于 correlation_thresh 的各个预测变量的相关性,
$out_list
$out_list[[1]]
s_1
s_3 0.14450632
s_6 0.10891246
s_7 0.13232308
s_8 0.07818346
s_9 0.06381170
$out_list[[2]]
s_2
s_10 0.1380704
s_11 0.1737746
.........
而数据框显示了高于 correlation_thresh 的所有预测变量对,
$out_df
predictor1 predictor2 prob
1 s_3 s_1 0.14450632
2 s_6 s_1 0.10891246
3 s_7 s_1 0.13232308
4 s_8 s_1 0.07818346
5 s_9 s_1 0.06381170
6 s_10 s_2 0.13807039
7 s_11 s_2 0.17377459
8 s_4 s_3 0.10395950
9 s_6 s_3 0.21541706
...............
关于python - 最大化组内相关性,同时最小化组间相关性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46803764/