使用Kuhn-Munkres(KM)算法将聚类后的预测标签映射为真实标签

问题:对一部分样本进行聚类,得到了聚类标签,同时这部分数据有真实标签,为了计算聚类之后的准确率,如何将聚类标签数据映射到真实标签数据呢?


Python包的安装:pip install munkres

munkres:假设n个工人完成n个工作,每个工人完成工作的代价不同,一个工作只能由一个工人来完成,一个工人也只能完成一个工作。如matrix所示,有3个工人,第1个工人完成第1个工作需要5天,完成第2个工作需要9天,完成第3个工作需要1天;第2个工人完成第1个工作需要10天,完成第2个工作需要3天,依次类推。问如何将每个工作分配给每个工人(1个工作分配给1个工人),使得总的代价cost最少。

munkres提供了一个方法,通过调用可以实现这个问题,如下代码所示。

munkres库链接:https://pypi.org/project/munkres/

from munkres import Munkres,print_matrixmatrix=[[5,9,1],[10,3,2],[8,7,4]]
m=Munkres()
indexes=m.compute(matrix)
print(indexes)
print_matrix(matrix,msg='Lowest cost through this matrix')
total=0
for row,column in indexes:value=matrix[row][column]total+=valueprint('(%d,%d)->%d'%(row,column,value))
print('total cost:%d'%total)

运行结果:


以COIL20数据集为例,该数据集是一个object datasets,由1440个samples,20个objects组成,每张图片的维度是32*32。该数据集由训练集[‘fea’]和标签集['gnd']组成。labels的数据形式为:

[ 1  1  1 ... 20 20 20]

假设聚类后的标签为:

[ 3  3  3 ... 14 14 14]

使用一下代码可以将预测标签映射为真实标签:

def best_map(L1,L2):#L1 should be the labels and L2 should be the clustering number we gotLabel1 = np.unique(L1)       # 去除重复的元素,由小大大排列nClass1 = len(Label1)        # 标签的大小Label2 = np.unique(L2)       nClass2 = len(Label2)nClass = np.maximum(nClass1,nClass2)G = np.zeros((nClass,nClass))for i in range(nClass1):ind_cla1 = L1 == Label1[i]ind_cla1 = ind_cla1.astype(float)for j in range(nClass2):ind_cla2 = L2 == Label2[j]ind_cla2 = ind_cla2.astype(float)G[i,j] = np.sum(ind_cla2 * ind_cla1)m = Munkres()index = m.compute(-G.T)index = np.array(index)c = index[:,1]newL2 = np.zeros(L2.shape)for i in range(nClass2):newL2[L2 == Label2[i]] = Label1[c[i]]return newL2
def err_rate(gt_s,s):print(gt_s)print(s)c_x=best_map(gt_s,s)err_x=np.sum(gt_s[:]!=c_x[:])missrate=err_x.astype(float)/(gt_s.shape[0])return missrate

在err_rate(gt_s,s)方法中,gt_s表示真实标签数组,s表示预测标签数组。通过调用best_map(gt_s,s)方法可以得到映射后的标签,然后使用np.sum(gt_s[:]!=c_x[:])可以得到预测错误的标签个数err_x,err_x除以总的标签个数即可以得到错误率,进而可以计算聚类之后的准确率

Kuhn-Munkres算法将聚类后的预测标签映射为真实标签相关推荐

  1. 【Java应用】使用Java实现机器学习算法:聚类、分类、预测

    一.引言 1.机器学习算法概述 机器学习是一种人工智能技术,旨在通过使用数据和统计分析来让计算机系统自动改进性能.机器学习算法可分为三大类:聚类.分类和预测.聚类算法用于将数据集分成不同的群组:分类算 ...

  2. 获取pheatmap聚类后和标准化后的结果

    pheatmap是简单常用的热图绘制包,可以快速.简单.可定制的绘制漂亮热图.具体见R语言学习-热图简化和免费高颜值可定制在线绘图工具 ImageGP. 现在要解决的一个问题是图出来了,想看下转换后用 ...

  3. 经典算法笔记:无监督算法(聚类、降维)

    本文是吴恩达老师的机器学习课程[1]的笔记和代码复现部分(聚类.降维). 作者:黄海广[2] 备注:笔记和作业(含数据.原始作业文件).视频都在github[3]中下载. 我将陆续将课程笔记和课程代码 ...

  4. 机器学习算法-KMeans聚类算法解析及伪代码实现。

    机器学习算法-KMeans聚类算法解析及伪代码实现. 徐小狗在文末附上了几条大神们关于KMeans聚类算法的博文,欲详细研究请前往浏览~ 作为初学者,许多地方可能笨拙或有误,希望有大神看到后给予优化和 ...

  5. 《MATLAB智能算法30个案例》:第20章 基于遗传模拟退火算法的聚类算法

    <MATLAB智能算法30个案例>:第20章 基于遗传模拟退火算法的聚类算法 1. 前言 2. MATLAB 仿真示例 3. 小结 1. 前言 <MATLAB智能算法30个案例分析& ...

  6. kmeans算法_KMeans聚类算法详解

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法Ad ...

  7. k-均值聚类算法_聚类算法-K-均值算法

    k-均值聚类算法 聚类算法-K-均值算法 (Clustering Algorithms - K-means Algorithm) K-Means算法简介 (Introduction to K-Mean ...

  8. [学习笔记] [机器学习] 8. 聚类算法(聚类算法:K-means、K-means++;聚类算法评估;特征降维:特征选择(Pearson相关系数、Spearman相关系数)、PCA主成分分析)

    视频链接 数据集下载地址:无需下载 1. 聚类算法简介 学习目标: 掌握聚类算法实现过程 知道 K-means 算法原理 知道聚类算法中的评估模型 说明 K-means 的优缺点 了解聚类中的算法优化 ...

  9. K-近邻算法之案例2:预测facebook签到位置

    K-近邻算法之案例2:预测facebook签到位置 1 数据集介绍   [https://www.kaggle.com 天池,人工智能比赛网址] 数据介绍:将根据用户的位置,准确性和时间戳预测用户正在 ...

最新文章

  1. js实现数据结构及算法之图和图算法(Graphs)
  2. mysql安装教程8.3,Summary_虚拟机安装centos8.3Linux系统_安装Mysql
  3. Spring Data JPA 从入门到精通~Naming命名策略详解及其实践
  4. STL Map学习总结
  5. bootstrap-表单
  6. Logrotate操作手册
  7. 单词卡片被遗落的单词 その2
  8. 执行计划之CONCATENATION
  9. 蜂鸣器c51汇编语言,51单片机蜂鸣器奏乐实验汇编代码.doc
  10. 个人征信系统机构接入工作流程
  11. 百度IP地址查询API使用: 应用类型为浏览器端
  12. python读取xlsx文件找不到_在python中打开并读取excel .xlsx文件
  13. 每天学习写论文——Day24 光说不练假把式,毕设就是第一步
  14. 阿里fastjson将集合转为树形结构【非原创】
  15. [VBA]EXCEL表格,运行VBA报错:运行时错误‘9’ 下标越界
  16. 07-提取字符串中的数字数组
  17. 人工智能专业主要学习哪些课程,目前的就业方向是什么?
  18. CSU人工智能与模式识别复习-绪论
  19. 线程间操作无效: 从不是创建控件的线程访问它。
  20. Python量化投资——股票择时到底能否赚钱?TA-Lib 33种技术指标有效性横向大评比

热门文章

  1. 找到一个可以下载开放式基金历史数据的网站
  2. sphinx代码结构
  3. Circular view path问题
  4. Thinkpad T61升级记:64位操作系统win7_x64,8G内存
  5. 基于Basys2开发板的简易电子琴和音乐播放器设计
  6. ArcEngine导出为PDF中汉字乱码问题
  7. MarkDown中如何换行?
  8. Blender图解教程:多边形建模命令 之 环切 (Loop Cut)
  9. 华师大数据科学考研_华东师范大学数据科学与工程学院2020年考研初试范围一览...
  10. access团员人数公式_2012年计算机二级Access第三十二套上机试题及答案详解