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 凝聚聚类算法的设置条件的主要内容,如果未能解决你的问题,请参考以下文章
如何在 python Scikit-learn 中获得凝聚聚类“质心”