K-means聚类算法原理、步骤、评价指标和实现

news2024/11/19 13:20:33

1、聚类

聚类与分类不同,聚类分析分通过分析大量含有一定规律但杂乱数据,得到数据间内在的逻辑,将杂乱的数据按照所得的数据规律划分成不同的种类。K-measn、DBSCAN和层次是当前广泛使用的三种聚类方法。以下对三种方法进行分析,选择适合的聚类方法。

方法

K-means

凝层次

DBSCAN

类型

基于原型的、划分的、完全的

层次的、完全的

基于密度的、划分的、部分的

基本原理

以样本非中心点到其所属的中心点的距离的平方和最小为目标来划分相应的类,并不断更新质心的位置和划分新类直至质心稳定

以每个点作为一个类为始,依据某种距离逐步合并“最接近”的类,直至所有的类被合并,形成有层次的聚类树

通过半径和邻域内样本点数量对密度进行定义,将核心点与其邻域内的所有核心点同处一类,将边界点归到邻域内核心点的类中

优点

1、收敛速度快:

2、算法可解释性好,原理简单;

3、调参(K)简单

可发现聚类间的层次关系

1、抗噪音;

2、能处理任意形状类;自动确定类数;

缺点

1、易受初始值限制;

2、需首先确定K值

计算复杂度高;

对半径和邻域内包含点数敏感

不同的方法特点不同,本次主要分析Kmeans聚类。

2、K-means聚类步骤

K-means算法主要有四个核心要点:

(1)簇个数k的选择

(2)各个样本点到“簇中心”的距离

(3)更新“簇中心”

(4)重复上述2、3过程,直至"簇中心"没有移动

基于上述四个核心要点,K-means算法具体步骤为:

(1)K值的选择:选取K个簇类的质心(通常为随机);

(2)距离度量:需要计算各个样本点到“簇中心”的距离,距离算法各有优劣,根据具体使用目标的不同采用合适的度量方法,常用且可靠的的度量方法有:

欧式距离:

曼哈顿距离:

 余弦相似度:

 (3)新质心计算:根据第一计算距离的结果,更新“簇中心”,再计算各样本到“簇中心”的距离,与第二步类似。

(4)停止条件:每一次计算后,需要判断停止条件,达到条件时,满足需求,停止迭代计算。常用的停止要求有:

1)当质心不再改变,或给定loop最大次数loopLimit

2)当每个簇的质心,不再改变时就可以停止K-means

3)当loop次数超过looLimit时,停止K-means

4)只需要满足两者的其中一个条件,就可以停止K-means

5)如果Step4没有结束K-means,就再执行step2-step3-step4

6)如果Step4结束了K-means,则就打印(或绘制)簇以及质心

3、K-means算法评价指标

K-means算法的主要评价指标如下表所示:

指标

特点

紧密度(Compactness)

紧密度代表每一个类别元素到该类中心的聚类,因此聚类算法的效果好,类中的各个元素到该类的距离越小,紧密度越小。

分割度(Seperation)

分割度(Seperation)代表平均距离,计算式与上一节的距离方式一致,一般来说,不同类别的距离越远,分割度就越大,相应的不同类别之间的关系越弱,聚类效果越好。

误差平方和(SSE:)

误差平方和代表聚类的目标,原则上聚类效果越好时,SSE越小。

轮廓系数(SilhouetteCoefficient)

一个类别元素之间的距离应该越小越好,不同类别之间的元素则应该聚类越大,轮廓系数可以衡量整一个聚类的效果,当聚类效果好时,轮廓系数取得最大值+1,相反,聚类效果不好时,轮廓系数取得最小值-1。

4、K-means的实现过程

 如图,K-means是先选定两个质心,求解其他点到两个质心的距离,进行第一次聚类,然后再在两类中选出新的质心,继续分类,不断迭代。

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

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

相关文章

Mybatis 如何实现返回多个结果集——详测版

文章结构 本文介绍一个在 Mybatis 中不常见的操作,但是可能有些朋友刚好需要用到,Mybatis 如何实现返回多个结果集 什么情况会返回多个结果集: 存储过程多个 select 语句 具体过程如下(作者实测:跟着观战就完事了&a…

chatgpt赋能python:Python:一个强大、适用广泛的编程语言

Python:一个强大、适用广泛的编程语言 作为一种高级编程语言,Python 可以轻松地完成许多计算机编程任务。它是一种协作和代码重用的语言,Python旨在提高生产力并减少缺陷。 对于那些想要学习编程语言的人来说,Python 是非常适合…

Class源码

介绍 如果想要在程序运行阶段访问某个类的所有信息,并支持修改类的状态或者行为的话,肯定会用到反射,而反射靠的就是Class类。 通过Class类可以获取类的实例,构造方法,字段,成员方法,接口等信…

网络编程知识点总结(3)

socket 服务器的开发步骤和代码实现 1.创建套接字 socket()函数 int socket(int domain, int type, int protocol); domain: 指明所使用的协议族,通常为 AF_INET,表示互联网协议族(TCP/IP 协议族)AF_INET IPv4因特网域. AF_INET6 IPv6 因特网域 AF_U…

屏幕录制安卓应用被发现在监视用户

据 ESET 的研究人员称,一款在 Google Play 商店中下载量超过 50,000 次的屏幕录像机应用程序被发现使用设备的麦克风悄悄地录制音频并窃取文件,这表明它可能是间谍活动的一部分。 iRecorder 是一个合法的应用程序,于 2021 年 9 月可用&#…

chatgpt赋能python:Python动态函数介绍

Python动态函数介绍 Python是一种高级编程语言,它支持动态函数。动态函数就是在Python中可以在运行时创建函数。这意味着编程者可以在编写代码时不必事先定义所有函数,而是可以通过Python函数来创建函数。 Python动态函数的一个好处是可以轻松地编写可…

chatgpt赋能python:Python动态列表介绍

Python动态列表介绍 Python是一种常用的高级编程语言,它支持多种数据结构,其中包括列表。以Python中的列表为例,本文将详细介绍Python动态列表的特点和用途。 Python中的列表 在Python中,列表就是一组由逗号分隔,放…

基于PyQt5的图形化界面开发——队列动画演示

目录 0. 前言1. 了解队列2. 代码实现3. 效果演示其他PyQt5文章 0. 前言 本文使用PyQt5制作图形化界面演示数据结构中的队列操作,与上一节队列动画相对应 基于PyQt5的图形化界面开发——队列动画演示 操作系统:Windows10 专业版 开发环境:P…

javascript基础十六:Ajax 原理是什么?如何实现?

一、是什么 AJAX全称(Async Javascript and XML) 即异步的JavaScript 和XML,是一种创建交互式网页应用的网页开发技术,可以在不重新加载整个网页的情况下,与服务器交换数据,并且更新部分网页 Ajax的原理简单来说通过XmlHttpRequ…

Linux编辑器,开机重启,用户注销,用户管理 常用命令

Linux 实操篇- Vi 和Vim 编辑器 vi 和vim 的基本介绍 Linux 系统会内置vi 文本编辑器 Vim 具有程序编辑的能力,可以看做是Vi 的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。 代码补完、编译及错误跳转等方便编程的功能特…

环境感知算法——4.RandLA-Net基于SemanticKITTI训练

1.前言 RandLA-Net(Random Sampling and Local Feature Aggregator Network)是一种处理点云数据的神经网络结构,采用随机采样(Random Sampling, RS)以降低点云密度并减少计算量。尽管随机采样可能会丢掉一些有用的信息…

【 STM32实例 】 智能小车的红外循迹

文章目录 前言一、硬件选择与连接1. STM32F103C8T6最小系统板2. L298N双路电机驱动3. 红外循迹模块 二、环境配置1. Device2. Output3. C/C4. Debug 三、项目管理与代码实现1. 项目结构2. 工程管理3. 具体文件xunji.cxunji.hmain.c 总结项目源码 前言 这篇文章我主要讲的是让基…

chatgpt赋能python:Python加颜色代码-提高代码可读性和吸引力的简单技巧

Python加颜色代码 - 提高代码可读性和吸引力的简单技巧 在编写Python代码时,您可能已经注意到,有时候需要强调某些部分,以使其更易于阅读和理解。这时候,您可以使用加颜色代码来增强代码的可读性和吸引力。在本文中,我…

Opencv项目实战:基于dlib的人脸关键点检测

文章目录 一、项目简介二、环境配置2.1、dlib人脸检测器:dlib.get_frontal_face_detector()2.2、dlib关键点定位工具:shape_predictor_68_face_landmarks.dat 三、项目实战 一、项目简介 该项目基于dlib模块提供的人脸检测器以及关键点定位工具完成。首…

大数据:hive数据库的操作语法,数据表,内部表,external外部表,数据导入导出load,insert

大数据: 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤其sql要学&#x…

chatgpt赋能python:关于Python中打开文件的语句详解

关于Python中打开文件的语句详解 在Python中,打开文件是一项常见的任务,可以用于读写文件和进行日志记录。本文将介绍Python中打开文件的语句,并提供一些实用技巧,以便方便地管理文件。 为什么需要打开文件? 在计算…

【动态规划】通配符匹配与正则表达式匹配

文章目录 一、通配符匹配1.1 思路分析1.2 初始化处理1.3 代码1.4 优化 二、正则表达式匹配2.1 思路分析2.2 初始化设置2.3 代码 一、通配符匹配 题目描述: 给你一个输入字符串 (s) 和一个字符模式 ,请你实现一个支持 ‘?’ 和 ‘*’ 匹配规则的通配符…

如何在Github上免费部署网站

如何在Github上免费部署静态网站 背景一、新建仓库(github账号的需要注册)二、下载仓库三、将内容上传到远程仓库里四、启动Page服务 背景 部署网站需要服务器,但是如果你只是部署静态网站就可以蹭Github上的免费服务器。因为发现现在的过程…

基于springboot+Redis的前后端分离项目(一)-【黑马点评】

🎁🎁资源文件分享 链接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwdeh11 提取码:eh11 基于session和redis实现登录 (一)前言(二)导入资源(三)短信…

Spring数据库事务处理

数据库事务的基本知识 ACID 两类丢失更新 事务回滚丢失更新: 目前大部分数据库已经通过锁的机制来避免了事务回滚丢失更新。 数据库锁的机制: 锁可以分为乐观锁和悲观锁,而悲观锁又分为:读锁(共享锁)和写锁(排它锁),…