如何在Python中对布尔观测值进行集群?

2024-10-01 02:37:20 发布

您现在位置:Python中文网/ 问答频道 /正文

您如何根据对哪些项目同时出现的观察结果对项目进行分类

我有如下问题。假设我在研究儿童游戏,想知道哪些游戏会一起玩。我已经确定了12个游戏,并连续100次去操场休息,观察孩子们每次都在玩哪些游戏。我的观察结果实际上是布尔值:1如果当时玩游戏,则为0,如以下数据帧中所示(实际上,随机数在这里不太有效,但它们显示了我正在使用的数据类型)

import random
import numpy as np
import pandas as pd
random.seed(0)
games=['Game %d'%i for i in range(0,12)]
observations=pd.DataFrame((np.random.rand(100, 12)*0.55).round(), columns=games)

我想知道哪些游戏倾向于一起玩

到目前为止,我所使用的方法是创建一个矩阵,计算每一对在一起观察的次数,并创建一个“距离”矩阵:

observedTogether=np.array([[(observations[g1]==observations[g2]).sum()
    for g2 in games] for g1 in games])
distancesMatrix=1-observedTogether/observedTogether.max()

然后将其用作聚类算法的输入:

from scipy.cluster.hierarchy import dendrogram, linkage
Z = linkage(distancesMatrix, 'single') 
dendrogram(Z, orientation='right', labels=games)
plt.show()

其输出如下所示: Error and dendrogram output

问题是,产生的集群对于真实数据看起来不是很有说服力,而这个警告消息让我怀疑我做错了什么。谷歌搜索这条信息表明其他人也在做错事,因为我找不到解释它的意思;不可否认,信息是正确的-矩阵是距离矩阵

我该怎么做呢


Tags: 数据inimport游戏距离forasnp
1条回答
网友
1楼 · 发布于 2024-10-01 02:37:20

啊-找到了。 2 Dendrograms + Heatmap from condensed correlationmatrix with scipy

错误消息“ClusterWarning:scipy.cluster:对称非负空心观测矩阵看起来可疑地像一个非密集距离矩阵”通过以下方式修复:

from scipy.spatial.distance import squareform
Z = linkage(squareform(distancesMatrix), 'complete') 

相关问题 更多 >