K表示置换簇

时间:2017-07-23 08:29:45

标签: python numpy machine-learning scikit-learn k-means

使用书中的以下代码,我将数字数据集聚类。因为K均值算法可以找到聚类但不知道哪个聚类是例如“0”或“9”,我们必须将每个学习的聚类标签与其中找到的真实标签相匹配。

digits=load_digits()
X=digits.data
y=digits.target

#Instantiate the k_means estimator and set the hyerparameters
model=KMeans(n_clusters=10,random_state=0)
model.fit(X)
y_pred=model.predict(X)

#Match each learned cluster label with the true labels found in them
from scipy.stats import mode

labels=np.zeros_like(y_pred)
for i in range(10):
    mask=(y_pred==i)
    labels[mask]=mode(digits.target[mask])[0]

conf=confusion_matrix(y,labels)

我理解除了部分之外的所有代码:

        labels[mask]=mode(digits.target[mask])[0] 

有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:1)

统计信息中的

mode()表示集合中最常出现的值。因此,与群集mask匹配的“真实”数字是属于群集mask的所有数字中最常出现的数字。
所以,

digits.target[mask] # the set of all true labels of cluster `mask`

mode

mode(digits.target[mask])  # finds the most frequent digit in this cluster

将其分配给labels[mask],从而匹配k-means群集和集合中的真实数字:

labels[mask]=mode(digits.target[mask])[0]