最大化组内相关性,同时最小化组间相关性

时间:2017-10-18 06:05:41

标签: python r machine-learning data-science

我试图弄清楚是否有办法找到一种方法来对对象进行排序,从而最大限度地提高组内相关性并最大限度地减少组间相关性。

例如,让数据帧DF包含12列s1到s12,每列包含100个观测值。假设每个代表股票的回报。

我想找到一种方法将这些数据分为3组4个变量,这将最大化组内相关性并最小化组间相关性。 假设Pearson方法运作良好,

df_cor <- cor(df)

这将给出一个12x12的相关矩阵。

我的直觉是通过使用这个相关矩阵,我应该制作一个代码来只选择能给出最大相关系数总和的唯一对,但我有点迷失。

你们有没有提供关于如何做到的提示?

我的真实数据有2000列,每列有3000个观察值,我必须将它们分成10组。

我是用R做的,但我也可以用python做它。

感谢阅读!

1 个答案:

答案 0 :(得分:0)

前段时间我写了一个函数(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

...............