KMeans表示使用Python进行集群 [英] KMeans Clustering using Python

查看:159
本文介绍了KMeans表示使用Python进行集群的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个数据集

Name    System
A       AZ
A       NaN
B       AZ
B       NaN
B       NaN
C       AY
C       AY
D       AZ
E       AY
E       AY
E       NaN
F       AZ
F       AZ
F       NaN

使用此数据集时,我需要根据";系统&为特定";名称&Quot;重复的次数对数据集进行群集。

在上面的示例中,名称A、B和D有一个子集,而C、E有两个子集,F有两个AZ,因此它是一个不同的集群。

输出示例:

Cluster     Names
AZ          A,B
AY,AY       C,E
AZ,AZ       F 

PS。实际数据集的行数和列数可能不同 如何使用基于ML的聚类算法(如KNN、朴素贝叶斯等)来实现这一点? 我需要两种方法,一种不忽略NaN,另一种忽略NaN。

推荐答案

IIUC,这看起来像一个双倍groupby。您首先需要按名称和系统进行分组,并聚合系统以形成集群。则这是一个简单的groupby,聚合为字符串。

(df.groupby(['Name', 'System'])
   ['System'].agg(Cluster=','.join)          # clusters of repeats
   .droplevel('System').reset_index()
   .groupby('Cluster')['Name'].agg(','.join) # aggregate by cluster
   .reset_index()
)

输出:

  Cluster   Name
0   AY,AY    C,E
1      AZ  A,B,D
2   AZ,AZ      F

Nb。我在这里使用了','.join聚合,但您也可以使用tuple或自定义函数(第一个groupby)和frozenset(第二个groupby)来保持对单个元素的访问

(df.groupby(['Name', 'System'], dropna=False)
   ['System'].agg(Cluster=lambda x: (x.iloc[0], len(x)))
   .droplevel('System').reset_index()
   .groupby('Cluster')['Name'].agg(frozenset)
   .reset_index()
)

输出:

    Cluster       Name
0   (AY, 2)     (E, C)
1   (AZ, 1)  (B, A, D)
2   (AZ, 2)        (F)
3  (nan, 1)  (E, F, A)
4  (nan, 2)        (B)

这篇关于KMeans表示使用Python进行集群的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆