使用 Python 的 KMeans 聚类
KMeans Clustering using 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
使用此数据集,我需要根据针对特定“名称”重复“系统”的次数对数据集进行聚类。
在上面的例子中,名称A、B和D有一个“AZ”“子集”,而C、E有两个“AY”子集,F有两个AZ,所以它是一个不同的集群。
输出示例:
Cluster Names
AZ A,B
AY,AY C,E
AZ,AZ F
PS。实际数据集的行数和列数可能有所不同
我如何使用基于 ML 的聚类算法(如 KNN、朴素贝叶斯等)来做到这一点?
我需要两种方法,一种不忽略 NaN,一种忽略 NaN。
IIUC,这看起来像双 groupby
。您首先需要按 Name 和 System 分组并聚合 System 以形成集群。那么这是一个简单的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
注意。我在这里使用 ','.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)
我有一个数据集
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
使用此数据集,我需要根据针对特定“名称”重复“系统”的次数对数据集进行聚类。
在上面的例子中,名称A、B和D有一个“AZ”“子集”,而C、E有两个“AY”子集,F有两个AZ,所以它是一个不同的集群。
输出示例:
Cluster Names
AZ A,B
AY,AY C,E
AZ,AZ F
PS。实际数据集的行数和列数可能有所不同 我如何使用基于 ML 的聚类算法(如 KNN、朴素贝叶斯等)来做到这一点? 我需要两种方法,一种不忽略 NaN,一种忽略 NaN。
IIUC,这看起来像双 groupby
。您首先需要按 Name 和 System 分组并聚合 System 以形成集群。那么这是一个简单的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
注意。我在这里使用 ','.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)