我有一个训练有素的Scikit Kmean模型。
使用模型的预测功能时,模型会将给定的数据点分配给最近的聚类。 (如预期)
取而代之的是,模型最简单的方法是将数据点分配给SECOND最近的集群或THIRD最近的集群?
我似乎在任何地方都找不到。 (我可能缺少一些必不可少的东西。)
最佳答案
Kmeans分类器具有transform(X)
方法,该方法以形状为[n_observations, n_clusters]
的数组形式将每个记录的距离返回到每个簇的质心。
这样,您可以选择要将记录分配到的群集。
例:
import numpy as np
from sklearn.cluster import KMeans
from sklearn.datasets import load_digits
from sklearn.preprocessing import scale
np.random.seed(42)
digits = load_digits()
data = scale(digits.data)
n_digits = len(np.unique(digits.target))
km = KMeans(init='k-means++', n_clusters=n_digits, n_init=10)
km.fit(data)
predicted = km.predict(data)
dist_centers = km.transform(data)
为了验证
transform
输出,我们可以将predict
的结果与质心距离的最小值进行比较:>>> np.allclose(km.predict(data), np.argmin(dist_centers, axis=1))
True
最后,我们可以使用
np.argsort
来获取distances数组中每一行的排序元素的索引,其方式是结果的第一列对应于最近的簇的标签,第二列对应于标签第二个最近的集群,依此类推。>>> print(predicted)
[0 3 3 ... 3 7 7]
>>> print(np.argsort(dist_centers, axis=1))
[[0 7 4 ... 8 6 5]
[3 9 4 ... 6 0 5]
[3 9 4 ... 8 6 5]
...
[3 1 9 ... 8 6 5]
[7 0 9 ... 8 6 5]
[7 3 1 ... 9 6 5]]
关于python - Kmeans:将数据点重新分配到第二最近的位置?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57833545/