scikit learn 凝聚聚类算法的设置条件

Posted

技术标签:

【中文标题】scikit learn 凝聚聚类算法的设置条件【英文标题】:Setting conditions for a scikit learn agglomerative clustering algorithm 【发布时间】:2021-09-16 23:48:29 【问题描述】:

我使用凝聚聚类算法对 51x56 数据集进行聚类。该算法有效,但我想为聚类添加一个条件。对于要放在同一个集群中的数据点,我需要特定列中的值相同。

z=df.apply(lambda x: pd.factorize(x)[0])
cluster = AgglomerativeClustering(n_clusters=None,distance_threshold=(10), affinity='euclidean', linkage='ward')
cluster.fit_predict(z)

z 是一个分解的数据框。该数据框的一部分如下所示。

0       0       0       0       0  ...        0       -1       -1          -1
1       0       0       0       0  ...       -1       -1       -1          -1
2       0       0       0       0  ...        1       -1       -1          -1
3       0       0       0       0  ...       -1       -1       -1          -1
4       0       0       0       0  ...        0       -1       -1          -1
5       0       0       0       0  ...        0       -1       -1          -1
6       0       0       0       0  ...        0       -1       -1          -1
7       0       0       0       0  ...        0       -1       -1          -1
8       0       0       0       0  ...        0       -1       -1          -1
9       0       0       0       0  ...       -1       -1       -1          -1
10      0       1       1       1  ...        0       -1       -1          -1
11      0       1       1       1  ...       -1       -1       -1          -1
12      0       2       1       2  ...        0       -1       -1          -1
13      0       2       1       2  ...       -1       -1       -1          -1
14      0       3       1       3  ...        0       -1       -1          -1
15      0       3       1       3  ...       -1       -1       -1          -1
16      1       4       1       4  ...        0       -1       -1          -1
17      1       4       1       4  ...        1       -1       -1          -1

假设第 3 列是我要为其指定条件的列。因此,例如,我目前得到的是将第 9 行和第 10 行放入同一个集群中。但是查看它们在第 3 列中的值,您可以看到第 9 行的值为 0,第 10 行的值为 1。我想要一个代码,如果这些值相同,则只允许将它们放入同一个集群中,不管该值是 0 还是 1 或任何其他数字。

【问题讨论】:

【参考方案1】:

尽量不要使用聚类算法,而只是按特定列对值进行分组:

df.groupby('column_name')

然后,如果您想要更小的集群,您可以为每个组使用一个集群算法。

【讨论】:

以上是关于scikit learn 凝聚聚类算法的设置条件的主要内容,如果未能解决你的问题,请参考以下文章

scikit-learn:随着数据集增加的层次凝聚聚类性能

如何在 python Scikit-learn 中获得凝聚聚类“质心”

如何在 Scikit-learn 凝聚聚类中使用 Pearson 相关性作为距离度量

使用 scikit 选择层次凝聚聚类中的聚类数

scikit-learn估计器-KNN均值聚类

使用决策树比较 scikit 学习聚类