gpt4 book ai didi

python - 如何使用相关系数矩阵进行聚类?

转载 作者:行者123 更新时间:2023-12-04 18:32:36 26 4
gpt4 key购买 nike

我有一个相关系数矩阵 (n*n)。如何使用相关系数矩阵进行聚类?

我可以在 SciPy 中使用链接和 fcluster 函数吗?

联动功能需要n * m矩阵(根据教程),但我想使用 n*n 矩阵。

我的代码是

corre = mp_N.corr()    # mp_N is raw data (m*n matrix)  
Z = linkage(corre, method='average') # 'corre' is correlation coefficient matrix
fcluster(Z,2,'distance')

这段代码对吗?
如果此代码错误,我该如何使用相关系数矩阵进行聚类?

最佳答案

使用相关矩阵对数据进行聚类是一个合理的想法,但必须首先对相关性进行预处理。首先是相关矩阵,由 numpy.corrcoef 返回, 受机器算术误差的影响:

  • 它并不总是对称的。
  • 对角线项并不总是正好是 1

  • 这些可以通过对转置取平均值并用 1 填充对角线来修复:
    import numpy as np
    data = np.random.randint(0, 10, size=(20, 10)) # 20 variables with 10 observations each
    corr = np.corrcoef(data) # 20 by 20 correlation matrix
    corr = (corr + corr.T)/2 # made symmetric
    np.fill_diagonal(corr, 1) # put 1 on the diagonal

    二、任意聚类方法的输入,如 linkage ,需要测量 差异的对象。相关性度量 相似度 .所以需要进行转换,使得0相关映射到一个大数,而1相关映射到0。

    This blog post讨论了这种数据转换的几种方法,并推荐 dissimilarity = 1 - abs(correlation) .这个想法是,强负相关也表明对象是相关的,就像正相关一样。下面是这个例子的继续:
    from scipy.cluster.hierarchy import linkage, fcluster
    from scipy.spatial.distance import squareform

    dissimilarity = 1 - np.abs(corr)
    hierarchy = linkage(squareform(dissimilarity), method='average')
    labels = fcluster(hierarchy, 0.5, criterion='distance')

    请注意,我们没有将全距离矩阵输入 linkage , 需要用 squareform 压缩第一的。

    使用什么确切的聚类方法以及阈值取决于您的问题的上下文,没有通用规则。通常,0.5 是用于相关性的合理阈值,所以我这样做了。使用我的 20 组随机数,我最终得到了 7 个簇:在 labels 中编码作为
    [7, 7, 7, 1, 4, 4, 2, 7, 5, 7, 2, 5, 6, 3, 6, 1, 5, 1, 4, 2] 

    关于python - 如何使用相关系数矩阵进行聚类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38070478/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com