聚类算法评价指标python实现_怎么理解聚类算法的评价指标Rand Index(RI)?

Rand Index是比较两个聚类结果的,也可以比较一个聚类算法的结果和真实分类情况。

Rand Index的想法是枚举样本中的所有的pair,然后看有多少个pair在聚类算法1和聚类算法2的情况是一致的。

比如说,有五个数据点,x是聚类1返回的结果,y是聚类2返回的结果

x:[1, 1, 2, 3, 3]

y:[2, 2, 3, 1, 2]

x[0, 1] = [1, 1],在同一簇中

y[0, 1] = [2, 2],也在同一簇中。

所以[0, 1]这一对在聚类1和聚类2中是一致的。

x[0, 2] = [1, 2],不在同一簇中

y[0, 2] = [2, 3],也不在同一簇中。

所以[0, 2]这一对在聚类1和聚类2中也是一致的。

如果有$n$个数据点,那么

$$\text{Rand Index}=\frac{\text{一致的对数}}{\frac{1}{2}n(n-1)}$$

分母上就是说$n$个数据点,一共有$\frac{1}{2}n(n-1)$个pair。

以上面的例子来说,Rand Index=0.7。因为一共有10对,其中3对不一致,分别是

x[0, 4]与y[0, 4]

x[1, 4]与y[1, 4]

x[3, 4]与y[3, 4]

很显然, Rand Index是0到1之间的数。如果是1,就表示两个聚类结果完全一样。SofaSofa数据科学社区DS面试题库 DS面经

×

Warning

您确定要删除本贴么?所有相关回复也会被一并删除并且无法恢复。

取消

确定删除

kidd23

2018-08-08 11:55

0

谢谢!

- huanx8t

2018-08-19 10:56

该代码实现了K-means聚类算法,并计算了多个聚类性能指标。以下是关键步骤和聚类指标的计算方法: ### 1. K-means聚类算法 - **初始化质心**:从数据集中随机选择 `k` 个点作为初始质心。 - **分配簇**:计算数据点与质心之间的距离,并将数据点分配给最近的质心。 - **更新质心**:计算每个簇的新质心,即簇内数据点的均值。 - **迭代**:重复上述步骤直到质心不再显著变化或达到最大迭代次数。 ### 2. 聚类指标计算 - **真实标签和预测标签**:`labels_true` 是原始的真实标签,`labels_pred` 是 K-means 聚类后的预测标签。 - **标签编码**:如果真实标签是文本类型,将其转换为数字标签。 - **计算指标**: - **F-measure (F值)**:宏平均 F1 分数,衡量分类器的准确性和召回率的调和平均值。 - **Accuracy (ACC)**:准确性,表示正确分类的样本比例。 - **Normalized Mutual Information (NMI)**:归一化互信息,衡量两个聚类结果之间的相似性。 - **Rand Index (RI)**:兰德指数,衡量两个聚类结果之间的一致性。 - **Adjusted Rand Index (ARI)**:调整兰德指数,对兰德指数进行调整以考虑随机猜测的影响。 ### 代码实现 ```python def clustering_indicators(labels_true, labels_pred): if type(labels_true[0]) != int: labels_true = LabelEncoder().fit_transform(df[columns[len(columns) - 1]]) f_measure = f1_score(labels_true, labels_pred, average='macro') accuracy = accuracy_score(labels_true, labels_pred) normalized_mutual_information = normalized_mutual_info_score(labels_true, labels_pred) rand_index = rand_score(labels_true, labels_pred) ARI = adjusted_rand_score(labels_true, labels_pred) return f_measure, accuracy, normalized_mutual_information, rand_index, ARI ``` ### 3. 调用函数 在主程序中,调用 `clustering_indicators` 函数计算聚类指标,并输出结果: ```python if __name__ == "__main__": k = 3 T = 100 n = len(dataset) epsilon = 1e-5 labels, centers = k_means(np.array(dataset), k, T, epsilon) F_measure, ACC, NMI, RI, ARI = clustering_indicators(original_labels, labels) print("各聚类指标如下所示:") print("F_measure:", F_measure, "ACC:", ACC, "NMI", NMI, "RI", RI, "ARI", ARI) ``` ### 总结 该代码通过 K-means 算法对数据进行聚类,并计算了多种聚类性能指标,包括 F-measure、Accuracy、NMI、RI 和 ARI,这些指标帮助评估聚类结果的质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值