K 表示置换簇

Posted

技术标签:

【中文标题】K 表示置换簇【英文标题】:K means permute clusters 【发布时间】:2017-12-29 00:07:09 【问题描述】:

使用书中的以下代码,我对数字数据集进行聚类。因为 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】:

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]

【讨论】:

非常感谢!意味着“掩码”数组就像一个“模式”,它将digits.target 中的“真实”标签与y_pred 中的预测标签相匹配。例如,如果 y_pred 预测数字 1(如果 y_pred ==1,则 maks == True),“掩码”数组将覆盖到 digits.target 数组并显示例如数字 3。由此我们知道每次 y_pred 预测数字 1,这是数字/数字 3。按照此过程,“标签”数组将逐步填充相应位置的“真实”数字

以上是关于K 表示置换簇的主要内容,如果未能解决你的问题,请参考以下文章

矩阵十题 VOJ1049 HDU 2371 Decode the Strings

置换选择排序算法详解

Uva 11077 Find the Permutations [置换群 DP]

置换群(等价类计数)

bzoj1004:[HNOI2008]Cards

POJ 1286-Necklace of Beads