热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

K-均值聚类算法:原理与应用详解

K-均值聚类算法是一种经典的划分方法,广泛应用于数据挖掘和机器学习领域。该算法通过将数据集划分为多个互斥的簇,确保每个对象仅归属于一个簇。然而,这种严格的归属要求忽略了潜在的离群点和数据的复杂性,限制了其在某些场景下的适用性。为了提高算法的鲁棒性和灵活性,研究者们提出了多种改进方法,如引入模糊隶属度和基于密度的聚类技术。这些改进不仅提升了算法的性能,还扩展了其在实际问题中的应用范围。

划分方法

聚类分析最简单、最基本的版本是划分,它把对象组织成多个互斥的簇。这一方法,要求每个对象必须/恰好属于每一个簇。(事实上,我们应该知道,这个要求是很不合理的,因为它忽略了离群点,假若把噪声数据强行划分在簇里,那势必会降低聚类的准确率,所以为了改进这一点,在模糊划分中适当放宽了这一要求。
大部分的划分算法都是基于距离的。(这个应该也很好理解吧,我们在前面应该提到过不止一次,这里说的距离实际上是用来度量相似性的)。他们的操作步骤通常是这样的:
1、首先给定要构建的分区数K,然后直接创建一个初始划分;
2、然后,使用一种称之为迭代的重定位技术来不断的调整,改进划分。(它的改进准则是:同一个簇中的对象要尽可能接近,不同簇中的对象要尽可能的远离)

从上面我们可以看到,这种传统的操作方法,为了达到全局最优,算法很有可能要穷举所有可能的划分,这显示不是不可接受的。因此实际上,目前的划分算法一般都采用启发式的方法,即渐进的提高聚类质量,以逼近局部最优解。

下面,我们就来讲解目前流行的划分算法:K-均值算法和K-中心点算法。这类算法非常适合发现中小规模的数据库中的球状簇(实际上是近似于球)

K-均值算法:一种基于形心的技术

假设数据集D中包含n个欧式空间中的对象,划分方法就是把D中的对象分配到k个簇中,其中各个簇之间互斥。然后通过目标函数来评估划分簇的质量,然后不断调整。
其实我们可以看到,这里叙述的划分方法和上面的传统方法基本一样。但是还没有完!!!
我们知道,划分方法一般聚类的都是球状簇。那么既然是球,就自然有球心。因此,这里说的基于形心的/形心实质上就可以理解为球心。
我们一般用簇Ci形心来代表该簇。从概念上来讲,簇的形心就是它的中心点。而这个中心点可以用多种方法定义(为什么呢?因为,这个球状只是我们看起来是球的形状而已,他并不是几何意义上的球,所以,要找出这个“球”的中心,自然不像几何那么严谨),例如可以取该簇中所有对象的均值或中心点
上面我们提到了目标函数,它的值被称为簇内变差。它的作用就是用来评估簇划分的质量的,即一个簇的划分质量可以用簇内变差度量。我们的目的就是要让簇内高相似性和簇间低相似性。


这里写图片描述

这里p是空间中的点,Ci表示簇的形心。实际上,簇内变差就是求簇内每个对象到簇中心点(K-均值算法的话均值就是中心点)的距离平方,然后求和

总的来说,我们要提高聚类质量,那么就要不断的去优化簇内变差。但是传统划分算法开销巨大,所以这里我们引出了k-均值算法。
这个算法就是把簇的形心定义为簇内点的均值。它的处理流程如下
1、在数据集中,随机地选择k个对象,每个对象代表一个簇的初始均值(中心);
2、对剩下的每个对象,分别计算其与各个簇中心的欧式距离(事实上就是计算相似性),将它分配到最相似的簇;
3、更新簇中心。对于每个簇来说,就是根据簇中的当前对象,来重新计算每个簇的均值,然后把该均值作为新的簇的中心。
4、然后重复第2,3步直至分配稳定。

K-均值算法的特点是:不能保证该算法收敛域全局最优解,并且它常常终止于一个局部最优解。结果可能依赖于初始簇中心的随机选择,所以为了尽可能的得到好的结果,我们通常会选择不同的初始簇中心,来多疑运行K-均值算法。

k-均值算法的优缺点
优点:
1、对于处理大数据集,该算法是相对可伸缩的和有效的;
缺点:
1、仅当簇的均值有定义时才能使用K-均值定义。例如,处理标称数据就不能使用K-均值算法。因为它无法计算簇内均值呀(映射???我想应该不可以吧=。=),所以针对这种情况,可以使用k-众数算法来处理标称数据
2、对噪声和离群点敏感。上面已经提到了,因为它的划分是互斥的,所以必然会出现这种情况。所以针对这种情况,出现了模糊划分技术。上面已经提到过。
3、必须用户自己指定要生成的簇数K。然而要求用户自己指定参数一般都是不靠谱的,所以这里给出了一种解决方法,那就是提供一个k的取值范围然后去试,然后取一个相对较好的。实际上,我们也能想象到这种方法其实也不好。

如何提高K-均值算法的性能
因为这个算法实在太简单了,所以它的性能能够提升的方面也就是伸缩性了。
在面对大数据集时,通过使用这三种方法来提高K-均值的伸缩性
1、使用样本;
2、过滤方法(使用空间层次索引以降低计算均值时的开销);
3、微聚类方案。

我们接下来稍稍引申一下

K-中心点:一种基于代表对象的技术
K-中心点算法是针对K-均值算法对离群点和噪声敏感的缺点提出的一种改进算法。
类比于K-均值算法,K-中心点聚类算法的变动主要有两点
1、中心点不是均值,而是用一个实际的对象(称作“代表对象”)来表示中心点;
2、目标函数不是距离的平方和了而是绝对距离和了。


这里写图片描述
其中,Oi是代表对象。
关于这个公式需要好好理解下, 它的值表示的是数据集中所有对象P与Ci的代表对象Oi的绝对误差之和。
同样的,K-中心点方法通过最小化该绝对误差,来实现对划分的优化。

下面我们是否要更新代表对象,就靠这个目标函数的值来决定了。

PAM算法是K-中心点聚类的一种流行的实现。它的主要流程如下
1、随机选择K个对象,每个对象代表一个簇的中心点;
2、对剩下的每个对象,分别计算其与各个簇中心(代表对象)的欧式距离,将它分配到最相似的簇;
3、更新代表对象了。这一步稍微有点复杂,我拆开来说。
3.1:为了决定一个非代表对象是否是当前的一个代表对象更好的替代,我们需要来计算一下。
3.2:首先计算所有点(除开该候选对象)到当前代表对象集合的绝对误差之和(实际上就是计算公式10.2)
3.3:然后计算所有点(除开待替换对象)到当前代表对象集合(该集合目前是少了待替换对象,多了该候选对象)的绝对误差之和(公式10.2)
3.4:接着,比较这两次计算的值,如果3.3的值比3.2的值小,那么说明如果我们使用该候选点替换该中心点之后,聚类的效果会更好。所以我们进行中心点的替换(代表对象)。
4、重复第2,3步直至聚类稳定。

从算法我们可以看出,使用了新的目标函数之后,K-中心点算法(具体来说是PAM算法)相对与K-均值算法来说,它对于离群点和噪声数据不那么敏感了。但同时,我们也能看到,该算法的计算量是相当巨大的。
所以,一般来说,PAM算法一般都应用与小型的数据集上。


推荐阅读
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 本文详细介绍了数据库并发控制的基本概念、重要性和具体实现方法。并发控制是确保多个事务在同时操作数据库时保持数据一致性的关键机制。文章涵盖了锁机制、多版本并发控制(MVCC)、乐观并发控制和悲观并发控制等内容。 ... [详细]
  • Python与R语言在功能和应用场景上各有优势。尽管R语言在统计分析和数据可视化方面具有更强的专业性,但Python作为一种通用编程语言,适用于更广泛的领域,包括Web开发、自动化脚本和机器学习等。对于初学者而言,Python的学习曲线更为平缓,上手更加容易。此外,Python拥有庞大的社区支持和丰富的第三方库,使其在实际应用中更具灵活性和扩展性。 ... [详细]
  • 探讨 jBPM 数据库表结构设计的精要与实践
    探讨 jBPM 数据库表结构设计的精要与实践 ... [详细]
  • AI TIME联合2021世界人工智能大会,共探图神经网络与认知智能前沿话题
    AI TIME携手2021世界人工智能大会,共同探讨图神经网络与认知智能的最新进展。自2018年在上海首次举办以来,WAIC已成为全球AI领域的年度盛会,吸引了众多专家学者和行业领袖参与。本次大会将聚焦图神经网络在复杂系统建模、知识图谱构建及认知智能应用等方面的技术突破和未来趋势。 ... [详细]
  • 吴裕雄数据挖掘实战案例(13):GBDT模型的深入应用与解析
    #导入第三方包importpandasaspdimportmatplotlib.pyplotasplt#读入数据defaultpd.read_excel(r&# ... [详细]
  • 数据分析的4个目的3个意义,新手小白一定要看!-​如今,很多公司在招聘的时候都不约而同地对应聘者加上了一条“具备数据分析能力”的要求,这也从侧面反映了现在很多公司对数据分析非常重视 ... [详细]
  • 本文讨论了在进行 MySQL 数据迁移过程中遇到的所有 .frm 文件报错的问题,并提供了详细的解决方案和建议。 ... [详细]
  • Spark中使用map或flatMap将DataSet[A]转换为DataSet[B]时Schema变为Binary的问题及解决方案
    本文探讨了在使用Spark的map或flatMap算子将一个数据集转换为另一个数据集时,遇到的Schema变为Binary的问题,并提供了详细的解决方案。 ... [详细]
  • 本文将详细介绍如何在Mac上安装Jupyter Notebook,并提供一些常见的问题解决方法。通过这些步骤,您将能够顺利地在Mac上运行Jupyter Notebook。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 通过使用Sqoop导入工具,可以精确控制并高效地将表数据的特定子集导入到HDFS中。具体而言,可以通过在导入命令中添加WHERE子句来指定所需的数据范围,从而在数据库服务器上执行相应的SQL查询,并将查询结果高效地存储到HDFS中。这种方法不仅提高了数据导入的灵活性,还确保了数据的准确性和完整性。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 在现代办公环境中,高效的办公软件是提升工作效能的关键。本文将推荐几款实用且专业的办公软件,帮助用户提高工作效率。首先,微软Office套件中的Word、Excel和PowerPoint依然是最常用的工具,它们凭借强大的功能和易用性,成为众多用户的首选。此外,本文还将介绍其他一些创新的办公软件,如Google Workspace和Notion,这些工具在协作和项目管理方面表现出色,值得尝试。 ... [详细]
  • 第五章5.4安全设备防火墙防火墙是网络关联的重要设备,用于控制网络之间的语言。外部网络用户的访问必须先经过安全策略过滤,而内部网络用户对外部网络的访 ... [详细]
author-avatar
水妖精Fairy
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有