python相关系数矩阵怎么实现_python – 如何使用相关系数矩阵进行聚类?

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

其次,任何聚类方法的输入,例如链接,都需要测量对象的不相似性.相关性测量相似性.因此需要以一种方式对其进行转换,使得0相关被映射到大数,而1相关被映射到0.

This blog post讨论了这种数据转换的几种方法,并推荐不相似度= 1 – abs(相关性).这个想法是强烈的负相关也表明对象是相关的,就像正相关一样.以下是示例的延续:

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')

请注意,我们不将全距离矩阵馈入链接,它需要先用方形压缩.

要使用哪些精确的聚类方法以及阈值取决于问题的上下文,没有通用规则.通常,0.5是用于相关的合理阈值,所以我这样做了.随着我的20组随机数,我最终得到了7个簇:在标签中编码为

[7, 7, 7, 1, 4, 4, 2, 7, 5, 7, 2, 5, 6, 3, 6, 1, 5, 1, 4, 2]

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值