【机器学习基础】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.rhkb.cn/news/202091.html

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

相关文章

深度学习图像修复算法 - opencv python 机器视觉 计算机竞赛

文章目录 0 前言2 什么是图像内容填充修复3 原理分析3.1 第一步:将图像理解为一个概率分布的样本3.2 补全图像 3.3 快速生成假图像3.4 生成对抗网络(Generative Adversarial Net, GAN) 的架构3.5 使用G(z)生成伪图像 4 在Tensorflow上构建DCGANs最后 0 前言 &#…

SpringCloud - 新版淘汰 Ribbon,在 OpenFeign 中整合 LoadBalancer 负载均衡

目录 一、LoadBalancer 负载均衡 1.1、前言 1.2、LoadBalancer 负载均衡底层实现原理 二、整合 OpenFeign LoadBalancer 2.1、所需依赖 2.2、具体实现 2.3、自定义负载均衡策略 一、LoadBalancer 负载均衡 1.1、前言 在 2020 年以前的 SpringCloud 采用 Ribbon 作为负载…

【Flask使用】全知识md文档,4大部分60页第3篇:Flask模板使用和案例

本文的主要内容:flask视图&路由、虚拟环境安装、路由各种定义、状态保持、cookie、session、模板基本使用、过滤器&自定义过滤器、模板代码复用:宏、继承/包含、模板中特有变量和函数、Flask-WTF 表单、CSRF、数据库操作、ORM、Flask-SQLAlchemy…

Visual NLP:图像信息自动提取的未来

本文旨在以简单的方式解释 Visual NLP 的关键概念,让你了解 Visual NLP 的含义、它的用例是什么、如何使用它以及为什么它是构建自动提取管道的未来 。 NSDT在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在…

在线工具收集

在线工具收集 1、在线P图 https://www.photopea.com/ 一款类似于PS的在线抠图软件 ①去除图片中的文字,并填充背景色 第一步:使用矩形选中要清除的文字 第二步:点击编辑选择填充 第三步:选择内容识别,保留透明区域…

趋势解读:TikTok独创的社交语言是如何演变的

在数字时代的浪潮中,社交媒体平台成为人们传递信息、表达创意和建立社交联系的重要场所。而在这众多社交平台中,TikTok以其独特的社交语言和创新的内容形式,迅速吸引了全球数以亿计的用户。本文将深入探讨TikTok的社交语言是如何独创并演变的…

使用Python画一棵树

🎊专栏【不单调的代码】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 🥰欢迎并且感谢大家指出我的问题 文章目录 🌹Turtle模块🎄效果🌺代码🛸代码…

IvorySQL3.0:基于PG16.0最新内核,实现兼容Oracle数据库再升级

Oracle作为全球最大的数据库厂商之一,具有较高的市场知名度和份额。但随着数据处理需求日益增长,使用Oracle的企业可能面临一些挑战,如数据库复杂性、高昂维护成本、数据迁移和集成问题等,难以满足企业实时数据处理需求&#xff0…

练习八-利用有限状态机进行时序逻辑的设计

利用有限状态机进行时序逻辑的设计 1,任务目的:2,RTL代码,及原理框图3,测试代码,输出波形 1,任务目的: (1)掌握利用有限状态机实现一般时序逻辑分析的方法&am…

第二十章 多线程

20.2创建线程 20.2.1继承Thread类 Thread类是Java.lang包中的一个类,从这个类中实例化的对象代表线程,程序员启动一个新线程需要建议Thread实例。 public class ThreadTest extedns Thread{} run方法格式: public void run(){} 20.1让线…

matplotlib

设置中文字体,图片大小,分辨率,中文负号 符号 x轴和y轴 设置x轴和y轴的刻度 字体大小 线条样式 绘制多个线条 图例 显示每个坐标值 gca 分辨率 画布尺寸 创建图形对象 不能直接使用区域对象作画 绘制多子图 均等的划分画布 柱状图 同一位置多…

Ocam——自由录屏工具~

当我们想要做一些混剪、恶搞类型的视频时,往往需要源影视作品中的诸多素材,虽然可以通过裁减mp4文件的方式来获取片段,但在高画质的条件下,mp4文件本身通常会非常大,长此以往,会给剪辑工作带来诸多不便&…

GDB Debugging Notes

1 Debugging programs using gdb 1.1 gdb简介 gdb是一个功能强大的调试工具,可以用来调试C程序或C程序。在使用这个工具进行程序调试时,主要涉及下面几个方面的操作: 启动程序:在启动程序时,可以设置程序运行环境。设置断点:程序…

使用kafka_exporter监控Kafka

prometheus 监控 kafka 常见的有两种开源方案,一种是传统的部署 exporter 的方式,一种是通过 jmx 配置监控, 项目地址: kafka_exporter:https://github.com/danielqsj/kafka_exporterjmx_exporter:https://github.com/prometheus/jmx_exporter本文将采用kafka_exporter方…

matlab使用scatter函数画图时报错“数组索引必须为正整数或逻辑值”解决办法

一、背景 在使用matlab的scatter函数画图时报错“数组索引必须为正整数或逻辑值”。 scatter函数说明:scatter(x,y) 在向量 x 和 y 指定的位置创建一个包含圆形标记的散点图。 二、解决办法 如果使用scatter函数时报上述错误,尝试将连续函数先转换为函…

ubuntu编译sqlite3并使用

SQLite3是一种轻量级的关系型数据库管理系统,它是在C语言基础上实现的。SQLite3具有许多优点,例如: 1.灵活:它可以在多种操作系统上运行,并且可以将多个数据库文件合并成一个文件。 2.易于使用:SQLite3使用…

Centos上安装Docker和DockerCompose

安装Docker Docker可以运行在MAC,Windows,CtenOS,UBUNTU等操作系统上。目前主流的版本有Docker CE和Docker EE,CE是免费的开源Docker版本,适用于开发人员和小型团队,EE是适用于企业的容器化解决方案。它基于Docker CE…

如何判断交流回馈老化测试负载是否合格?

交流回馈老化测试负载是用于模拟实际工作环境中设备运行状态的测试工具,主要用于检测设备的耐久性和稳定性。 负载性能:需要检查负载的性能是否符合设计要求,这包括负载的功率、电流、电压等参数是否在规定的范围内,以及负载的工作…

可编程交流回馈式负载箱在电源设备中的应用

可编程交流回馈式负载箱可以用于测试电源设备的输出能力,通过在负载箱中设置不同的负载条件,可以模拟不同的工作负载情况,从而测试电源设备在不同负载下的输出能力和稳定性。这对于电源设备的设计和生产非常重要,可以帮助制造商评…

打造高效医患沟通:陪诊小程序开发技术指南

随着科技的不断发展,陪诊小程序作为医患沟通的新工具逐渐成为关注焦点。本文将带领你通过使用React和Node.js技术栈,构建一个功能强大且用户友好的陪诊小程序,实现医患互动的便捷和高效。 1. 准备工作 确保你的开发环境中已安装了Node.js和…