Kuhn-Munkres算法将聚类后的预测标签映射为真实标签
使用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算法将聚类后的预测标签映射为真实标签相关推荐
- 【Java应用】使用Java实现机器学习算法:聚类、分类、预测
一.引言 1.机器学习算法概述 机器学习是一种人工智能技术,旨在通过使用数据和统计分析来让计算机系统自动改进性能.机器学习算法可分为三大类:聚类.分类和预测.聚类算法用于将数据集分成不同的群组:分类算 ...
- 获取pheatmap聚类后和标准化后的结果
pheatmap是简单常用的热图绘制包,可以快速.简单.可定制的绘制漂亮热图.具体见R语言学习-热图简化和免费高颜值可定制在线绘图工具 ImageGP. 现在要解决的一个问题是图出来了,想看下转换后用 ...
- 经典算法笔记:无监督算法(聚类、降维)
本文是吴恩达老师的机器学习课程[1]的笔记和代码复现部分(聚类.降维). 作者:黄海广[2] 备注:笔记和作业(含数据.原始作业文件).视频都在github[3]中下载. 我将陆续将课程笔记和课程代码 ...
- 机器学习算法-KMeans聚类算法解析及伪代码实现。
机器学习算法-KMeans聚类算法解析及伪代码实现. 徐小狗在文末附上了几条大神们关于KMeans聚类算法的博文,欲详细研究请前往浏览~ 作为初学者,许多地方可能笨拙或有误,希望有大神看到后给予优化和 ...
- 《MATLAB智能算法30个案例》:第20章 基于遗传模拟退火算法的聚类算法
<MATLAB智能算法30个案例>:第20章 基于遗传模拟退火算法的聚类算法 1. 前言 2. MATLAB 仿真示例 3. 小结 1. 前言 <MATLAB智能算法30个案例分析& ...
- kmeans算法_KMeans聚类算法详解
1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法Ad ...
- k-均值聚类算法_聚类算法-K-均值算法
k-均值聚类算法 聚类算法-K-均值算法 (Clustering Algorithms - K-means Algorithm) K-Means算法简介 (Introduction to K-Mean ...
- [学习笔记] [机器学习] 8. 聚类算法(聚类算法:K-means、K-means++;聚类算法评估;特征降维:特征选择(Pearson相关系数、Spearman相关系数)、PCA主成分分析)
视频链接 数据集下载地址:无需下载 1. 聚类算法简介 学习目标: 掌握聚类算法实现过程 知道 K-means 算法原理 知道聚类算法中的评估模型 说明 K-means 的优缺点 了解聚类中的算法优化 ...
- K-近邻算法之案例2:预测facebook签到位置
K-近邻算法之案例2:预测facebook签到位置 1 数据集介绍 [https://www.kaggle.com 天池,人工智能比赛网址] 数据介绍:将根据用户的位置,准确性和时间戳预测用户正在 ...
最新文章
- js实现数据结构及算法之图和图算法(Graphs)
- mysql安装教程8.3,Summary_虚拟机安装centos8.3Linux系统_安装Mysql
- Spring Data JPA 从入门到精通~Naming命名策略详解及其实践
- STL Map学习总结
- bootstrap-表单
- Logrotate操作手册
- 单词卡片被遗落的单词 その2
- 执行计划之CONCATENATION
- 蜂鸣器c51汇编语言,51单片机蜂鸣器奏乐实验汇编代码.doc
- 个人征信系统机构接入工作流程
- 百度IP地址查询API使用: 应用类型为浏览器端
- python读取xlsx文件找不到_在python中打开并读取excel .xlsx文件
- 每天学习写论文——Day24 光说不练假把式,毕设就是第一步
- 阿里fastjson将集合转为树形结构【非原创】
- [VBA]EXCEL表格,运行VBA报错:运行时错误‘9’ 下标越界
- 07-提取字符串中的数字数组
- 人工智能专业主要学习哪些课程,目前的就业方向是什么?
- CSU人工智能与模式识别复习-绪论
- 线程间操作无效: 从不是创建控件的线程访问它。
- Python量化投资——股票择时到底能否赚钱?TA-Lib 33种技术指标有效性横向大评比
热门文章
- 找到一个可以下载开放式基金历史数据的网站
- sphinx代码结构
- Circular view path问题
- Thinkpad T61升级记:64位操作系统win7_x64,8G内存
- 基于Basys2开发板的简易电子琴和音乐播放器设计
- ArcEngine导出为PDF中汉字乱码问题
- MarkDown中如何换行?
- Blender图解教程:多边形建模命令 之 环切 (Loop Cut)
- 华师大数据科学考研_华东师范大学数据科学与工程学院2020年考研初试范围一览...
- access团员人数公式_2012年计算机二级Access第三十二套上机试题及答案详解