我使用凝聚聚类算法对 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 或任何其他数字。
答案 0 :(得分:0)
尽量不使用聚类算法,而只是按特定列对值进行分组:
df.groupby('column_name')
然后,如果你想要更小的集群,你可以对每个组使用一个聚类算法。