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

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链接同样的将会在下一篇列出,而下一篇是高斯混合模型的使用,希望大家多多指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1620318.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】二叉树篇|超清晰图解和详解:二叉树的序列化和反序列化

博主简介:努力学习的22级计算机科学与技术本科生一枚🌸博主主页: 是瑶瑶子啦每日一言🌼: 你不能要求一片海洋,没有风暴,那不是海洋,是泥塘——毕淑敏 目录 一、核心二、题目2.1:前序遍历2.2&…

2023.08.27 学习周报

文章目录 摘要文献阅读1.题目2.重点3.引言4.方法5.实验结果6.结论 深度学习Majorization-Minimization算法1.基本思想2.要求3.示意图 总结 摘要 This week, I read a computer science on the prediction of atmospheric pollutants in urban environments based on coupled d…

Xposed API详解

Xposed API详解 Hook修改变量Hook普通方法回调函数XC_MethodHookXC_MethodReplacement Hook获取参数与返回值获取参数获取返回值 Hook构造函数无参构造有参构造 Hook复杂函数Hook自定义类参数Hook替换函数与函数置空替换函数函数置空 Hook内部类与匿名类内部类匿名类 Xposed主动…

【Python】PySpark

前言 Apache Spark是用于大规模数据(large-scala data)处理的统一(unified)分析引擎。 简单来说,Spark是一款分布式的计算框架,用于调度成百上千的服务器集群,计算TB、PB乃至EB级别的海量数据…

Xposed常用逆向函数

1. 创建Xposed工程 在Android Studio中新建一个app工程&#xff0c;修改其中的 AndroidManifest.xml 文件&#xff0c;在<application></application>标签中增加如下代码 <meta-dataandroid:name"xposedmodule"android:value"true" />…

Xposed环境安装

一、Xposed 框架实现 Hook 的原理介绍 Zygote是Android的核心&#xff0c;每运行一个app&#xff0c;Zygote就会fork一个虚拟机实例来运行app&#xff0c; Xposed Framework深入到了Android核心机制中&#xff0c;通过改造Zygote来实现一些很牛逼的 功能。Zygote的启动配置在i…

Xposed 使用教程

Xposed作为Android开发中的神器&#xff0c;功能强大之处就不做过多介绍了&#xff0c;本文主要讲解一些常用的API&#xff0c;基本包含常用的Hook操作。 Hook静态变量 Class cla XposedHelpers.findClass(claName, loadPackageParam.classLoader); XposedHelpers.setStatic…

xposed android 4.4.2,xposed新版54

xposed新版54是一款好用的系统工具&#xff0c;软件安全&#xff0c;无需root权限&#xff0c;下载相对应功能板块即可在应用内实现应用多开、虚拟步数、以及qq&#xff0c;微信等多种功能&#xff0c;方便又实用&#xff01; 软件介绍 系统功能增强&#xff0c;如后台管制&…

Xposed安装

记录一下自己安装xposed的过程。网上很多xposed的安装教程&#xff0c;里面各种都是直接跳转到官网地址下载Xposed&#xff0c;但国内打不开&#xff0c;提示如下&#xff1a; 因此只能下载对应版本zip包进行本地安装&#xff0c;下载对应zip包放到“ /sdcard/Android/data/de…

android8 检测xposed,Xposed检测与自定义Xposed

Xposed检测与自定义Xposed 前言: Xposed检测 1、遍历App安装列表检测 2、自造异常检测堆栈信息。 3、检查关键Java方法是否变为native方法 4、反射XposedHelper类和XposedBridge类 5、检测Xposed相关文件 6、Root检测 7、安全建议 自定义Xposed 一、修改XposedBridge.jar包名 …

xposed android4.4,应用管理Xposed

应用管理Xposed是一款安卓应用管理xposed模块&#xff0c;可以帮助你更好的管理自己手机的各种应用的权限&#xff0c;应用使用需要先阅读了解一下使用的方法&#xff0c;非常强大的一款插件&#xff0c;欢迎大家前来下载。 新版特性 1. 为部分列表也添加基本筛选。 2. 在主页显…

android xposed 简书,Xposed 入坑篇

device-2018-04-12-101001.png 接下来开始敲代码了 美滋滋(皮一下很开心) 上一张整个工程的图 QQ截图20180412102021.png 以下是Test和Tutorial的代码 package com.zed.xposed.demo; import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.Xpo…

Xposed 入门

Xposed的原理 Android基于Linux&#xff0c;第一个启动的进程自然是init进程&#xff0c;该进程会 启动所有Android进程的父进程——Zygote(孵化)进程&#xff0c;该进程的启动配置在 /init.rc脚本中&#xff0c;而Zygote进程对应的执行文件是/system/bin/app_process&#xf…

Xposed

[Xposed framework] (概述) 记录学习文章&#xff0c;这里介绍一下Xposed framework&#xff0c;它可以让你修改ROM&#xff0c;无需修改任何APK或flashing.快速入门&#xff0c;请看Xposed上XDA 之android basic 101&#xff1a; http://www.youtube.com/watch?vuRR0Flqx9M8 …

Xposed安装与使用

xposed是什么&#xff1f; 一个很牛逼的框架&#xff0c;可以在不修改APK的情况下影响程序的运行&#xff0c;比如&#xff1a; 直接把APP的界面改成自己想要的样去掉界面里不喜欢的东西&#xff0c;自动抢红包消息防撤回步数修改等等 Xposed的工作原理 在开始修改之前&…

【Android】Xposed 框架解析

前言 Xposed这位老兄大家可能不认识&#xff0c;微信自动抢红包大家听过吧、微信记录器作弊大家听过吧、地理位置模拟大家听过吧&#xff0c;我很负责任的告诉大家&#xff0c;这些都是Xposed干的&#xff0c;对的&#xff0c;就是它&#xff0c;相信大家充着“谁抢我红包”的…

Android之Xposed框架完全使用指南

文章目录 Xposed环境搭建Xposed简介Xposed原理Xposed的安装 Xposed插件开发Xposed插件编写流程Xposed开发之Hook构造函数相关API无参构造函数的hook有参构造函数的hook实际效果 Xposed开发之修改属性相关API修改静态字段和成员字段实际效果 Xposed开发之hook一般函数相关APIhoo…

深入理解Android(三):Xposed详解

编者按&#xff1a;随着移动设备硬件能力的提升&#xff0c;Android系统开放的特质开始显现&#xff0c;各种开发的奇技淫巧、黑科技不断涌现&#xff0c;InfoQ特联合《深入理解Android》系列图书作者邓凡平&#xff0c;开设深入理解Android专栏&#xff0c;探索Android从框架到…

Xposed入门教程

2019年8月27日16时51分47秒以前一直没机会接触Android Hook方式的逆向今天有空试了下&#xff0c;以前也很少写这种东西&#xff0c;今天第一次&#xff0c;认真写下&#xff0c;记录一下?准备 准备搞太极的&#xff0c;但是Xposed都不会&#xff0c;不好搞&#xff0c;所以就…

RabbitMQ---订阅模型-Topic

订阅模型-Topic • Topic类型的Exchange与Direct相比&#xff0c;都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定Routing key 的时候使用通配符&#xff01; • Routingkey 一般都是有一个或多个单词组成&#xff0c;多个单词之间以…