KMeans 对具有许多列(整数)的 DataFrame 中的行进行聚类

问题描述 投票:0回答:1

我有一个 DataFrame,每行都由 0 和 1 组成,其想法是将每个 df 中的所有行与特定数量的簇进行比较和聚类(在本例中假设为 5)。

我需要获取的是 5 个簇中每一个簇的行索引(或

.groupby
按具有原始行索引的簇)。

df 看起来像这样:

    0   1   2   3   4   5   6   7   8   9   ... 528 529 530 531 532 533 534 535 536 537
0   0   0   0   0   0   0   0   1   1   1   ... 0   1   1   1   0   0   0   1   0   1
1   0   0   0   0   0   0   0   1   1   1   ... 0   1   1   1   0   0   0   1   0   1
2   0   0   0   0   0   0   0   1   1   1   ... 0   1   1   1   0   0   0   1   0   1
3   0   0   0   0   0   0   0   0   0   0   ... 0   0   0   1   0   0   0   0   1   1
4   0   0   0   0   0   0   0   0   0   0   ... 0   0   0   1   0   0   0   0   0   1
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
137 0   0   0   0   0   0   0   0   0   0   ... 0   0   0   0   0   1   0   0   0   0
138 1   1   0   0   0   0   0   0   0   1   ... 0   0   0   0   0   1   0   0   0   0
139 1   1   1   0   0   0   0   0   0   0   ... 0   0   0   0   0   1   0   0   0   0
140 1   1   0   0   0   0   0   0   0   1   ... 0   0   0   0   0   1   0   0   0   0
141 1   1   1   0   0   0   0   0   0   0   ... 0   0   0   0   0   1   0   0   0   0

我在这里找到了另一个提供此解决方案的答案: 对 pandas 数据框中的每个组进行 Kmeans 聚类并分配聚类

def cluster(X):
k_means = KMeans(n_clusters=5).fit(X)
return X.groupby(k_means.labels_)\
        .transform('mean').sum(1)\
        .rank(method='dense').sub(1)\
        .astype(int).to_frame()

我得到的结果是:

    0
0   1
1   1
2   1
3   0
4   0
... ...
137 3
138 1
139 3
140 3
141 3

但公平地说,我并不完全理解它的作用,以及我在这里得到的结果是否是每行的簇号

python pandas dataframe k-means
1个回答
0
投票

我也不完全确定你的示例片段的作用,但对于你的用例来说,这样的东西会起作用。首先,获取集群标签:

from sklearn.cluster import KMeans

df["cluster"] = KMeans(n_clusters=5).fit(df).labels_

然后,如果您需要对每个簇的索引执行某些操作,您可以使用

groupby("cluster").indices

将它们作为字典获取
>>> df.groupby("cluster").indices
{0: array([0, 1]), 1: array([2, 3]), ...}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.