数据挖掘(聚类分析)
数据挖掘对聚类算法的要求:可伸缩性(在小数据集上算法优,同样要求在大数据集上算法优)、处理不同类型数据的能力、发现任意形状簇的能力、输入参数的领域知识最小化、处理噪声数据的能力、对输入数据顺序的敏感、可解释性和可用性、基于约束的聚类、处理高维数据的能力。
聚类方法的分类:
基于划分的方法:构建数据集的k个划分,每个划分表示一个聚类(每个划分至少包含一个对象、每个对象只属于一个划分(可相应变动))。基于划分的方法为了达到全局的最优,可能要穷举所有的可能化分,这种算法时间复杂度太大。因此采用两种比较流行的启发式算法kmeans(每个簇用该簇中的平均值代替)kmedoids(每个簇用最接近中心的一个对象来表示)这些算法在小规模数据的应用上达到了一个很好的效果
层次方法:将数据对象组成一棵聚类树(凝聚层次和分裂层次)凝聚层次聚类和分裂层次聚类一个是自底向上合并相近的对象或者组,直到所有的组合合并为1个或者达到一个终止条件。分裂层次聚类就是一个相反的过程。层次聚类算法的缺陷在于:一旦一个步骤执行完毕,就不可以被撤销。话外之意就是不能改正错误的决定。目前对于层次聚类算法提出了些改进的算法。层次聚类代表算法:BIRCH、CURE、ROCK算法
基于密度的算法:绝大部分划分的方法都是基于对象之间的距离大小进行划分。这些方法能够发现球状的簇,而在检测任意形状的簇上遇到了困难。就出现了基于密度的算法。主要思想:只要邻近区域的密度超过某个阀值就继续聚类,DBSCAN是一种具有代表性的基于密度的聚类算法
基于图的聚类算法:基于图的聚类算法,利用了图的许多重要的性质和特性。代表算法chameleon和SNN
基于模型的方法:试图将给定数据与某个数学模型达成最佳的拟合。代表算法EM算法
基于划分的聚类算法:
基本k-means聚类算法:
算法流程:首先选择k个对象,每个对象代表一个簇的初始均值或者中心;对剩余的每一个对象,根据其与各个簇中心的距离,将它指派到最近的簇,然后计算每个簇的新的均值,得到更新后的簇的中心;不断的重复,知道准则函数收敛。(准则函数一般采用平方误差)
算法k-means
输入:数据集D,划分簇的个数K
输出:k个簇的集合
*从数据集D中任意选择k个对象作为初始簇的中心
*repeat
for 数据集D中每个对象P do
计算对象P到K个簇中心的距离,将P指派到与其距离最近的簇
end for
计算每个簇中的对象的均值,更新簇的中心
until 簇的中心不再发生变化
k-means算法通常采用误差平方和作为衡量聚类质量的目标函数
k-means的优点:描述容易、实现简单、快速
k-means的缺点:算法中的k需要预先给定、算法对初始值的依赖很大(选择不同的k值,会产生不同的结果)、当数据集很大的时候,算法的开销很大、算法对噪声点和离群点十分敏感,k-means算法只能发现球形的簇,算法只能用来处理数值型属性
二分k-means算法:
思想:为了得到k个簇,将所有点的集合分裂成两个簇,从中选择一个继续分裂,如此重复直到产生k个簇为止
算法:二分k-means
输入:数据集D、划分簇的个数k,每一次二分实验的次数m
*初始化簇表,最初的簇表只包含一个包含所有样本组成的簇
repeat
按照某种方法从中选择一个簇
进行m次二分实验
使用基本的k-means对其进行聚类,划分成为两个子簇
从这m次二分实验中选择两个SSE总和最小的簇,将这两个簇加入到簇表中
until 簇表中包含K个簇为止
k-means算法的扩展:
k-means中距离的计算时基于数值型的数据,没有明确分类型的数据进行如何的操作。在k-means算法中对分类属性的处理一般有3种:将分类型的属性转化为数值型的属性。例如变量x有类别a,b,c,那么就采用三个数值共同表示,当x为a类别表示为100。采用适用于纯分类型变量的k-modes或者适用于混合属性的k-prototypes算法。其中k-modes采用众数来代替基本k-means中的均值。两者结合在一起就形成了k-prototypes算法。第三种是采用k-summary算法
k-medoids算法:
思想:不和基本k-means算法类似采用均值当中簇的中心,它采用距离中心最近的一个对象作为簇的中心
算法的基本过程:首先为每个簇随机选择一个代表对象,其余数据对象根据与代表对象的距离大小划分到最近的一个簇中,然后反复的用非代表对象代替代表对象,以改进聚类的质量。聚类的质量用一个代价函数来估算,如果替换后的平方误差减去替换前的平方误差,为负值的时候则进行替换,否则就不进行替换
算法:k-medoids
输入:数据集D,划分簇的个数k
输出:k的任意的集合
选择k个不同的对象作为初始质心
repeat
把剩余对象按照距离划分到最近的簇中
计算选择一个非中心对象s代替一个中心对象的代价s,如果s<0则进行替换,形成新的k个中心
until k个中心不再发生变化
层次聚类算法:凝聚层次和分裂层次(思想比较简单)
改进的层次聚类算法:BIRCH算法(层次聚类算法和其他聚类算法的结合,层次聚类算法用于初始微聚类,其他方法用于后续的宏聚类)克服了凝聚聚类算法的不可伸缩和不可撤销的缺点。另外BIRCH算法采用CF和CF-Tree来节省I\O和内存开销、其核心是聚类特征CF和聚类特征树
一个聚类特征CF为一个三元组(N,LS,SS)N为结点的个数,LS为结点的线性和,SS为数据的平方和。CF满足可加性
CF-tree是一个高度平衡树,具有两个参数分支因子和阀值T(分支因子包含非叶子结点的最大条目数和叶子结点的最大条目数)树的结构类似与B+树
CF-tree的构造过程:
从根结点开始递归往下,计算当前条目与要插入的数据点的距离,寻找最小距离的那个路径,直到找到与该结点最接近的叶子结点
比较计算出的距离是否小于阀值T,如果小于则直接吸收,否则执行下面步骤
判断当前条目所在的叶子结点个数是否小于L,如果是,则插入,否则分裂该叶子结点。
BIRCH算法分为四个阶段:扫描数据集,根据给定的初始阀值T建立一个聚类特征树,通过提升阀值T重建CF树,第三四阶段利用全局聚类函数,对已有的CF树进行聚类,来获取更好的结果。
CURE算法:通过多个代表点来表示一个簇,提高算法对任意簇的能力。
CURE算法思想:采用凝聚聚类,在最开始的时候,每个对象属于独立的簇。然后从最相似的对象进行合并,为了能够处理大数据,CURE采用随机抽样和分割的技术来降低数据的量。CURE采用多个对象代表一个簇,并通过收缩因子来调整簇的形状。消除异常值的影响(分两个阶段完成,刚开始进行最相似对象合并,由于异常值的距离很大,所以其所在的类的结点数量增长很慢,接下来在聚类快要结束的时候,将增长慢的簇 当中异常值去掉)。CURE聚类完成后只包含样本的数据,之后还得采取某种策略将非样本的数据加入到聚类中
算法:CURE
输入:数据集D
输出:簇的集合
从源数据集D中抽取随机样本S
将样本S划分成大小相等的分组
对每个划分进行局部聚类
去除孤立点
对局部的簇进行聚类,落在新形成的簇中的代表点根据用户定义的一个收缩因子,向簇中心移动
用相应的簇标记来标记数据
ROCK算法:很多算法都是应用于数值型的数据,聚类依据为数据之间的距离。不能很好的应用于分类型数据。ROCK算法针对具有分类属性的数据使用链接(两个对象之间的共同的近邻数目)这一个概念
算法:ROCK
输入:数据集D
输出:簇的集合
随机选择一个样本
在样本上用凝聚算法进行聚类,簇的合并是基于簇间的相似度进行(即来自不同簇而有相同邻居的样本数目)
将剩余的每个数据根据它与每个簇之间的连接,判断它应该归属的簇
基于密度的聚类算法(DBSCAN算法):
DBSCAN算法涉及的一些概念:EPs领域:给定对象半径内的领域称为该对象的Eps领域。MinPts:给定领域内包含点的最小数目;核心对象:如果对象的领域内至少包含了minPts个点,那么就称这个对象为核心对象。边界点:不是核心对象,但是落在某个核心对象的领域内,噪声点;密度可达还有密度相连
算法:DBSCAN
输入:数据集D,参数MinPts和Eps
输出:簇的集合
首先将数据集D中所有的对象标志为未处理状态
for 数据集中的每个对象p do
if 对象p已经归纳到某个簇或者已经标记为噪声点 continue;
else 检查对象p的领域;如果领域中包含的对象的个数小于minpts 标记对象p为边界点或者噪声点
else 建立新的簇,将对象p标记为核心点,将领域内的结点归入C类
for 领域中的未处理对象,求其领域,若领域中的结点未归类,将其归为C类
end
基于图的聚类算法:
chameleon聚类算法:
关键:确定合并哪两个簇(用相对互连度和相对紧密度度量)
chameleon算法的三个关键步骤:稀疏化、图划分、子图合并
步骤:
构建稀疏图:由数据集构造成k-最邻近图集合G
多层图划分:通过一个多层图划分算法,将图G划分成大量的子图,每个子图代表一个簇
合并子图:合并关于相对互联度和相对紧密度而言
重复上一步直到没有子图可以合并。
基于SNN的聚类算法:
SNN即计算共享最近邻相似度
找出所有点的k最近邻
如果x和y不是相互在对方的最近邻中 then Similarity(x,y)=0;
else Similarity(x,y)=共享最近邻个数
end
基于SNN的聚类算法:
构造SNN相似度矩阵
进行最近k邻居的稀疏处理(根据某个阀值)并依此构造出最近邻居图,使得具有较强连接的样本之间有链接
统计出所有样本的链接强度,依此来确定核心点和噪声点
最后将剩下的点聚类
另外SNN也可以和DBSCAN相结合
一趟聚类算法:
1,初始时,簇集合为空,读入一个新的对象
2,以这个对象构造一个新的簇
3,读入一个新的对象,计算对象与当前簇的距离,选择最小的距离
4,若最小距离大于阀值,则转到2,否则将其并入那个簇。
5,更新簇的质心
(注意阀值的选择策略,对聚类的结果影响相当明显)
基于模型的聚类算法(EM算法):
对参数向量做初始估计:包括随机选择k个对象代表簇的中心以及估计其他参数
按照下面两个步骤反复求精参数:
期望步:计算每个对象指派到类Ci的概率
最大化步:利用上一步得到的概率重新估计模型的参数
聚类的评价指标:
内部评价标准:主要通过计算内部的平均相似度簇间的平均相似度以及整体的平均相似度。理想的距离结果最小的簇内距离和最大的簇间距离。因此很多的距离评价标准都采用簇内和簇外的距离的比值来衡量
外部评价标准:已经存在一个人工分类的数据集,让聚类的结果与其进行比较。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
“最近复购率一直在下降,我们的营销力度不小啊,为什么用户还是走了?” “是不是广告投放的用户质量不高?还是我们的产品问题 ...
2025-02-21以下文章来源于数有道 ,作者数据星爷 SQL查询是数据分析工作的基础,也是CDA数据分析师一级的核心考点,人工智能时代,AI能为 ...
2025-02-19在当今这个数据驱动的时代,几乎每一个业务决策都离不开对数据的深入分析。而其中,指标波动归因分析更是至关重要的一环。无论是 ...
2025-02-18当数据开始说谎:那些年我们交过的学费 你有没有经历过这样的场景?熬了三个通宵做的数据分析报告,在会议上被老板一句"这数据靠 ...
2025-02-17数据分析作为一门跨学科领域,融合了统计学、编程、业务理解和可视化技术。无论是初学者还是有一定经验的从业者,系统化的学习路 ...
2025-02-17挖掘用户价值本质是让企业从‘赚今天的钱’升级为‘赚未来的钱’,同时让用户从‘被推销’变为‘被满足’。询问deepseek关于挖 ...
2025-02-17近来deepseek爆火,看看deepseek能否帮我们快速实现数据看板实时更新。 可以看出这对不知道怎么动手的小白来说是相当友好的, ...
2025-02-14一秒精通 Deepseek,不用找教程,不用买资料,更不用报一堆垃圾课程,所有这么去做的,都是舍近求远,因为你忽略了 deepseek 的 ...
2025-02-12自学 Python 的关键在于高效规划 + 实践驱动。以下是一份适合零基础快速入门的自学路径,结合资源推荐和实用技巧: 一、快速入 ...
2025-02-12“我们的利润率上升了,但销售额却没变,这是为什么?” “某个业务的市场份额在下滑,到底是什么原因?” “公司整体业绩 ...
2025-02-08活动介绍 为了助力大家在数据分析领域不断精进技能,我们特别举办本期打卡活动。在这里,你可以充分利用碎片化时间在线学习,让 ...
2025-02-071、闺女,醒醒,媒人把相亲的带来了。 我。。。。。。。 2、前年春节相亲相了40个, 去年春节相亲50个, 祖宗,今年你想相多少个 ...
2025-02-06在数据科学的广阔领域中,统计分析与数据挖掘占据了重要位置。尽管它们常常被视为有关联的领域,但两者在理论基础、目标、方法及 ...
2025-02-05在数据分析的世界里,“对比”是一种简单且有效的方法。这就像两个女孩子穿同一款式的衣服,效果不一样。 很多人都听过“货比三 ...
2025-02-05当我们只有非常少量的已标记数据,同时有大量未标记数据点时,可以使用半监督学习算法来处理。在sklearn中,基于图算法的半监督 ...
2025-02-05考虑一种棘手的情况:训练数据中大部分样本没有标签。此时,我们可以考虑使用半监督学习方法来处理。半监督学习能够利用这些额 ...
2025-02-04一、数学函数 1、取整 =INT(数字) 2、求余数 =MOD(除数,被除数) 3、四舍五入 =ROUND(数字,保留小数位数) 4、取绝对值 =AB ...
2025-02-03作者:CDA持证人 余治国 一般各平台出薪资报告,都会哀嚎遍野。举个例子,去年某招聘平台发布《中国女性职场现状调查报告》, ...
2025-02-02真正的数据分析大神是什么样的呢?有人认为他们能轻松驾驭各种分析工具,能够从海量数据中找到潜在关联,或者一眼识别报告中的数 ...
2025-02-01现今社会,“转行”似乎成无数职场人无法回避的话题。但行业就像座围城:外行人看光鲜,内行人看心酸。数据分析这个行业,近几年 ...
2025-01-31