AgglomerativeClustering在相关矩阵上

时间:2016-06-01 22:23:34

标签: python scikit-learn cluster-analysis hierarchical-clustering

我有一个典型结构的相关矩阵,大小为288x288,定义如下:

from sklearn.cluster import AgglomerativeClustering
df = read_returns()
correl_matrix = df.corr()

其中read_returns为我提供了一个带有日期索引的数据框,以及资产回报的列。

现在 - 我希望将这些相关性聚类以减少种群数量。

通过做一些阅读和实验,我发现了AgglomerativeClustering - 它在第一次通过时似乎是我问题的合适解决方案。

我将距离指标定义为((.5*(1-correl_matrix))**.5)并且具有:

cluster = AgglomerativeClustering(n_clusters=40, linkage='average')
cluster.fit(((.5*(1-correl_matrix))**.5).values)
label_groups = cluster.labels_

为了观察一些数据并交叉检查我的工作,我选择了群集1并观察成对相关性,并在我的数据集中找到与该群组相关的两个项目之间的最小相关性:

single_cluster = []
for i in range(0,correl_matrix.shape[0]):
    if label_groups[i]==1:
        single_cluster.append(correl_matrix.index[i])

min_correl = 1.0
for x in single_cluster:
    for y in single_cluster:
        if x<>y:
            if correl_matrix[x][y]<min_correl:
                min_correl = correl_matrix[x][y]

print min_correl

得到.20

的最小成对相关性

对我而言,这似乎相当低 - 但“基于什么低”?这是一个公平的问题,我没有答案。

我希望预测/强制群集的每个成对相关性为&gt; =。7或类似的东西。

这是否可以在AgglomerativeClustering中使用?

我是不是意外地走错了路?

1 个答案:

答案 0 :(得分:0)

分层聚类支持不同的“链接”策略。

  • 单链接:这会将与群集中其他距离最小距离的点连接起来
  • complete-link:根据到群集的最大距离进行连接
  • ...

如果您想要一个较高的最小相关=较小的最大距离,则需要完全连接。

您可能也希望将负相关视为“好”。 即使用dist = 1 - abs(corr)

确保使用ghe树形图。如果您的数据中有异常值,则需要切入(n_clusters + n_outliers)分区。