【机器学习基础】K-Means聚类算法

🚀个人主页:为梦而生~ 关注我一起学习吧!
💡专栏:机器学习 欢迎订阅!相对完整的机器学习基础教学!
特别提醒:针对机器学习,特别开始专栏:机器学习python实战 欢迎订阅!本专栏针对机器学习基础专栏的理论知识,利用python代码进行实际展示,真正做到从基础到实战!
💡往期推荐
【机器学习基础】机器学习入门(1)
【机器学习基础】机器学习入门(2)
【机器学习基础】机器学习的基本术语
【机器学习基础】机器学习的模型评估(评估方法及性能度量原理及主要公式)
【机器学习基础】一元线性回归(适合初学者的保姆级文章)
【机器学习基础】多元线性回归(适合初学者的保姆级文章)
【机器学习基础】对数几率回归(logistic回归)
【机器学习基础】正则化
【机器学习基础】决策树(Decision Tree)
💡本期内容:前面介绍的各种模型都是有监督的模型,对于无监督,最经典的就是聚类算法,本文就来介绍一下主要的聚类方法。


文章目录

  • 1 聚类算法分析概述
  • 2 K-Means聚类算法
  • 3 K-Means参数概念及公式推导
    • 3.1 平方误差(Sum of Squared Errors)
    • 3.2 欧氏距离(euclidean metric)
    • 3.3 轮廓系数(Silhouette Coefficient)
    • 3.4 DB指数(Davies-Bouldin Index)
  • 4 K-Means聚类算法的实现
    • 4.1 算法流程
    • 4.2 算法的伪代码描述
    • 4.3 算法优缺点


1 聚类算法分析概述

近几年,随着网络的发展,越来越多的人开始习惯于在网上找信息,而网络也逐渐地走进了人们的日常生活。从人们每天都会接触到大量的数据,比如文字、音乐、图像、视频等等。随着信息的增多,人工智能应运而生。而在人工智能这个概念中,机器学习尤为重要,是实现人工智能的基础。机器学习,就是让计算机具有人一样的学习能力的技术,对当前和历史的海量数据进行挖掘、分析,并从中发现有价值的信息和规律。
在这里插入图片描述

随着大数据时代的来临,数据挖掘技术逐渐成为一种通用的业务方式,并推动了机器学习技术的快速发展。2021年,我国电商交易额为42.30万亿元,较上年同期增加了19.6%。在电商和其他行业中,要想获得更好的用户体验,就必须要对新用户进行类型的识别,这时,就可以将新用户进行聚类,将其分成多个簇,之后再以获得的结果为依据,来训练分类模型,进而判别新用户的类型。但是传统的数据挖掘技术已经不能适应海量的数据,K-Means聚类算法依赖其较简单的推导过程和实用、简单和高效的特性等广受青睐,在很多领域有巨大的贡献,例如:文档聚类、市场细分、图像分割、特征学习等。在非监督学习领域,K均值聚类是最广泛的,也是研究最多,应用最广泛的。而在聚类算法中,最常见的就是原型聚类(也称原型判别),以K均值算法为代表。


2 K-Means聚类算法

给定或随机产生m个样本的样本集。为了描述每个示例(即样本),我们给出了这样一个假设:每个示例具有d个属性来描述,这些属性反映了它与其他示例的关系,即每个示例是d维样本空间中的一个向量。

K-Means算法的基本思想是:将数据集按照距离进行划分,对于每一个样本,将它的邻域内的所有样本都分配到最近的那个类中。

首先,算法需要预先指定并且划分为k个簇,这也是与其他算法的不同点。在这里定义簇的均值向量为:
在这里插入图片描述
基于此,定义簇内样本围绕簇均值向量的紧密程度[13],即平方误差为:
在这里插入图片描述
E的值越小则簇内样本相似度越高,K-Means算法就是通过通过最小化SSE来寻找使得模型预测误差最小的模型参数。

3 K-Means参数概念及公式推导

3.1 平方误差(Sum of Squared Errors)

在聚类分析中,平方误差(Sum of Squared
Errors,SSE)是一种衡量聚类效果的指标。聚类算法将数据点分配到不同的簇中,每个数据点与它所属的簇的质心之间的距离被计算出来,然后平方,最后这些平方距离的和被称为平方误差。

具体来说,对于每个数据点xi和它所属的簇ci的质心,平方误差会计算为(xi - ci)^2。然后,所有簇的平方误差会相加,得到总的平方误差。这个值越小,说明每个数据点与它所属的簇的质心之间的距离越小,也就是聚类效果越好。

在这里插入图片描述

这个概念可以用于评估和优化聚类算法。比如在K-means算法中,初始质心的选择可能会影响聚类结果。K-means++ 算法通过让选择的质心尽可能分散来改善这个问题。另外,二分K-means算法则通过反复将一个簇划分为两个簇,直到达到用户给定的簇数目为止。在这个过程中,被划分出去的总是误差平方和最大的簇,因为这通常意味着这个簇的聚类效果最不好。

3.2 欧氏距离(euclidean metric)

也被称为欧几里得度量,是一个经常使用的在m维空间中两点之间的距离定义,或者向量的自然长度,即该点到原点的距离。在二维和三维空间中的欧氏距离就是两点之间的实际距离。

在聚类分析中,欧氏距离是常用的距离度量方式之一。它表示的是在n维空间中,两个点之间的直线距离。

具体计算公式为:

在这里插入图片描述
其中,x和y是两个n维向量,x1,x2,…,xn和y1,y2,…,yn是它们的对应维度上的值。

在应用方面,欧氏距离经常被用于衡量数据点之间的相似度,数据点之间的距离越小,说明它们越相似。例如,在客户分群中,可以使用该算法将相似行为模式的客户归类到同一簇中,以便进行个性化推荐和精准营销。在图像分析中,可以使用该算法将相似的图像归类到同一簇中,以便进行图像检索和内容识别。

  • 缺点

例如,它对数据的尺度敏感,需要对数据进行归一化处理,以避免尺度差异对聚类结果的影响。此外,它只考虑了数据点之间的距离,没有考虑到数据点之间的方向关系,因此在处理某些特殊数据集时可能会出现聚类效果不佳的情况。

3.3 轮廓系数(Silhouette Coefficient)

轮廓系数(Silhouette Coefficient)是一种用于评估聚类效果的指标,它考虑了聚类中的内聚度和分离度。

轮廓系数的计算涉及到每个数据点和其所属簇内其他数据点的距离,以及该数据点与其他簇的距离。具体而言,对于每个数据点,其轮廓系数被定义为:s = (b - a) / max(a, b),其中a是数据点与其同簇其他数据点的平均距离,b是数据点与其他簇的平均距离。

轮廓系数计算公式如下:
在这里插入图片描述

根据轮廓系数的定义,si接近1时,说明样本i聚类合理;si接近-1时,说明样本i更应该分类到另外的簇;若si近似为0,则说明样本i在两个簇的边界上。所有样本的si的均值称为聚类结果的轮廓系数,是该聚类是否合理、有效的度量

在这里插入图片描述

  • 优点

它可以用于处理不等簇大小的情况,因为它考虑了每个样本点与其他簇的平均距离。

轮廓系数的值域为[-1,1],方便理解和使用。

  • 局限性

它对异常值比较敏感,可能会受到离群点的影响。

3.4 DB指数(Davies-Bouldin Index)

DB指数(Davies-Bouldin Index)是一种用于评估聚类效果的内部指标。它考虑了每个簇内的样本点的紧密程度以及不同簇之间的分离度。

DB指数的计算方法如下:

  1. 对于每个簇Ck,计算其内部样本点之间的平均距离avg(Ck)。
  2. 对于每个簇Ck,计算其与其它簇之间的最小样本距离dmin(Ck, Cj)。
  3. 对于每个簇Ck,计算其中心点与其它簇中心点之间的距离dcen(Ck, Cj)。
  4. 计算DB指数,公式为:DBI=k1i=1∑kmaxj̸​=i​(dcen(ui,uj)avg(Ci)+avg(Cj)​)。

DB指数的值越小,说明聚类效果越好。这是因为DB指数衡量的是不同簇之间的分离度和簇内的紧密程度之间的平衡,当DB指数越小,说明聚类效果越好。

  • 缺点

DB指数对于异常值比较敏感,因为异常值可能会影响簇内样本点的平均距离的计算。

此外,DB指数也可能会受到样本规模的影响,因为样本规模的增加可能会增加计算量,从而影响聚类效果的评价。

DB指数在计算过程中需要知道真实标签信息,因此常常被用作无监督聚类算法的评价指标,在比较不同算法或不同参数设置时提供了重要的帮助。


4 K-Means聚类算法的实现

K-Means聚类算法的基本原理是,针对聚类簇划分,最小化平方误差。平方误差在一定程度上描述了簇内样本点围绕簇均值向量的紧密程度,它的值越小说明聚类效果越好。

4.1 算法流程

  • 从数据中选择K个对象作为初始聚类中心
  • 计算每个聚类对象到聚类中心的距离,将每个对象归到距离最近的聚类中心所对应的类别
  • 对于每个聚类,计算其所有数据点的均值,作为新的聚类中心
  • 如果聚类中心发生变化,返回第2步;否则算法结束。
  • 整个算法会反复迭代第2步至第4步,直到聚类中心不再发生变化或达到最大迭代次数为止。最终,算法将会得到聚类结果,将每个数据点划分到不同的聚类中心所对应的类别中。

在这里插入图片描述

4.2 算法的伪代码描述

在这里插入图片描述
K-Means聚类算法的执行效果如下图所示:
在这里插入图片描述

4.3 算法优缺点

  • 优点
    首先,此算法容易理解、方便实现,其次,K均值算法可以看作高斯混合聚类在混合成分方差相等、且每个样本仅派给一个混合成分时的特例,所以该算法在数据集近似高斯分布时,聚类效果不错。同时,该算法可以处理大规模数据集,效率高。

  • 缺点
    但是,缺点也很显然。K值和初始聚类点的选取对于聚类的效果可能产生较大的影响,其次,样本点的离散程度可能对于聚类影响有较大的差别,特别是离群点的处理问题。由于K-Means聚类算法只能使用欧氏距离进行计算,所以只能较好的适用于椭球形类簇,对于非凸形状的簇不适合。K-Means算法只能处理数值型数据,对于非数值型数据需要进行转换才能使用。最后,由于此算法的时间复杂度为 O ( n k t ) O(nkt) O(nkt),所以在大规模数据上收敛较慢甚至引起崩溃。

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

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

相关文章

linux镜像的下载,系统下载(个人使用)

文章目录 一、系统之家二、国内镜像源三、Centos官网四、安装成功截图五、镜像类型的区别参考文档 一、系统之家 系统之家官网 二、国内镜像源 下载镜像地址: 1、官网地址:https://www.centos.org/ 2、阿里镜像站:https://mirrors.aliyu…

一文读懂:testcafe框架和页面元素交互

一、互动要求 使用 TestCafe 与元素进行交互操作,元素需满足以下条件:☟ 元素在 body 页面窗口或 iframe 窗口的元素内。如果某个元素在视口之外,则 TestCafe 通过滚动可以滚动到元素可见。 元素是可见的,具有以下属性&#…

实力认证|易知微上榜中国信息通信研究院数字孪生城市产业图谱!

近期,中国通信院就数字孪生技术在城市层面的广泛应用,根据数字孪生产业框架,结合产业发展动态和企业综合实力评估,选取了核心产业、关联产业和辐射产业等各领域业务代表性较强的企业(机构),形成…

Flink(六)【DataFrame 转换算子(下)】

前言 今天学习剩下的转换算子:分区、分流、合流。 每天出来自学是一件孤独又充实的事情,希望多年以后回望自己的大学生活,不会因为自己的懒惰与懈怠而悔恨。 回答之所以起到了作用,原因是他们自己很努力。 …

FPGA系列:1、FPGA/verilog源代码保护:基于Quartus13.1平台保护verilog源码发给第三方但不泄露源码

catlog 需求具体步骤工程描述去掉相关调试文件切换顶层模块并导出相应模块为网表文件切换回原顶层模块并添加相应保护模块的qxp文件再次编译工程 参考: 需求 有时需要将源码交付给第三方,但是源码中部分模块涉及到的核心代码无法暴漏给第三方。因此&…

2023年【高处安装、维护、拆除】模拟考试题及高处安装、维护、拆除模拟考试题库

题库来源:安全生产模拟考试一点通公众号小程序 2023年【高处安装、维护、拆除】模拟考试题及高处安装、维护、拆除模拟考试题库,包含高处安装、维护、拆除模拟考试题答案和解析及高处安装、维护、拆除模拟考试题库练习。安全生产模拟考试一点通结合国家…

C语言之qsort()函数的模拟实现

C语言之qsort()函数的模拟实现 文章目录 C语言之qsort()函数的模拟实现1. 简介2. 冒泡排序3. 对冒泡排序进行改造4. 改造部分4.1 保留部分的冒泡排序4.2 比较部分4.3 交换部分 5. bubble_sort2完整代码6. 使用bubble_sort2来排序整型数组7. 使用bubble_sort2来排序结构体数组7.…

golang学习笔记——接口interfaces

文章目录 Go 语言接口例子空接口空接口的定义空接口的应用空接口作为函数的参数空接口作为map的值 类型断言接口值 类型断言例子001类型断言例子002类型断言例子003巩固练习 Go 语言接口 接口(interface)定义了一个对象的行为规范,只定义规范…

基于java web个人财务管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

stable-diffusion-webui之webui.py

主要就是webui的启动这块,需要初始化的地方,东西还是挺多的。

8年资深测试,自动化测试常见问题总结,惊险避坑...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、自动化测试简介…

2023.11.18 Hadoop之 YARN

1.简介 Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统和调度平台,可为上层应用提供统一的资源管理和调度。支持多个数据处理框架&…

《轻购优品》新零售玩法:消费积分认购+众筹新玩法

《轻购优品》新零售玩法:消费积分认购众筹新玩法 引言:2023年开年已来,政府的工作报告提出“把恢复和扩大消费摆在优先位置”,并且把2023年定位为“消费提振年”,以“全年乐享全年盛惠”为主题多地政府共同发力&#x…

Altium Designer 相同模块的布局布线复用-AD

1、利用交互式布线,将两个相同模块的元器件在PCB上分块显示。 在原理图中,框选某一模块电路、按快捷键 TS 切换到PCB编辑界面、工具>器件摆放>在矩形区域内排列(可将模块中的器件都集中放置到矩形框内)。2、为模块电路添加 …

YOLOv8改进 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数

一、本文介绍 这篇文章介绍了YOLOv8的重大改进,特别是在损失函数方面的创新。它不仅包括了多种IoU损失函数的改进和变体,如SIoU、WIoU、GIoU、DIoU、EIOU、CIoU,还融合了“Focus”思想,创造了一系列新的损失函数。这些组合形式的…

Java方法中不使用的对象应该手动赋值为NULL吗?

在java方法中,不使用的对象是否应该手动赋值为null?我们先来通过一个示例看一下。 垃圾回收示例一 public class GuoGuoTest {public static void main(String[] args) {byte[] placeholder new byte[64 * 1024 * 1024];System.gc();} } 上面代码向内…

vue3 tsx 项目中使用 Antv/G2 实现多线折线图

Antv/G2 文档 Antv/G2 双折线图 安装 antV-G2 通过 npm 安装 项目中安装 antv/g2 依赖库&#xff1a; npm install antv/g2 --save安装成功&#xff1a; 浏览器引入 可以将脚本下载到本地&#xff0c;也可以直接引入在线资源。 引入在线资源 <!-- 引入在线资源&…

java springboot在测试类中启动一个web环境

我们在开发过程中 可以对数据层 业务层做测试 那我们的表现层能做测试吗&#xff1f; 答案自然是可以的 但是 前提 我们要有一个web环境 我们现在 测试类运行 明显是个很普通的java程序 还是这个 SpringBootTest 它有一个 webEnvironment 我们可以先这样写 package com.examp…

城市生命线丨市政综合管廊监测系统的效果

市政综合管廊&#xff0c;又被称为城市生命线&#xff0c;是我们在地下建造的一个智慧而高效的空间。它把市政、电力、通讯、燃气、给排水等各种管线集于一体&#xff0c;解决了城市中反复开挖路面、架空线网密集、管线事故频发等问题&#xff0c;为城市运行提供了重要的基础设…

Windows安装Vmware 虚拟机

目录 一、Vmware 虚拟机介绍 二、Vmware 虚拟机的三种网络模式 2.1桥接模式 2.2仅主机模式 2.3NAT 网络地址转换模式 三、Vmware 虚拟机的安装 一、Vmware 虚拟机介绍 VMware Workstation Pro 是一款可以在个人电脑的操作系统上创建一个完全与主机操作系统隔离的 虚拟机&…