K-mean clustering(K均值聚类算法)

 

一、聚类与分类的区别

分类:类别已知,通过对已知分类的数据进行训练和学习,找到这些不同类的特征,再对未分类的数据进行分类。是有监督学习。

聚类:事先不知道数据会分为几类,通过聚类分析将数据聚合成几个群体。聚类不需要对数据进行训练和学习。属于无监督学习。

 

二、k-means 聚类(物以类聚,人以群分)

1、首先输入 k 的值,即我们指定希望通过聚类得到 k 个分组;

2、从数据集中随机选取 k 个数据点作为初始大佬(质心);

3、对集合中每一个小弟,计算与每一个大佬的距离,离哪个大佬距离近,就跟定哪个大佬。

4、这时每一个大佬手下都聚集了一票小弟,这时候召开选举大会,每一群选出新的大佬(即通过算法选出新的质心)。

5、如果新大佬和老大佬之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),可以认为我们进行的聚类已经达到期望的结果,算法终止。

6、如果新大佬和老大佬距离变化很大,需要迭代3~5步骤。
 

三、举例

有6个点,从图上看应该可以分成两堆。现在我手工地把 k-means 计算过程演示一下,同时检验是不是和预期一致: 

1.设定 k 值为2

2.选择初始大佬(就选 P1 和 P2)

3.计算小弟与大佬的距离:

从上图可以看出,所有的小弟都离 P2 更近,所以次站队的结果是:

A 组:P1 
B 组:P2、P3、P4、P5、P6

4.召开选举大会:

A 组没什么可选的,大佬就是自己 
B 组有5个人,需要重新选大佬,这里要注意选大佬的方法是每个人 X 坐标的平均值和 Y 坐标的平均值组成的新的点,为新大佬,也就是说这个大佬是“虚拟的”。因此,B 组选出新大哥的坐标为:P 哥((1+3+8+9+10)/5,(2+1+8+10+7)/5)=(6.2,5.6)。 
综合两组,新大哥为 P1(0,0),P哥(6.2,5.6),而P2-P6重新成为小弟。

5.再次计算小弟到大佬的距离: 

这时可以看到P2、P3离P1更近,P4、P5、P6离P哥更近,所以第二次站队的结果是:

A 组:P1、P2、P3 
B 组:P4、P5、P6(虚拟大哥这时候消失)

6.第二届选举大会: 
同样的方法选出新的虚拟大佬:P哥1(1.33,1),P哥2(9,8.33),P1-P6都成为小弟。

7.第三次计算小弟到大佬的距离: 

这时可以看到 P1、P2、P3 离 P哥1 更近,P4、P5、P6离 P哥2 更近,所以第二次站队的结果是: 
A 组:P1、P2、P3 
B 组:P4、P5、P6

我们可以发现,这次站队的结果和上次没有任何变化了,说明已经收敛,聚类结束,聚类结果和我们最开始设想的结果完全一致。

 

四、详解

k-means算法以数据间的距离作为数据对象相似性度量的标准,因此选择计算数据间距离的计算方式对最后的聚类效果有显著的影响,常用计算距离的方式有:余弦距离、欧式距离、曼哈顿距离等。本文以欧式距离为例。

欧式距离公式:

举例:若数据为2维:

其计算欧式距离如下(可理解为D表示维度,i,j表示行数):

  通过上述公式可计算出每对数据对象间的距离,根据距离的远近进行聚类成指定的类别数K。

对每一类中的数据初步选取类心,取的方式有多种如:

    1.该类所有数据的均值;

    2.随机取k个数据作为类心;

    3.选取距离最远的k个点作为类心等。

以上方法均需要对初步的类心进行迭代,当类心变化缓慢时便可认为收敛,此时该点便为最终的类型。本文以方法1为例:

表示第k类,表示第k类中数据对象的个数。类心迭代过程如下:

通常迭代终止的条件有两种:1)达到指定的迭代次数T;2)类心不再发生明显的变化,即收敛。

 

五、缺点:

  • 聚类中心的个数K 需要事先给定,但在实际中这个 K 值的选定是非常难以估计的,很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适
  • Kmeans需要人为地确定初始聚类中心,不同的初始聚类中心可能导致完全不同的聚类结果。(可以使用Kmeans++算法来解决)

针对上述第2个缺陷,可以使用Kmeans++算法来解决。

 

 

 

参考文章地址:

https://blog.csdn.net/huangfei711/article/details/78480078

https://blog.csdn.net/hanxia159357/article/details/81530361

Kmeans++算法地址:https://blog.csdn.net/zll0927/article/details/17000675


 

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

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

相关文章

编程初学者如何在GitHub寻找适合自己的小项目?

即使作为编程新手,刚刚接触GitHub,也建议你从最简单的项目入手,而不是单纯研究大量理论。 这个⭐18.5k的优(宅)秀(男)项目:komeiji-satori/Dress就非常适合初学者Pick。 作为全球最…

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

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

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

博主简介:努力学习的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从框架到…