python - K均值: Reassign data point to second nearest?

标签 python math scikit-learn k-means

我有一个经过训练的 Scikit Kmean 模型。

当使用模型预测函数时,模型将给定的数据点分配给最近的聚类。 (正如预期的那样)

让模型将数据点分配给第二个最近或第三个最近的簇的最简单方法是什么?

我似乎无法在任何地方找到这个。 (我可能错过了一些重要的东西。)

最佳答案

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数组中每行已排序元素的索引,使得结果的第一列对应于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 - K均值: Reassign data point to second nearest?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57833545/

相关文章:

python - Django 不存在/admin/

python - 多参数值错误

python - 在投票分类器上运行 GridSearch

python - 超过 3 个类的 Scikit-learn (sklearn) 混淆矩阵图

javascript - 如何根据输入值及其概率计算最有可能的输出?

python-3.x - 随机森林中每棵树的每个特征的特征重要性计算

python - 显示数组中某一列中特定数字的所有值

Python matplotlib colorbar 轴偏移字符串位置/位置

c++ - 用 Lapack 的 dgeqrf_ 求解线性系统

ruby-on-rails - Ruby表达式 '-'后留空格的效果