根据相关矩阵分配聚类值

时间:2018-04-15 09:11:19

标签: python iteration cluster-analysis correlation

我在python数据帧中有一个n * n相关矩阵。我想基于这个矩阵分配簇值,比如说(相关性> 0.08)进入一个簇,依此类推:

import pandas as pd
import numpy as np

# data
# ==============================
np.random.seed(0)
df = pd.DataFrame(np.random.randn(100,5), columns=list('ABCDE'))

df1=df.corr()

    A               B              C              D             E
A   1              -0.052234579    -0.098678285   0.063338014   -0.097187103
B   -0.052234579    1              -0.015077115   0.058672786   0.140833111
C   -0.098678285   -0.105077115     1             0.008695575   0.048329744
D   0.063338014     0.058672786     0.008695575   1             0.120529455
E   -0.097187103    0.140833111     0.048329744   0.120529455   1

d={}
i=1
while df1.shape[0]>0:
     x=(abs(df1.head(1))>0.08).T
     x1=list(x[x[x.columns[0]]==True].index)
     d[i]=x1
     df1=df1[~df1.index.isin(x1)][list(df1.columns-x1)]
     i+=1
d>>
{1: ['A', 'C', 'E'], 2: ['B'], 3: ['D']}

现在我的挑战是,一个变量的相关值> 0.08,但与另一个不在当前集群中的变量具有更强的相关性,理想情况下它应该在不同的集群中。

e.g。 'E'与A的相关性为-0.09,因此它在群集1中,但它与B具有更强的相关性(0.14),因此理想情况下,它应该在群集2中。 所以理想的集群分配应该是:

{1: ['A', 'C'], 2: ['B','D','E']}

我如何解决这个迭代问题?

1 个答案:

答案 0 :(得分:0)

使用绝对关联,然后使用分层凝聚聚类

每一点都是它自己的集群。然后,将这两者与最佳相关性合并。如果相关性太弱,则停止合并。