k-means Clustering(k平均聚类算法)

简介:

无监督学习对图像进行分类时,可以采用k-means算法。该算法实现简单,运行速度快。该算法要求事先知道数据所具有的类别数。k-means时数据最初的随机分类类别会对最终结果产生很大的影响。数据较少时k-means算法分类可能会失败。

k-means 算法:

  1. 为每个数据随机分配类
  2. 计算每个类的重心
  3. 计算每个数据与重心之间的距离,将该数据分配到重心距离最近的那个类
  4. 重复步骤2和步骤3直到没有数据的类别发生改变为止

实验:

类似于上一篇文章 讲解有监督学习实例 ,将色彩量化后图像的直方图作为识别时的特征量。

实验流程:

  1. 对图像进行减色化处理,然后计算直方图,将其用作特征量
  2. 对每张图随机分配类别0或类别1(已知类别数为2)
  3. 分别计算类别0和类别1的特征量的质心(质心存储在 gs=np.zeros((Class,12),dtype=np.float32)中),gs具有如下图所示的形状和内容:
  4. 对于每个图像,计算特征量与质心之间的距离(在此取欧式距离),并将图像类别指定为距离最近的质心所代表的类别
  5. 重复步骤3和步骤4直到没有数据的类别发生改变为止

实验代码(python):

import cv2
import numpy as np
import matplotlib.pyplot as plt
from glob import glob# Dicrease color
def dic_color(img):img //= 63img = img * 64 + 32return img# Database
def get_DB():# get training image pathtrain = glob("../dataset/train/*")train.sort()# prepare databasedb = np.zeros((len(train), 13), dtype=np.int32)pdb = []# each trainfor i, path in enumerate(train):# read imageimg = dic_color(cv2.imread(path))# histogramfor j in range(4):db[i, j] = len(np.where(img[..., 0] == (64 * j + 32))[0])db[i, j+4] = len(np.where(img[..., 1] == (64 * j + 32))[0])db[i, j+8] = len(np.where(img[..., 2] == (64 * j + 32))[0])# get classif 'akahara' in path:cls = 0elif 'madara' in path:cls = 1# store class labeldb[i, -1] = cls# add image pathpdb.append(path)return db, pdb# k-Means
def k_means(db, pdb, Class=2, th=0.5):# copy databasefeats = db.copy()# initiate random seednp.random.seed(4)# assign random class for i in range(len(feats)):if np.random.random() < th:feats[i, -1] = 0else:feats[i, -1] = 1while True:# prepare gravitygs = np.zeros((Class, 12), dtype=np.float32)change_count = 0# compute gravityfor i in range(Class):gs[i] = np.mean(feats[np.where(feats[..., -1] == i)[0], :12], axis=0)# re-labelingfor i in range(len(feats)):# get distance each nearest gravirydis = np.sqrt(np.sum(np.square(np.abs(gs - feats[i, :12])), axis=1))# get new labelpred = np.argmin(dis, axis=0)# if label is difference from old labelif int(feats[i, -1]) != pred:change_count += 1feats[i, -1] = predif change_count < 1:breakfor i in range(db.shape[0]):print(pdb[i], " Pred:", feats[i, -1])db, pdb = get_DB()
k_means(db, pdb, th=0.3)

实验结果:

利用k-means算法解决简单的无监督图像识别任务相关推荐

  1. kmeans改进 matlab,基于距离函数的改进k―means 算法

    摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...

  2. k 近邻算法解决字体反爬手段|效果非常好

    字体反爬,是一种利用 CSS 特性和浏览器渲染规则实现的反爬虫手段.其高明之处在于,就算借助(Selenium 套件.Puppeteer 和 Splash)等渲染工具也无法拿到真实的文字内容. 这种反 ...

  3. k means算法C语言伪代码,K均值算法(K-Means)

    1. K-Means算法步骤 算法步骤 收敛性定义,畸变函数(distortion function): 伪代码: 1) 创建k个点作为K个簇的起始质心(经常随机选择) 2) 当任意一个点的蔟分配结果 ...

  4. 退火算法解决简单优化问题

    退火算法基本思想在此不再赘述,可参考本文.模板如下: T0 = 1000; % 初始温度 T = T0; % 迭代中温度会发生改变,第一次迭代时温度就是T0 maxgen = 500; % 最大迭代次 ...

  5. 简单的无监督词统计nlp预测模型

    数据 https://download.csdn.net/download/weixin_32759777/56377320 import torch import numpy as np def r ...

  6. 表现SOTA!DetCo算法:目标检测无监督对比学习

    点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:Sophia知乎 https://zhuanlan.zhihu.com/p/393398507 AI博士笔记系 ...

  7. 一句话总结K均值算法

    一句话总结K均值算法 核心:把样本分配到离它最近的类中心所属的类,类中心由属于这个类的所有样本确定. k均值算法是一种无监督的聚类算法.算法将每个样本分配到离它最近的那个类中心所代表的类,而类中心的确 ...

  8. k均值聚类算法(K Means)及其实战案例

    算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...

  9. 利用匈牙利算法Hopcroft-Karp算法解决二分图中的最大二分匹配问题 例poj 1469 COURSES...

    首先介绍一下题意:已知,有N个学生和P门课程,每个学生可以选0门,1门或者多门课程,要求在N个学生中选出P个学生使得这P个学生与P门课程一一对应. 这个问题既可以利用最大流算法解决也可以用匈牙利算法解 ...

最新文章

  1. python多进程的使用(导包、创建子进程、启动子进程)
  2. (转) MiniUI使用
  3. cmake / cmake --build 如何理解
  4. POJ - 3415 Common Substrings(后缀数组+单调栈)
  5. Auto.JS 教程
  6. P7909 [CSP-J 2021] 分糖果 方法二
  7. Python基础——1基础
  8. 开课吧课堂:Java的内置异常汇总列表!
  9. 二叉树常见算法总结(java)
  10. 一棵树的生物量怎么算_2019玩花园 | 夏天怎么办?
  11. 流形学习t-SNE,LLE,Isomap
  12. ThinkPHP一键检测ThinkPHP漏洞,漏洞检测工具
  13. 软件过程模型的管道理论
  14. SQLServer2019 如何导出单张表数据
  15. java mcv_spring框架mcv的工作原理是什么?
  16. 如何减少block的数量?也就是减小Namenode的内存压力?
  17. 怎么制作打印机服务器,如何配置打印机服务器设置
  18. SQL 中INSERT INTO 的使用方法
  19. 三大前端构建工具横评,谁是性能之王!
  20. 图灵机器人 mysql_如何在微信小程序中制作图灵机器人?

热门文章

  1. python编程入门教程下载-Python编程从入门到实践的PDF教程免费下载
  2. 普通人学python有意义吗-风变编程:普通人学Python有意义吗?
  3. python免费课程400节-太原Python编程课哪家比较有优势
  4. python是什么 自学-初学 Python 者自学 Anaconda 的正确姿势是什么?
  5. python程序员月薪-据说做Python程序员,都月薪上万?
  6. python 菜鸟-Python 列表(List)
  7. 接口说明_实时语音识别_智能语音交互-阿里云
  8. 遵义 计算机应用能力,遵义市人力资源和社会保障局
  9. 【数据结构和算法笔记】:稀疏矩阵的存储结构详解
  10. 视频质量,分辨率,码率之间的关系 2