K-means方法总结(附代码)

这一周事情较多,不得已先放弃了验证码分割部分的卷积神经网络的学习,先写两篇关于聚类方法的内容,分别是k-means和混合高斯模型。因为之前的论文中有关于k-means方法的字符分割方法,所以就先学习k-menas的方法。下一篇是高斯混合模型的方法总结。

算法基本原理:

k-means方法较为简单,原理也特别的清晰。

  1. 随机选取k个点,并将作为第一轮迭代的中心点;
  2. 计算每一组数据到k个点中的距离,并将每一个点分配到k个簇中;
  3. 更新中心点:将k个簇中的每一个点的各属性的值进行加和,并计算均值,得到新的中心点;
  4. 多次迭代,直到中心点的值不再发生变化。

代码实现:

基本原理很简单,代码也同样的简单。废话少说,直接上代码:

# k-means算法的中心部分
def k_means(data_set, k, start_point):cluster = []end_point = []for t in range(100):# 保证最多的迭代次数为100,不论是否得到最后的结果,都不再继续运行for i in range(len(data_set)):distance = []# 计算每一条数据与选中的点的距离并分到距离最小的簇中for j in range(len(start_point)):a = pow((data_set[i][0]-start_point[j][0]), 2)b = pow((data_set[i][1]-start_point[j][1]), 2)distance.append(pow(a+b, 0.5))passcluster.append(distance.index(min(distance)))distance.clear()# 得到更新以后的中心点end_point = update_start_point(data_set, cluster, k)pass# 如果中心点的数据保持不变,则结束循环if end_point == start_point:print("共迭代 "+str(t)+" 次")breakelse:if t == 99:breakelse:start_point = end_pointcluster.clear()passreturn cluster, end_pointpass
# 中心点的更新函数:
def update_start_point(data_set, cluster, k):start_update = [[0, 0], [0, 0], [0, 0]]for i in range(k):num = 0for j in range(len(cluster)):if i == cluster[j]:# 得到每一个点所分的簇,并计算每一处簇中的所有点的均值来更新中心点num += 1start_update[i][0] += data_set[j][0]start_update[i][1] += data_set[j][1]passpassif num == 0:start_update[i][0] = 0start_update[i][1] = 0else:start_update[i][0] = start_update[i][0]/numstart_update[i][1] = start_update[i][1]/numpassreturn start_updatepass

代码验证:

为了验证我们的代码,我们用两种方式进行验证:
1、用西瓜数据集进行验证(就是那个有密度和含糖量数据集)
2、用图片进行验证:用编写的程序对图片的内容进行分类,看最后的效果。
说干就干,首先是对西瓜数据集进行聚类的结果:

这里的初始点我就简单的采用了开始的三个点,最后得到的图片聚类结果如上图所示。
接着我们用图片进行验证
在用图片进行验证之前,我们需要对图片进行一定的处理:

def get_file(img):filename = "data\\zebra.txt"with open(filename, "w") as f:h = img.shape[0]w = img.shape[1]for i in range(h):for j in range(w):f.write(str(img[i][j][0])+" "+str(img[i][j][1])+" "+str(img[i][j][2])+"\n")return filename

将图片中的像素点全部存放在txt文件中,接着就可以通过同样的方式对图片进行处理。
最后的结果如下图所示(应该一眼就能看到哪个是原图,哪个是聚类图吧):


最后附上源代码百度云盘地址:
k-means源代码、数据集及测试图片
提取码:p1vh
CSDN链接同样的将会在下一篇列出,而下一篇是高斯混合模型的使用,希望大家多多指正。

K-means方法总结(附代码)相关推荐

  1. 常用数学符号的 LaTeX 表示方法(附代码)

    常用数学公式的 LaTeX 表示方法(附代码) 换行问题 指数和下标 平方根 上/下划线.上/下括号 向量箭头 分数 积分.求和.乘积 矩阵 其他常用符号 换行问题 使用$$会自动换行.使用$会使得公 ...

  2. JavaScript实现模板生成大量数据的方法(附代码)

    本篇文章给大家带来的内容是关于JavaScript实现模板生成大量数据的方法(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 有时需要根据模板生成大量数据,这个代码工具简直就 ...

  3. torch.bernoulli 的使用方法(附代码示例)

    torch.bernoulli 的使用方法(附代码示例) 功能解释 参数 代码示例 功能解释 *torch.bernoulli(input, , generator=None, out=None) → ...

  4. Php字符拼出心形,canvas实现九宫格心形拼图的方法(附代码)-

    这篇文章给大家介绍的内容是关于canvas实现九宫格心形拼图的方法(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 说明 前几天在朋友圈看到好几次这种图片. 用其中的小格子, ...

  5. php json字符串序列化,JSON序列化与反序列化实现方法(附代码)

    这次给大家带来JSON序列化与反序列化实现方法(附代码),JSON序列化与反序列化实现的注意事项有哪些,下面就是实战案例,一起来看一下. 一.JSON简介 JSON(JavaScript Object ...

  6. php 获取临时素材,php微信获取临时素材的方法(附代码)

    本篇文章给大家带来的内容是关于php微信获取临时素材的方法(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 注意:1:媒体文件在微信后台保存时间为3天,即3天后media_i ...

  7. php实现一行省略号,css实现文字溢出省略号的四种方法(附代码)

    本篇文章给大家带来的内容是关于css实现文字溢出省略号的四种方法(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 在项目中有涉及实现一行或者第几行后加省略号,在实现第几行后加 ...

  8. 双飞翼 html 布局,css实现双飞翼布局的四种方法(附代码)

    本篇文章给大家带来的内容是关于css实现双飞翼布局的四种方法(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 圣杯布局.双飞翼布局效果图 从效果图来看圣杯布局.双飞翼布局效果 ...

  9. 独家 | 使用Python实现机器学习特征选择的4种方法(附代码)

    作者:Sugandha Lahoti 翻译:李洁 校对:杨光 本文约3500字,建议阅读13分钟. 本文中,我们将研究从数据集中选择特征的不同方法;同时通过使用Python中Scikit-learn  ...

  10. ESRGAN:基于GAN的增强超分辨率方法(附代码解析)

    作者丨左育莘 学校丨西安电子科技大学 研究方向丨计算机视觉 之前看的文章里有提到 GAN 在图像修复时更容易得到符合视觉上效果更好的图像,所以也是看了一些结合 GAN 的图像修复工作. ESRGAN: ...

最新文章

  1. 【深度学习】基于Pytorch多层感知机的高级API实现和注意力机制(一)
  2. 图卷积网络进行骨骼识别代码_【骨骼行为识别】2s-AGCN论文理解
  3. 《研磨设计模式》chap22 装饰模式Decorator(4)AOP+总结
  4. 在控制台输出口,根据内存地址,找到被过度释放的对象!
  5. Font Awesome一套绝佳的图标字体库和CSS框架的使用
  6. 架构设计 | 分布式体系下,服务分层监控策略
  7. 服务器 '' 上的 MSDTC 不可用。
  8. xampp的安装及使用
  9. 求1到n之间的质数(素数)
  10. HTML+CSS制作课程表
  11. 计算机视觉论文-2021-07-21
  12. c++ 运算符重载(简单易懂)
  13. 今日头条如何快速开原创?今日头条怎么一个礼拜开原创?
  14. 关于小程序网易云音乐接口用户登录,繁忙问题
  15. selenium处理iframe标签
  16. 【算法•日更•第七期】区间动态规划详解+一本通1570能量项链题解
  17. mysql 显示表_显示MYSQL表信息的方法
  18. Play! framework开发规范
  19. matlabTDOA定位
  20. 关于蒙古语输入法的研究

热门文章

  1. 量子计算机用什么传导信息,量子是如何传递信息的?
  2. php notice 性能,【OneAPM出品】解决Notice错误性能提升
  3. 【软考系统架构设计师】2011年下系统架构师综合知识历年真题
  4. 打印机种类与对应的耗材
  5. 比较两组数据的差异用什么图更直观_用Excel制作旋风图
  6. FTP指的是什么协议?由什么组成?有什么作用?
  7. 个人免签支付如何对接微信支付宝?
  8. vijos 1282128312841285 佳佳的魔法照片/魔法药水/魔杖/魔法阵
  9. CentOS8 配置记录
  10. 开发基于 Google Map 的 Android 应用