Partitioning Methods|学习笔记(一)

简介: 快速学习 Partitioning Methods

开发者学堂课程【高校精品课北京理工大学数据仓库与数据挖掘(下)Partitioning Methods】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/1041/detail/15649


Partitioning Methods

 

内容介绍:

一、基于划分的聚类方法

二、K-Means 聚类算法

三、 K值的确定

四、中心点初始化

五、K-Medoids 算法

六、K-Medians 聚类算法

七、K-Means 聚类算法问题

八、K-Means 算法小结

 

本课程进行数据仓库与数据挖掘的学习。介绍基于划分的方法。在进行划分的聚类方法中,介绍划分方法的基本概念,K-Means 聚类算法,对 K-Means 聚类算法的初始化,K 中心点聚类算法,K中位数和 K 众数聚类算法。

 

一、基于划分的聚类方法

1.基本概念

那什么是基于划分的聚类方法呢?基于划分的聚类方法,首先会设定一个特定的目标函数。通过优化目标函数,不断地去提升划分的质量,最终得到最终的蔟。来看一下基于划分方法中的目标函数,那么目标函数称之为sse,也就是误差的平方和。

2. 公式

其中,在计算公式中,k代表的是需要划分的数目,也就是蔟的数目。被Ck代表的是每一个蔟的原型,蔟的原型可以是这个蔟的中心点,也可以是它的所有数据对象的平均值。Xi指的是属于这个蔟CK的数据对象。也就是SSE它的含义就指的是累计计算同一个蔟中每一个数据对象到这个蔟的圆形的距离。

image.png

因为对于蔟来说,是希望蔟中的数据对象是相似的,也就是希望蔟是比较紧凑的,因此对于这样的一个目标函数 sse希望它越小越好。

3.优化 sse 途径

对于sse的优化有两种途径,第一种,就是全局优化,可以列出k个划分的所有的可能性,然后依次计算每一个划分的ss e值,从中选择一个最小sse值最小的的划分。但是这样的一种方法实施起来是非常困难的,因为不可能列出k个划分的所有可能。

因此,对于划分的聚类算法来说,往往会采用一种局部最优的策略,采用这样的一种启发式的算法,那么逐步的去逼近最优值,像 K-Means 算法,k 中心点算法,K 中位数算法等算法,都是基于启发式的聚类算法。

image.png

 

二、K-Means 聚类算法

首先介绍 K-Means 聚类算法。K-Means 聚类算法的一个核心是它的每一个蔟的原型是用这个蔟中所有数据对象的平均值来代表。

1.算法过程

来看一下,K-Means 聚类算法的过程。对于 K-Means 聚类算法,首先需要设定一个参数k,也就是需要设定要将数据对象划分为多少个蔟。

在确定K值之后,首先从数据对象结合中随机的选择K个点作为初始的蔟中心。在得到K歌初始的蔟中心之后,依次重复以下两个步骤。将每个数据对象分配到离它最近的蔟中心所在的蔟中,从而形成k个蔟。

在形成K个蔟之后,根据每一个蔟中的数据对象去更新这个蔟的中心。那么,对于K-Means算法中的蔟来说,也就是进行形成蔟的这一步骤中,其实相当于是在给定K个蔟中心的情况下,是去优化sse,那么这一步,比如重新去计算蔟的中心的时候,它的含义是在给定蔟的前提下去,通过优化蔟中心来最小化sse的值。通过重复这两步一直到满足收敛条件为止,那么整个K-Means算法就结束了。

收敛条件,一般采用的是数据集合中的所有数据对象的蔟标签变化不太大,或者是基本上没有变化的时候。那么K-Means 算法的迭代宗旨。

在 K-Means 算法中,有一个重要的步骤,就是将数据对象要把它分配到离它最近的这样的一个蔟中心所代表的蔟中去,在这样的一个过程中,就需要使用到相似性的度量方法。在K-Means算法中,有很多种相似性,度量方法可以使用,比如说,可以使用马式距离,也就是L1 norm,也可以使用L2 norm,就是欧式距离,甚至还可以使用余弦相似性。

image.png

2. K-Means 算法过程图

来看一下,K-Means算法的过程。那么下图展示了一个K-Means算法的运行过程,首先第一幅图展示的是数据分布,也就是这个数据,它是一个二维数据,可以在二维平面上去展示它。根据K-Means算法,首先随机的选择了两个点,作为它的初始聚类中心,也就是首先设置k=2,然后从数据集合中随机的选择两个数据对象作为这两个蔟的中心。

在确定了两个初始聚类中心之后,将剩余的数据对象根据相似性度量分配到离它最近的这样的一个蔟中心所代表的蔟中去。那么在得到了两个蔟之后,会根据这两个蔟的分布,然后去更新它的蔟中心。迭代以上步骤,那一直到最后,这个数据对象的蔟标签不再发生变化为止,就得到了两个蔟。

image.png

3. K-Means 聚类算法缺点

对于 K-Means 聚类算法来说,它有一个缺陷,就是它对于k个初始中心点的选择是非常敏感的,如果k个初始中心点选择不好,那么会得到比较差的聚类质量,比如像下图这样的一个展示,

image.png

那么更新了两个初始聚类中心,也就是另外选择的两个初始聚类中心,那么依然也是经过K-Means算法的过程,可以看到最后得到的聚类结果是这样的,它跟初始的数据分布所观察得到的这样的一个蔟分布差异性是很大的,也就是说,这样的聚类结果,它的质量是比较差的,

4. K-Means 算法问题

(1)、效率快

K-Means聚类算法中的一些问题进行讨论,首先,对于 K-Means 聚类算法来说,它的效率是比较快的,它的法复杂度是O的(tKn),t指的是迭代的次数,k指的是要划分的蔟的数目,n指的是数据对象的数目。在实际应用中,t是远远小于n的,其实在K-Means聚类算法中,迭代次数是比较少的,一般铁代比较小的次数之后,就能够得到一个稳定的聚类结果,所以说K-Means聚类算法的一个特点是它的效率比较快。

(2)、局部最优结果

除了效率比较快,K-Means算法的一个特点是得到的聚类结果往往是局部优化的结果,那么,在之前介绍K-Means算法的时候,也讲到过它的sse的优化是针对特定的蔟,或针对特定蔟中心来进行优化的,所以说它的结果可能是一个局部最优的结果。

(3)、设定 k 值

其次,对于局部最优的结果算法k的值,是需要去设定的,如果这个k的值设定的不是很合理,那么得到的聚类质量也会比较差,在后面会介绍如何去确定k的数目。

(4)、对异常点敏感

此外,K-Means 聚类算法,它对异常点是很敏感的,因为知道 K-Means 聚类算法,它在构建蔟的时候是依赖距离去计算的,而且它的蔟中心是所有数据对象的平均值,那么因为均值是受益异常点影响非常强烈的,所以说对于肯定是聚类算法来说,它对于噪声和异常点很敏感。

(5)、离散型均值难以计算

其次,K-Means 聚类算法,它主要适用于去发现一些球形的蔟,也就是凸形的蔟,因为它是基于距离去分配,那么所以比如说像对于下图展示的这种非凸形的蔟,以及互相缠绕的这些蔟的聚类效果是较差的,而且因为在 K-Means算法中,它需要通过平均值去更新蔟的中心,所以说,当数据类型如果是离散类型的,那么这个均值就不太好计算,

 

三、K 值的确定

介绍一下,在 K-Means 算法中如何去确定k的数目。对k值的确定主要是通过绘制肘线图来发现。那在 K-Means 算法中,优化目标是ss e。随着k的数目的增大,这个sS e的值是会逐渐的减小,最极端的情况是,每一个数据对象为一个蔟,这个时候的sse最小。

通过这样的一个特点,可以绘制这样的一幅图,它的横坐标代表的是蔟的数目,那么从零一直到八进行增长,那么它的纵轴代表的是see的数目,那么把每一个k值的sse绘制出来,就可以得到一个下面这样的曲线图。

image.png

那也就是这个曲线展示的含义是,随着k值的增加,see 在不断的下降,但是下降的幅度不一样,比如刚开始随着k值的增加,sse下降的非常快,那么当在某一个点之后,这个下降率就会突变,就变得非常非常缓慢,那么形成的这样的一个曲线非常类似于人的肘关节的这样的一个曲线,所以把它称之为叫做肘线图,那么可以选取一个下降率突变点4作为k值。

 

四、中心点初始化

再来介绍一下,在 K-Means 算法中,如何对 K 个初始中心点进行初始化?这里主要介绍一下,K-Means 算法的思想。那么,因为初始中心点的选择对聚类质量的影响比较大,那么就必须要去选择尽可能合适的初始中心点。

那么K-Means算法的思想是,首先在数据对象中谁接的去选择一个数据对象作为第一个初始中心点。在下一次选择中心点的时候,可以根据数据对象的加权概率分数去选择一个离之前所有初始中心点最远的一个点,作为下一步的初始中心点,那么,迭代以上步骤一直的选出k个初始中心点。

 

五、K-Medoids 算法

对于 K-Means 算法来说,它对异常值是很敏感的,为了克服K-Means算法对异常点敏感的问题,提出了k中心点算法。对于k中心点算法来说,它和K-Means算法的过程比较类似,但是它使用了一个最具有代表性的数据对象去取代原型。

在K-Means算法中使用的是所有数据对象的平均值来作为蔟的原型。而在k中心点算法中,使用的是这个蔟中最能够代表这个蔟的数据对象,作为蔟的原型。

那么,最具有代表性的这个数据点,往往是离蔟中心最近的这样的一个数据对象。那么下图是k中心点的计算过程,那么它和肯定式算法是一样的。

那么,在k中心点算法中和 K-Means 算法有一个不同的点在哪里?就是在更新蔟中心的时候可以面试,K-Means 是重新计算这个蔟中所有数据对象的均值,但是对于k中心点来说,就需要去替换蔟中心,那么这个替换的时候呢?是需要从非代表性的数据对象中选择一个,去替代原始的数据对象,那么替代之后会计算一个 cost 就是一个代价。

这个代价就指的是更新后的ss e和更新前的ss e之间的差距。如果s小于零,就表示更新的这样的一个蔟的聚类中心,能够去缩小的 see,那么就可以替换。

那么重复以上步骤,那么一直也是到蔟标签不再发生变化的时候,聚类结果就完成了。

通过一个图解释。第一幅图展示的是数据对象的分布,从数据对象的分布可以看出,大概是由两个蔟,那首先随机的选择,两个数据对象作为这两个数的初始的初始蔟中心,然后将数据对象配到离它最近的这个蔟中心所代表的蔟中去。

在得到了这样的两个蔟之后,考虑用这个蔟中的一个数据对象去替代它的原始的蔟中心,那么就需要计算它的 cost,计算 cost 之后,发现这个 cost 是小于零的,也就是如果使用这个点取代原始的蔟中心是能够减少 sse 的,所以就更新这个的中心,为这样的一个点,那么重复以上过程,一直到数据对象的标签不再发生变化为止,就得到了最终的聚类结果。

image.png

那么这个就是 k 中心点的聚类过程算法,那么就是需要跟 K-Means 算法很类似,唯一不同的就是不是再重新计算出的中心,而是需要去替换,然后计算它的代价来确定蔟中心。

相关文章
|
存储 关系型数据库 数据库
聊多版本并发控制(MVCC)
MVCC是数据库并发控制技术,用于减少读写冲突。它维护数据的多个版本,使事务能读旧数据而写新数据,无需锁定记录。当前读获取最新版本,加锁防止修改;快照读不加锁,根据读取时的读视图(readview)决定读哪个版本。InnoDB通过隐藏字段(DB_TRX_ID, DB_ROLL_PTR)和undo log存储版本,readview记录活跃事务ID。读已提交每次读取都创建新视图,可重复读则在整个事务中复用一个视图,确保一致性。MVCC通过undo log版本链和readview规则决定事务可见性,实现了非阻塞并发读。
1024 5
聊多版本并发控制(MVCC)
|
机器学习/深度学习 算法 决策智能
选址问题-精确重心法和遗传算法
选址问题-精确重心法和遗传算法
2390 0
|
机器学习/深度学习 算法 计算机视觉
基于深度学习的停车位关键点检测系统(代码+原理)
基于深度学习的停车位关键点检测系统(代码+原理)
快速生成软著申请时所需的60页代码文档的免费工具
本篇文章主要讲解,制作软著代码文档的高效方法,当然不可能手动一个个复制了,这显然太笨拙,他浪费时间了。这里我给大家介绍一个更快的方式。
9143 0
|
存储 安全 大数据
OceanBase 的安全性与合规性
【8月更文第31天】随着大数据时代的到来,数据已经成为企业的核心资产。为了保护这些宝贵的资源,不仅需要强大的技术手段来保证数据的安全,还需要满足各种法律法规的要求。OceanBase 作为一款高性能的分布式关系数据库系统,在设计之初就充分考虑了数据的安全性和合规性需求。本文将深入探讨 OceanBase 如何确保数据的安全,并介绍其符合各种法规要求的方法。
680 1
|
机器学习/深度学习 计算机视觉 知识图谱
【YOLOv8改进】MobileViT 更换主干网络: 轻量级、通用且适合移动设备的视觉变压器 (论文笔记+引入代码)
MobileViT是针对移动设备的轻量级视觉Transformer网络,结合CNN的局部特征、Transformer的全局注意力和ViT的表示学习。在ImageNet-1k上,它以600万参数实现78.4%的top-1准确率,超越MobileNetv3和DeiT。MobileViT不仅适用于图像分类,还在目标检测等任务中表现出色,且优化简单,代码已开源。YOLOv8引入了MobileViT块,整合卷积和Transformer结构,提升模型性能。更多详情可参考相关专栏和链接。
|
安全 编译器 Linux
深入解析与防范:基于缓冲区溢出的FTP服务器攻击及调用计算器示例
本文深入解析了利用缓冲区溢出漏洞对FTP服务器进行远程攻击的技术,通过分析FreeFlow FTP 1.75版本的漏洞,展示了如何通过构造过长的用户名触发缓冲区溢出并调用计算器(`calc.exe`)。文章详细介绍了攻击原理、关键代码组件及其实现步骤,并提出了有效的防范措施,如输入验证、编译器保护和安全编程语言的选择,以保障系统的安全性。环境搭建基于Windows XP SP3和Kali Linux,使用Metasploit Framework进行攻击演示。请注意,此内容仅用于教育和研究目的。
408 4
|
机器学习/深度学习 人工智能 算法
探索机器学习中的模型融合技术
在机器学习领域,模型融合技术已成为提升预测准确性和增强模型泛化能力的关键手段。本文将深入探讨模型融合的理论基础、实现策略以及实际应用案例,旨在为读者提供一套系统的理解和实践指导。通过分析不同类型的融合方法,包括简易模型平均、加权平均、Stacking、Bagging和Boosting等,文章揭示了模型融合如何有效整合多个模型的信息,减少过拟合风险,以及提高对未知数据的适应能力。
|
SQL 存储 缓存
MySQL进阶突击系列(02)一条更新SQL执行过程 | 讲透undoLog、redoLog、binLog日志三宝
本文详细介绍了MySQL中update SQL执行过程涉及的undoLog、redoLog和binLog三种日志的作用及其工作原理,包括它们如何确保数据的一致性和完整性,以及在事务提交过程中各自的角色。同时,文章还探讨了这些日志在故障恢复中的重要性,强调了合理配置相关参数对于提高系统稳定性的必要性。
|
负载均衡 算法 Go
Golang深入浅出之-Go语言中的服务注册与发现机制
【5月更文挑战第4天】本文探讨了Go语言中服务注册与发现的关键原理和实践,包括服务注册、心跳机制、一致性问题和负载均衡策略。示例代码演示了使用Consul进行服务注册和客户端发现服务的实现。在实际应用中,需要解决心跳失效、注册信息一致性和服务负载均衡等问题,以确保微服务架构的稳定性和效率。
444 3