【问题标题】:Assigning cluster values based on correlation matrix基于相关矩阵分配聚类值
【发布时间】:2018-09-25 04:32:28
【问题描述】:

我在 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' 与 A 的相关性为 -0.09,因此它在集群 1 中,但它与 B 的相关性更强(0.14),因此理想情况下,它应该在集群 2 中。 所以理想的集群分配应该是:

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

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

【问题讨论】:

  • 为什么投反对票?我已经提出了所有的事实(

标签: python iteration cluster-analysis correlation


【解决方案1】:

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

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

【讨论】:

  • 我试过了,但它没有给出预期的结果。即使是低相关性的变量也会在同一个集群中结束,这违背了目的
  • 可能是因为您调用的函数需要距离,但您提供了相似度矩阵?
  • 我使用了这里建议的差异:stackoverflow.com/questions/38070478/…
  • 也许您复制粘贴的代码不起作用?还要确保了解您是否需要单链接、完整链接等。
猜你喜欢
  • 2016-10-01
  • 2013-04-21
  • 2023-03-12
  • 2018-04-10
  • 2018-06-30
  • 2016-01-19
  • 2018-04-29
  • 1970-01-01
  • 2018-02-02
相关资源
最近更新 更多