【问题标题】:AgglomerativeClustering on a correlation matrix相关矩阵上的凝聚聚类
【发布时间】:2016-10-01 11:26:19
【问题描述】:

我有一个典型结构的相关矩阵,其大小为 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

并获得 0.20 的最小成对相关性

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

我想预测/强制集群的每个成对相关性 >=.7 或类似的东西。

这在 AgglomerativeClustering 中可行吗?

我是不是不小心走错了路?

【问题讨论】:

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


    【解决方案1】:

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

    • single-link:将距离最短的点连接到集群中的其他点
    • complete-link:根据到集群的最大距离进行连接
    • ...

    如果你想要一个高的最小相关性 = 小的最大距离,这需要完整的链接。

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

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

    【讨论】:

      猜你喜欢
      • 2018-04-10
      • 2015-01-07
      • 2018-04-29
      • 2017-08-06
      • 2019-02-05
      • 2020-01-23
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多