【算法周】人以类聚咋个聚!K-means了解一下~(上篇)

k-means算法(欧式距离) 无聊时写个k-means 采用欧式距离,进行分类,随机n个三维(a,b,c)点,聚类成k类 import java.util.*; public class KMeans { public static void main(String[] args){ //K-Means ,首先随机生成n个点 int n = 20; int k = ... 阅读详情

欢迎关注哈希大数据微信公众号《哈希大数据》

上一周我们给大家讲了四篇机器学习的扫盲篇,把机器学习需要的一些常识以及需要的计算机环境理了一遍,这一周我们的系列名称是【算法周】!!毕竟算法是机器学习的灵魂嘛~~

今天我们给大家介绍算法的Chaper1——K-means~ 由于篇幅较长本次介绍分为上下两篇

K-Means算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛。K-Means算法有大量的变体,本文就从最传统的K-Means算法讲起,在其基础上讲述K-Means的优化变体方法。包括初始化优化K-Means++, 距离计算优化elkan K-Means算法和大数据情况下的优化Mini Batch K-Means算法。
 1.K-Means原理初探

K-Means算法的思想很简单,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。

如果用数据表达式表示,假设簇划分为(C1,C2,...Ck),则我们的目标是最小化平方误差E:


其中μi是簇Ci的均值向量,有时也称为质心,表达式为:

如果我们想直接求上式的最小值并不容易,这是一个NP难的问题,因此只能采用启发式的迭代方法。 K-Means采用的启发式方式很简单,用下面一组图就可以形象的描述。

上图a表达了初始的数据集,假设k=2。

在图b中,我们随机选择了两个k类所对应的类别质心,即图中的红色质心和蓝色质心,然后分别求样本中所有点到这两个质心的距离,并标记每个样本的类别为和该样本距离最小的质心的类别。

如图c所示,经过计算样本和红色质心和蓝色质心的距离,我们得到了所有样本点的第一轮迭代后的类别。此时我们对我们当前标记为红色和蓝色的点分别求其新的质心,如图4所示,新的红色质心和蓝色质心的位置已经发生了变动。图e和图f重复了我们在图c和图d的过程,即将所有点的类别标记为距离最近的质心的类别并求新的质心。最终我们得到的两个类别如图f。

当然在实际K-Mean算法中,我们一般会多次运行图c和图d,才能达到最终的比较优的类别。


2.传统K-Means算法流程

在上一节我们对K-Means的原理做了初步的探讨,这里我们对K-Means的算法做一个总结。

首先我们看看K-Means算法的一些要点。

1)对于K-Means算法,首先要注意的是k值的选择,一般来说,我们会根据对数据的先验经验选择一个合适的k值,如果没有什么先验知识,则可以通过交叉验证选择一个合适的k值。

2)在确定了k的个数后,我们需要选择k个初始化的质心,就像上图b中的随机质心。由于我们是启发式方法,k个初始化的质心的位置选择对最后的聚类结果和运行时间都有很大的影响,因此需要选择合适的k个质心,最好这些质心不能太近。

好了,现在我们来总结下传统的K-Means算法流程。

输入是样本集D={x1,x2,...xm},聚类的簇树k,最大迭代次数N

输出是簇划分C={C1,C2,...Ck} 

1) 从数据集D中随机选择k个样本作为初始的k个质心向量: {μ1,μ2,...,μk}

2)对于n=1,2,...,N

a) 将簇划分C 初始化为Ct=∅     t=1,2...k

b) 对于i=1,2...m,计算样本xixi和各个质心向量μj(j=1,2,...k)的距离:

dij=||xi−μj||2 ,将xi标记最小的为dij所对应的类别λi。此时更新Cλi=Cλi∪{xi}Cλi=Cλi∪{xi}

对于j=1,2,...,k,对Cj中所有的样本点重新计算新的质心:


 e) 如果所有的k个质心向量都没有发生变化,则转到步骤 3)

3) 输出簇划分C={C1,C2,...Ck}

3.K-Means初始化优化K-Means++

在上节我们提到,k个初始化的质心的位置选择对最后的聚类结果和运行时间都有很大的影响,因此需要选择合适的k个质心。如果仅仅是完全随机的选择,有可能导致算法收敛很慢。K-Means++算法就是对K-Means随机初始化质心的方法的优化。

K-Means++的对于初始化质心的优化策略也很简单,如下:

a)  从输入的数据点集合中随机选择一个点作为第一个聚类中心μ1μ1

b) 对于数据集中的每一个点xixi,计算它与已选择的聚类中心中最近聚类中心的距离


c) 选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)D(x)较大的点,被选取作为聚类中心的概率较大

d) 重复b和c直到选择出k个聚类质心

e) 利用这k个质心来作为初始化质心去运行标准的K-Means算法


未完待续。。。欢迎关注下期内容






利用 python 编写 K-Means聚类算法 利用 python 实现 K-Means聚类 k-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。 k个初始类聚类中心点的选取对聚类结果具有较大的影响,因为在该算法第一步中是随机的选取任意k个对象作为初始聚类的中心,初始地代表一个簇。该算法在每次迭代中对数据集中剩余的每个对象,根据其与各个簇中心的距离将每个对象重新赋给最近的簇。.. 阅读详情

相关推荐

什么是K-means聚类算法

K-means 聚类算法的聚类过程,可以看成是不断寻找簇的质心的过程,这个过程从随机设定 K 个质心开始,直到找到 K 个真正质心为止。第一步,既然现在有了 K 个质心,对于其他数据点来说,根据其距离哪个质心近就归为哪个簇的办法,可以聚成 K 个簇。但请注意,这只是第一步,并不是最后完成聚类的结果;第二步,对于聚成的 K 个簇,需要重新选取质心。这里运用了多数表决原则,根据一个簇内所有样本点各自的维度值来求均值,得到该簇的新的坐标值;第三步是生成新的质心,其实就是重复上述过程。

weixin_66519663的博客 1548

(数学建模-机器学习)K-means聚类算法(python实现)

一、算法简介: K-means算法是典型的基于距离的非层次聚类算法,以距离作为相似性的评价指标,认为两个对象的距离越近,其相似度就越大。 二、算法流程: 1.设置一个常数K作为类数,随机选取K个初始质心(K的取值方法下面会讲)。 2.重新计算K个聚类的质心(第一次不需要重新计算),然后计算样本值和每个质心间的相似程度(如上文讲到,相似性评价指标为距离),将各个样本归类到其最接近的质心当中,(这样...

numb_ac的博客 3598

K-means算法

简介   K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。   k个初始类聚类中心点的选取对聚类结果具有较大的      公式 影响,因为在该算法第一步中是随机的选取任意k个对象作为初始聚类的中心,初始地代表一

Eason 1959

聚类算法-Kmeans算法的简单实现

1. 聚类与分类的区别:     首先要来了解的一个概念就是聚类,简单地说就是把相似的东西分到一组,同 Classification (分类)不同,对于一个 classifier ,通常需要你告诉它“这个东西被分为某某类”这样一些例子,理想情况下,一个 classifier 会从它得到的训练集中进行“学习”,从而具备对未知数据进行分类的能力,这种提供训练数据的过程通常叫做 supervise

我的新博客 1万+

别再只跑recon-all了!FreeSurfer实战:从T1图像到freeview可视化的完整避坑指南

本文详细解析FreeSurfer从T1图像处理到freeview可视化的全流程,包括环境配置、recon-all深度解析、高级可视化技巧及性能优化策略。特别针对常见错误提供解决方案,帮助用户高效完成MRI数据分析,避免常见陷阱。

weixin_33404102的博客 353

Win11/Win10系统下,Proe5.0 M280终极版保姆级安装与激活指南(含SSQ补丁避坑)

本文提供Win11/Win10系统下Pro/E 5.0 M280终极版的详细安装与激活指南,涵盖环境配置、SSQ补丁应用及常见问题解决方案。通过系统调整、分步安装和性能优化,确保软件在现代操作系统上的稳定运行,特别适合机械设计用户参考。

weixin_30895059的博客 444

kmeans算法_KMeans聚类算法详解

1. 写在前面如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,常见的机器学习算法:监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法Adaboost等无监督算法:聚类,降维,关联规则, PageRank等为了详细的理解这些原理,曾经看过西瓜书,统计学习方法,机器学习实战等书,也听过一些机器学习的课程,但总感觉话语里比较深奥,读起...

weixin_39824223的博客 5204

自然二进制数与格雷码的相互转换

自然二进制数与格雷码两者优势: 自然二进制数的编码方式简单明了,容易理解,在加减运算中能够直接进行,同时十分方便进行一些位运算操作(如移位、取反等)。 格雷码计数时只有一位变化,可有效减少计数器状态的冗余转换,同时在传输数据时能够减小传输错误的概率,此外带权重编码处理更加方便。 在一定程度上自然二进制数与格雷码优缺点基本相反,综上所述,自然二进制数和格雷码各有优劣之处,需要根据具体应用场景选择合适的编码方式。简单来说,在计数器和编码器中,倾向于使用格雷码;而在进行加减运算时,则倾向于使用自然二进制数。

Loudrs的博客 7494

K-means聚类算法实战

一、K-means聚类算法 1 K-means算法的相关描述 聚类是一种无监督学习,它将相似的对象归到同一簇中。聚类的方法几乎可以应用所有对象,簇内的对象越相似,聚类的效果就越好。K-means算法中的k表示的是聚类为k个簇,means代表取每一个聚类中数据值的均值作为该簇的中心,或者称为质心,即用每一个的类的质心对该簇进行描述。 聚类和分类最大的不同在于,分类的目标是事先已知的,而聚类事先不知道...

weixin_41438466的博客 1万+

BERTopic安装指南:hdbscan依赖问题全解析(附解决方案)

本文详细解析了安装BERTopic时常见的hdbscan依赖报错问题,深入剖析了C++编译环境缺失、Python版本兼容性以及包管理渠道混用三大核心原因。针对Windows、macOS和Linux不同系统,提供了创建虚拟环境、使用conda安装预编译包、安装C++编译工具等具体解决方案,帮助用户顺利安装BERTopic并开始文本主题建模实践。

weixin_29061041的博客 214

Mid-360激光雷达与IMU标定实战:从环境配置到参数优化

本文详细介绍了Mid-360激光雷达与IMU标定的完整流程,涵盖环境配置、驱动适配、参数优化及实战操作。重点解析了标定参数设置技巧与常见问题解决方案,帮助开发者提升机器人感知系统的定位与建图精度,确保LiDAR-IMU数据融合的最佳效果。

a1b2c3d的博客 915

kmeans算法原理以及实践操作(多种k值确定以及如何选取初始点方法)

kmeans一般在数据分析前期使用,选取适当的k,将数据聚类后,然后研究不同聚类下数据的特点。 算法原理: (1) 随机选取k个中心点; (2) 在第j次迭代中,对于每个样本点,选取最近的中心点,归为该类; (3) 更新中心点为每类的均值; (4) j<-j+1 ,重复(2)(3)迭代更新,直至误差小到某个值或者到达一定的迭代步数,误差不变. 空间复杂度o(N) 时间复杂...

weixin_30783629的博客 2925

UG476 GT Transceivers文档翻译和自身理解

对UG476 Xilinx官方文档进行翻译的基础上加上自己的理解

weixin_45143788的博客 4598

【算法周】人以类聚咋个聚!K-means了解一下~(下篇)

欢迎关注哈希大数据微信公众号《哈希大数据》接上篇4.K-Means距离计算优化elkan K-Means在传统的K-Means算法中,我们在每轮迭代时,要计算所有的样本点到所有的质心的距离,这样会比较的耗时。那么,对于距离的计算有没有能够简化的地方呢?elkan K-Means算法就是从这块入手加以改进。它的目标是减少不必要的距离的计算。那么哪些距离不需要计算呢?elkan K-Means利用了两...

HashData2018的博客 348

JAVA:Spring Boot 集成 Forest 优雅的 HTTP 客户端

Forest是一个优雅的Java HTTP客户端框架,通过注解式声明简化HTTP接口调用。它支持多HTTP客户端、自动参数绑定、序列化、重试机制和拦截器等功能。本文演示了如何在Spring Boot中集成Forest,包括配置、接口定义和调用示例,还展示了POST请求、文件上传等常见场景。相比传统HTTP客户端,Forest具有声明简洁、功能完善的特点,特别适合微服务调用和第三方API对接,能显著提升开发效率和代码可维护性。

木头 427

【目标检测】IoU(交并比)详解及代码实现

1. IOU概述        IoU的全称为交并比(Intersection over Union),是目标检测中使用的一个概念,IoU计算的是“预测的边框”和“真实的边框”的交叠率-,即它们的交集和并集的比值。最理想情况是完全重叠,即比值为1。 2. IoU计算        IoU等于“预测的边框”和“真实的边框”之间交集和并集的比值。IoU计算如下图,B1为真实

Roaddd的博客 2万+

K-Means及K-Means++算法Python源码实现

K-Means及K-Means++算法Python源码实现

全性保真,不以物累形。 8374

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

K-Means(聚类)

说到聚类,应先理解聚类和分类的区别,很多业务人员在日常分析时候不是很严谨,混为一谈,其实二者有本质的区别。 分类:分类其实是从特定的数据中挖掘模式,作出判断的过程。比如Gmail邮箱里有垃圾邮件分类器,一开始的时候可能什么都不过滤,在日常使用过程中,我人工对于每一封邮件点选“垃圾”或“不是垃圾”,过一段时间,Gmail就体现出一定的智能,能够自动过滤掉一些垃圾邮件了。这是因为在点选的过程中...

https://blog.youkuaiyun.com/sinat_36710456 14万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【机器学习17】聚类K-MEANS和DBSCAN算法详解

聚类算法详解前言一、K-MEANS算法1.基本流程2.优缺点二、DBSCAN算法总结 前言 前面已经介绍了决策树模型和集成学习模型等内容,无论使用它两用来做回归还是分类任务都是有一个预定对比的y值(也就是标签),如果数据中没有这个标签了,只是一群离散的值,该怎么处理呢?这就涉及到本次梳理的内容了,也就是聚类问题(属于无监督,没有预定对比的条件了),最终目的要是把相似的东西分到一组,主要的难点在于如何对创建的模型进行评估和参数调整,因为没有y了,之前的那些评估的方法也自然就不适用了,本次梳理将详细地介绍相关的

lys_828的博客 7508

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

K-means的改进

前言 k-means算法是数据挖掘十大经典算法之一,已出现了很多的改进或改良算法。例如 1、对k的选择可以先用一些算法,分析数据的分布,如重心和密度等,然后选择合适的k。 2、有人提出了二分k均值(bisecting k-means)算法,它对初始的k个质心的选择就不太敏感。 3、基于图划分的谱聚类算法,能够很好地解决非凸数据的聚类。 一、Canopy算法配合初始聚类 二、K-means++ ...

chbxw 1万+

数据挖掘-K-Means算法

微信搜索:“二十同学” 公众号,欢迎关注一条不一样的成长之路 今天说聚类,但是必须要先理解聚类和分类的区别,很多业务人员在日常分析时候不是很严谨,混为一谈,其实二者有本质的区别。 分类其实是从特定的数据中挖掘模式,作出判断的过程。比如Gmail邮箱里有垃圾邮件分类器,一开始的时候可能什么都不过滤,在日常使用过程中,我人工对于每一封邮件点选“垃圾”或“不是垃圾”,过一段时间,Gmail就体现出一定的智能,能够自动过滤掉一些垃圾邮件了。这是因为在点选的过程中,其实是给每一条邮件打了一个“标签”,这个标签只有

二十同学 5万+

K-Means聚类算法

聚类算法是传统机器学习算法中比较重要的一个算法,也是工程项目当中一个比较常用的算法。

m0_63260018的博客 4149

全网最通俗易懂的聚类算法!嘿,来聚个类!

简单易懂,图解聚类算法

Jack-Cui 1万+

K-means(K-均值)算法

容易理解,聚类效果不错,虽然是局部最优, 但往往局部最优就够了;原理简单,实现方便,收敛速度快;处理大数据集的时候,该算法可以保证较好的伸缩性;当簇近似高斯分布的时候,效果非常不错;算法复杂度低;聚类效果较优;模型的可解释性较强;调参只需要调类数k。

m0_62110645的博客 5173

K-means 算法原理以及实现过程

K-means是一种经典无监督聚类算法,通过迭代将数据划分为K个簇,使簇内相似度高、簇间差异大。算法流程包括初始化中心点、分配数据点、更新中心和迭代优化。K值选择是关键,可采用肘部法则(SSE)或K-means++优化初始质心位置。评估指标包括簇内平方和(SSE)和轮廓系数,后者能综合衡量内聚性与分离性。轮廓分析通过可视化各簇轮廓系数的分布情况,更直观评估聚类质量。代码示例展示了如何实现K-means及评估不同K值的效果。

m0_74993985的博客 1881

简述 K-means聚类算法

机器学习算法主要分为两大类:有监督学习和无监督学习,它们在算法思想上存在本质的区别。有监督学习,主要对有标签的数据集(即有“参考答案”)去构建机器学习模型,但在实际的生产环境中,其实大量数据是处于没有被标注的状态,这时因为“贴标签”的工作需要耗费大量的人力,如果数据量巨大,或者调研难度大的话,生产出一份有标签的数据集是非常困难的。再者就算是使用人工来标注,标注的速度也会比数据生产的速度慢的多。因此要想对没有被标注的数据进行分类,就要使用无监督学习算法。常见的无监督学习算法,包括 K-means 聚类算法、均

weixin_47906106的博客 7416
上一篇: 【科普周】想lu代码不知道怎么搭环境??
下一篇: 【算法周】人以类聚咋个聚!K-means了解一下~(下篇)
哈希大数据
博客等级 码龄9年 331粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值