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

     2023-03-12     134

关键词:

【中文标题】如何使用相关系数矩阵进行聚类?【英文标题】:How to do clustering using the matrix of correlation coefficients? 【发布时间】:2016-10-30 10:37:26 【问题描述】:

我有一个相关系数矩阵 (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')

这段代码对吗? 如果这段代码有误,如何用相关系数矩阵进行聚类?

【问题讨论】:

没有示例数据、预期结果和返回结果,没有人可以判断您的代码是否正确。请创建一个Minimal, Complete, and Verifiable example。此外,您还可以在 scikit-learn 包中找到更多集群库和示例。 【参考方案1】:

使用相关矩阵对数据进行聚类是一个合理的想法,但必须先对相关性进行预处理。首先,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] 

【讨论】:

不错的答案!您提到的距离(相异性)和相关性(相似性)对我来说很重要。 squareform() 是相关的稠密矩阵形式和压缩向量形式之间转换的关键。在使相关性成为距离方面,让我补充一点,scipy 使用1 - corr,它与1 - abs(corr) 有不同的考虑。我不确定该使用哪一个,所以我决定遵循 scipy 的方式。 您的博文链接已过期。 我建议squareform(corr, checks=False, force='tovector')不要检查对角线元素(因为它们被丢弃)并强制转换方向。 labels 做什么来排序和绘制相关矩阵?

基于皮尔逊相关的聚类

...我需要对相似的资源进行分组(基于00小时到23:45的流量使用模式)。检查两个资源是否具有相似流量行为的一种方法是,我可以对所有资源使用Pearson相关系数并创建N*N矩阵。我的问 查看详情

根据相关性使用 Python 对数据进行聚类

】根据相关性使用Python对数据进行聚类【英文标题】:ClusteringdatawithPythonbasedontheircorrelation【发布时间】:2019-12-2005:58:47【问题描述】:我想将以下一组数据聚类在与“X”的每一行(“\\”和“/”)相对应的两个聚类中。我认为... 查看详情

如何使用带有 ELKI 库的距离矩阵对数据进行聚类?

】如何使用带有ELKI库的距离矩阵对数据进行聚类?【英文标题】:HowcanIclusterdatausingadistancematrixwiththeELKIlibrary?【发布时间】:2019-10-2000:39:20【问题描述】:我有一个距离矩阵,我想在对数据进行聚类时使用该距离矩阵。我已阅... 查看详情

如何使用微笑库的 CLARANS 方法使用自定义距离矩阵对我的数据进行聚类

】如何使用微笑库的CLARANS方法使用自定义距离矩阵对我的数据进行聚类【英文标题】:Howtoclustermydatawithacustomdistancematrixusingsmilelibrary\'sCLARANSmethod【发布时间】:2019-10-1501:09:55【问题描述】:我希望使用自定义距离矩阵而不是内... 查看详情

R聚类分析和具有相关矩阵的树状图

...。corloads=cor(df1[,2:185],use="pairwise.complete.obs")现在我有问题如何继续。我阅读了很多文章和示例,但没 查看详情

协方差矩阵与相关系数矩阵(代码片段)

文章目录前言1.方差、协方差与相关系数2.协方差矩阵3.相关系数矩阵前言  本篇博客主要介绍一下方差、协方差及相关系数的相关知识,进而引入了协方差矩阵与相关系数矩阵,并结合相关实例进行说明。1.方差、协方... 查看详情

如何快速绘制相关系数矩阵(代码片段)

importpandasaspdtrain=pd.read_csv("dftest/train.csv")importseabornassnsimportmatplotlib.pyplotaspltdefshowcov(df):dfData=df.corr()plt.subplots(figsize=(9,9))#设置画面大小sns.heatmap(dfData,annot=True,vmax=1 查看详情

如何使用 sklearn k-means 聚类根据彼此的相关性对 * 特征 * 进行聚类

】如何使用sklearnk-means聚类根据彼此的相关性对*特征*进行聚类【英文标题】:Howtocluster*features*basedontheircorrelationstoeachotherwithsklearnk-meansclustering【发布时间】:2019-03-0720:18:17【问题描述】:我有一个pandas数据框,其中行作为记录... 查看详情

matlab如何求相关系数

有两组6401x2的两个矩阵(两个自谱),如何求两个矩阵的第二列的相关系数(6401x1),第一列为频率简单的说就是用corrcoef函数来计算。这是求相关度的结果,对于一般的矩阵X,执行A=corrcoef(X)后,A中每个值的所在行a和列b,反... 查看详情

python遥感图像处理应用篇(二十四):python绘制遥感图像各波段热力图(相关系数矩阵)(代码片段)

...处理软件计算,比如ENVI软件就可以计算相关系数矩阵,使用工具箱中的Statistics工具即可进行多种统计运算。我们这里不使用遥感图像软件计算,直接使用Python计算。要实现整个目标,我们首先需要提取遥感图像波段中各个像元... 查看详情

python遥感图像处理应用篇(二十四):python绘制遥感图像各波段热力图(相关系数矩阵)(代码片段)

...处理软件计算,比如ENVI软件就可以计算相关系数矩阵,使用工具箱中的Statistics工具即可进行多种统计运算。我们这里不使用遥感图像软件计算,直接使用Python计算。要实现整个目标,我们首先需要提取遥感图像波段中各个像元... 查看详情

聚类算法数据分析

...且按距离进行聚类而非密度,无法处理环形图样。实际在使用聚类算法时,还有很多技巧性问题。聚类算法需要各变量间相关性较低,可以采用DataFrame的corr()函数进行相关性计算。另外,聚类的变量要区分离散值和非离散值。对... 查看详情

根据矩阵的二维相关系数进行ocr识别(代码片段)

...f0c;分别与A到Z的样本图片进行模板匹配。结果最大的表明相关性最大,就可以识别字符图片了。在实际应用中,我用了openCV的matchTemplate()函数,但是未达到我想要点的效果。matchTemplate()的功能是在图像中搜索出指定的... 查看详情

python遥感图像处理应用篇(二十七):python绘制遥感图像各波段热力图(相关系数矩阵)(续)

续-https://soderayer.blog.csdn.net/article/details/125757807上一篇中使用csv文件计算的相关系数热力图,本篇我们直接使用遥感图像来计算图像波段之间的相关系数。方法一:已有软件ENVI计算实际上,目前已有的软件,如ENVI就可以直接计算... 查看详情

通过 Mahalanobis 距离使用距离矩阵进行聚类

】通过Mahalanobis距离使用距离矩阵进行聚类【英文标题】:ClusteringwithaDistanceMatrixviaMahalanobisdistance【发布时间】:2014-07-0908:00:31【问题描述】:我想要聚类的对象之间有一组成对距离(在矩阵中)。我目前使用k-means聚类(计算从... 查看详情

使用python从混淆矩阵进行层次聚类

】使用python从混淆矩阵进行层次聚类【英文标题】:Hierarchicalclusteringfromconfusionmatrixwithpython【发布时间】:2013-09-1704:46:23【问题描述】:使用下面的answer,我尝试编写基于混淆矩阵的层次类聚类。混淆矩阵用于评估分类问题的结... 查看详情

使用 R 对大型数据矩阵进行聚类

】使用R对大型数据矩阵进行聚类【英文标题】:ClusteringLargeDataMatrixusingR【发布时间】:2012-10-0608:21:41【问题描述】:我有一个大数据矩阵(33183x1681),每一行对应一个观察值,每一列对应变量。我在R中使用PAM函数应用了K-medoids聚... 查看详情

matlab|好看的相关系数矩阵图绘制(代码片段)

...#xff01;工具函数由于过长将放在最后展示,以下先展示使用方式和绘制效果:使用效果使用教程0数据准备数据就多列的数值矩阵即可:X=[-2.8461-0.9470-0.1491-1.6213-1.11060.64282.745 查看详情