精华内容
下载资源
问答
  • 本文详细介绍了聚类分析方法的应用条件,并给了立体假意说明
  • 同你分享1个完整的聚类分析案例

    千次阅读 2020-02-08 13:30:00
    这篇文章从对聚类的感性认识到聚类算法的实现:k个初始中心点的选择,中心点的迭代,直到算法收敛得到聚类结果。但有几个问题需要回答:如何判断数据是否适合聚类?k类是如何确定的?遇到数据集小的...

    这篇文章从对聚类的感性认识到聚类算法的实现:

    k个初始中心点的选择,中心点的迭代,直到算法收敛得到聚类结果。

    但有几个问题需要回答:

    如何判断数据是否适合聚类?
    k类是如何确定的?
    遇到数据集小的时候,如何得到直观的聚类图?
    遇到非凸集数据,聚类要如何实现?

    //

    先看一幅以R语言绘制的图,适合聚类吗?

    //

    > library(fMultivar)
    > set.seed(1234)
    > df<-rnorm2d(1000,rho=.5)
    > df<-as.data.frame(df)
    > plot(df,main="bivariable normal distribution with rho=0.5")
    

    显然,这幅图中的数据不适合聚类!因为数据是从相关系数为0.5的正态分布中抽取了1000个观测值!

    //

    如果采用中心点的聚类方法PAM,那么情况是否一致???

    //

    > library(cluster)
    > library(ggplot2)
    > fit<-pam(df,k=2)
    > df$clustering<-factor(fit$clustering)
    > ggplot(data=df,aes(x=V1,y=V2,color=clustering,shape=clustering))+geom_point()+ggtitle("clustering of Bivariate normal data")
    > plot(nc$All.index[,4],type="o",ylab="CCC",xlab="number of clusters",col="blue")
    
    通过对正态分布数据作基于中心点的聚类,我们发现出现了单峰分布,这表明数据是人为划分的,而不是”真实意义的类“。
    事实上,聚类方法是无监督方法,到底靠不靠谱还是得看是否符合常识,现在又增加了一个方法: 如果多种方法都倾向于相似的聚类,那么聚类结果会更加稳健!

    //

    k值是如何确定的了?

    //

    > wssplot<-function(data,nc=15,seed=1234){
    + wss<-(nrow(data)-1)*sum(apply(data,2,var))
    + for (i in 2:nc){
    + set.seed(seed)
    + wss[i]<-sum(kmeans(data,centers=i)$withinss)}
    + plot(1:nc,wss,type="b",xlab="number of clusters",ylab="within groups sum of squares")}
    > wssplot(df)
    > library("NbClust")
    > nc<-NbClust(df,min.nc=2,max.nc = 15,method="kmeans")
    wssplot()推荐聚类个数选择2,或3较为合适!3之后,斜率下降越来越平缓,意味着继续增加类别,并不能带来多大的提升!
    NbClust()推荐聚类个数为2,或3;意味着26个评价指标中,其中8项倾向选择2,5项选择3类!

    //

    如何选出最佳聚类个数的?

    //

    包中定义了几十个评估指标,聚类数目从2~15(自己设定),然后遍历聚类数目,通过看这些评估指标在多少聚类个数时达到最优。

    基于五种营养标准的27类鱼、禽、肉的相同点和不同点是什么?是否有一种方法能把这些食物分成若干个有意义的类?

    > data(nutrient,package="flexclust") #加载数据
    > row.names(nutrient)<-tolower(row.names(nutrient))#将行名改为小写
    > nutrient.sacled<-scale(nutrient) #标准化处理
    > d<-dist(nutrient.sacled) #计算欧几里得距离
    > fit.average<-hclust(d,method="average")#采用平均联动法进行聚类
    > plot(fit.average,hang=-1,cex=.8,main="average linkage clustering")#绘制最后的聚类图
    对于数据量较小时,聚类图可以很好展示类之间的界限!
    解读聚类图:从下向上看;最开始所有的观测值都是一类,两两合并,最终成为一类

    //

    k-means聚类的缺点及改进

    //

    均值的使用意味着所有的变量必须是连续的,并且这个方法很有可能被异常值影响(所以有了k-medoids和k-medians)。

    k-medoids基于中位数进行聚类,虽然可以排除异常值影响,但找中心点需要排序,所以计算速度很慢!

    它在非凸聚类(例如U型)情况下也会变得很差(所以有了kernel k-means)。

    数据集大时容易出现局部最优,需要预先选定k个中心点,对K个中心点选择敏感(所以有了k-means++ )

    因为要算均值,所以只限于数值型数据;不适用categorical类型数据(分类型数据,比如男,女;商品类型;后来有了k-modes)

    //

    其它的聚类方法

    //

    PAM,围绕中心点的划分(PAM),在异常值上表现的很稳健;

    K均值聚类一般选择欧几里得距离,要求数据类型是数值型且是连续变量;而PAM可以使用任意的距离计算;可以容纳混合数据类型,不仅限于连续变量;

    与k-means一样,PAM也需要提前确定k类

    中心点是动态变化的:通过计算中心点到每个观测值之间的距离的总和最小来选择中心点;直到最后中心点不再变化;

    //

    层次划分聚类

    //

    层次划分聚类最大的优点:可解释性好,能产生高质量的类(小而美),

    缺点:时间复杂度高,不能跑大型数据集(改进的算法有BIRCH,数据类型是numerical);在某种意义上分层算法是贪婪的,一旦一个观测值被分配给一个类,它就不能在后面的过 程中被重新分配;容错机制弱,一步错步步错;

    k-means中的观测值不会永远被分配到一类中。

    //

    Mean-Shift聚类

    //

    Mean shift算法,又称均值漂移算法,这是一种基于核密度估计的爬山算法,可用于聚类、图像分割、跟踪等。它的工作原理基于质心,这意味着它的目标是定位每个簇/类的质心,即先算出当前点的偏移均值,将该点移动到此偏移均值,然后以此为新的起始点,继续移动,直到满足最终的条件(找出最密集的区域)。

    优点:不需要提前确定k类

    这里还有更多的问题:

    相似性/相异性的度量:数据本身的相似性,或特征的相似性。度量方法:距离,余弦距离等
    聚类算法如何选择:根据数据特点和想要的聚类个数作选择。
    数据如何作处理:离散傅里叶变换可以提取数据的频域信息,离散小波变换除了频域之外,还可以提取到时域信息。
    降维,比如常见的PCA与SVD作为线性方法,受到广泛的应用,还有基于非线性的方法比如流形学习等。降维与聚类算法结合最好的莫过是谱聚类(先将数据转换成邻接矩阵,再转换成Laplacian矩阵,再对Laplacian矩阵进行特征分解,把最小的K个特征向量排列在一起作为特征,然后适用k-means聚类)。

    End.

    作者:求知鸟

    来源:知乎

    展开全文
  • 聚类分析案例

    千次阅读 2017-04-01 13:54:00
    利用数据挖掘进行数据分析常用的方法主要有分类、回归分析聚类、关联规则、特征、变化和偏差分析、Web页挖掘等,它们分别从不同的角度对数据进行挖掘。 分类。分类是找出数据库中一组数据对象的共同特点并按照...

    一、数据挖掘的常用方法

    利用数据挖掘进行数据分析常用的方法主要有分类、回归分析、聚类、关联规则、特征、变化和偏差分析、Web页挖掘等,它们分别从不同的角度对数据进行挖掘。

    分类。分类是找出数据库中一组数据对象的共同特点并按照分类模式将其划分为不同的类,其目的是通过分类模型,将数据库中的数据项映射到某个给定的类别。它可以应用到客户的分类、客户的属性和特征分析、客户满意度分析、客户的购买趋势预测等,如一个汽车零售商将客户按照对汽车的喜好划分成不同的类,这样营销人员就可以将新型汽车的广告手册直接邮寄到有这种喜好的客户手中,从而大大增加了商业机会。

    回归分析。回归分析方法反映的是事务数据库中属性值在时间上的特征,产生一个将数据项映射到一个实值预测变量的函数,发现变量或属性间的依赖关系,其主要研究问题包括数据序列的趋势特征、数据序列的预测以及数据间的相关关系等。它可以应用到市场营销的各个方面,如客户寻求、保持和预防客户流失活动、产品生命周期分析、销售趋势预测及有针对性的促销活动等。

    聚类。聚类分析是把一组数据按照相似性和差异性分为几个类别,其目的是使得属于同一类别的数据间的相似性尽可能大,不同类别中的数据间的相似性尽可能小。它可以应用到客户群体的分类、客户背景分析、客户购买趋势预测、市场的细分等。

    关联规则。关联规则是描述数据库中数据项之间所存在的关系的规则,即根据一个事务中某些项的出现可导出另一些项在同一事务中也出现,即隐藏在数据间的关联或相互关系。在客户关系管理中,通过对企业的客户数据库里的大量数据进行挖掘,可以从大量的记录中发现有趣的关联关系,找出影响市场营销效果的关键因素,为产品定位、定价与定制客户群,客户寻求、细分与保持,市场营销与推销,营销风险评估和诈骗预测等决策支持提供参考依据。

    特征。特征分析是从数据库中的一组数据中提取出关于这些数据的特征式,这些特征式表达了该数据集的总体特征。如营销人员通过对客户流失因素的特征提取,可以得到导致客户流失的一系列原因和主要特征,利用这些特征可以有效地预防客户的流失。

    变化和偏差分析。偏差包括很大一类潜在有趣的知识,如分类中的反常实例,模式的例外,观察结果对期望的偏差等,其目的是寻找观察结果与参照量之间有意义的差别。在企业危机管理及其预警中,管理者更感兴趣的是那些意外规则。意外规则的挖掘可以应用到各种异常信息的发现、分析、识别、评价和预警等方面。

    Web页挖掘。随着Internet的迅速发展及Web 的全球普及, 使得Web上的信息量无比丰富,通过对Web的挖掘,可以利用Web 的海量数据进行分析,收集政治、经济、政策、科技、金融、各种市场、竞争对手、供求信息、客户等有关的信息,集中精力分析和处理那些对企业有重大或潜在重大影响的外部环境信息和内部经营信息,并根据分析结果找出企业管理过程中出现的各种问题和可能引起危机的先兆,对这些信息进行分析和处理,以便识别、分析、评价和管理危机。

    二、数据挖掘的功能

    数据挖掘通过预测未来趋势及行为,做出前摄的、基于知识的决策。数据挖掘的目标是从数据库中发现隐含的、有意义的知识,主要有以下五类功能。

    自动预测趋势和行为:数据挖掘自动在大型数据库中寻找预测性信息,以往需要进行大量手工分析的问题如今可以迅速直接由数据本身得出结论。一个典型的例子是市场预测问题,数据挖掘使用过去有关促销的数据来寻找未来投资中回报最大的用户,其它可预测的问题包括预报破产以及认定对指定事件最可能做出反应的群体。

    关联分析:数据关联是数据库中存在的一类重要的可被发现的知识。若两个或多个变量的取值之间存在某种规律性,就称为关联。关联可分为简单关联、时序关联、因果关联。关联分析的目的是找出数据库中隐藏的关联网。有时并不知道数据库中数据的关联函数,即使知道也是不确定的,因此关联分析生成的规则带有可信度。

    聚类:数据库中的记录可被化分为一系列有意义的子集,即聚类。聚类增强了人们对客观现实的认识,是概念描述和偏差分析的先决条件。聚类技术主要包括传统的模式识别方法和数学分类学。80年代初,Michalski提出了概念聚类技术,其要点是,在划分对象时不仅考虑对象之间的距离,还要求划分出的类具有某种内涵描述,从而避免了传统技术的某些片面性。

    概念描述:概念描述就是对某类对象的内涵进行描述,并概括这类对象的有关特征。概念描述分为特征性描述和区别性描述,前者描述某类对象的共同特征,后者描述不同类对象之间的区别。生成一个类的特征性描述只涉及该类对象中所有对象的共性。生成区别性描述的方法很多,如决策树方法、遗传算法等。

    偏差检测:数据库中的数据常有一些异常记录,从数据库中检测这些偏差很有意义。偏差包括很多潜在的知识,如分类中的反常实例、不满足规则的特例、观测结果与模型预测值的偏差、量值随时间的变化等。偏差检测的基本方法是,寻找观测结果与参照值之间有意义的差别。

    三、数据挖掘实例 – 聚类分析应用之市场细分

    聚类是将数据分类到不同的类或者簇这样的一个过程,所以同一个簇中的对象有很大的相似性,而不同簇间的对象有很大的相异性。

    从统计学的观点看,聚类分析是通过数据建模简化数据的一种方法。传统的统计聚类分析方法包括系统聚类法、分解法、加入法、动态聚类法、有序样品聚类、有重叠聚类和模糊聚类等。

    从机器学习的角度讲,簇相当于隐藏模式。聚类是搜索簇的无监督学习过程。与分类不同,无监督学习不依赖预先定义的类或带类标记的训练实例,需要由聚类学习算法自动确定标记,而分类学习的实例或数据对象有类别标记。聚类是观察式学习,而不是示例式的学习。

    从实际应用的角度看,聚类分析是数据挖掘的主要任务之一。而且聚类能够作为一个独立的工具获得数据的分布状况,观察每一簇数据的特征,集中对特定的聚簇集合作进一步地分析。聚类分析还可以作为其他算法(如分类和定性归纳算法)的预处理步骤。

    聚类分析的核心思想就是物以类聚,人以群分。在市场细分领域,消费同一种类的商品或服务时,不同的客户有不同的消费特点,通过研究这些特点,企业可以制定出不同的营销组合,从而获取最大的消费者剩余,这就是客户细分的主要目的。在销售片区划分中,只有合理地将企业所拥有的子市场归成几个大的片区,才能有效地制定符合片区特点的市场营销战略和策略。金融领域,对基金或者股票进行分类,以选择分类投资风险。

    下面以一个汽车销售的案例来介绍聚类分析在市场细分中的应用。

     

    汽车销售聚类分析

     

    商业目标

    业务理解:数据名称《汽车销售.csv》。该案例所用的数据是一份关于汽车的数据,该数据文件包含销售值、订价以及各种品牌和型号的车辆的物理规格。订价和物理规格可以从 edmunds.com 和制造商处获得。定价为美国本土售价。如下:

     

    美国本土售价

     

    表1:数据视图

    业务目标:对市场进行准确定位,为汽车的设计和市场份额预测提供参考。

    数据挖掘目标:通过聚类的方式对现有的车型进行分类。

    数据准备

    通过数据探索对数据的质量和字段的分布进行了解,并排除有问题的行或者列优化数据质量。

     

    汽车销售销售数据

    第一步,我们使用统计节点审核数据的质量,从审核结果中我们发现存在缺失的数据,如下图所示:

     

     

    审核后的数据

    第二步,对缺失的数据进行处理,我们选择使用缺失填充节点删除这些记录。配置如下:

     

     

    删除记录配置

     

    建模

    我们选择层次聚类进行分析,尝试根据各种汽车的销售量、价格、引擎、马力、轴距、车宽、车长、制动、排量、油耗等指标对其分类。

    因为层次聚类不能自动确定分类数量,因此需要我们以自定义的方式规定最后聚类的类别数。层次聚类节点配置如下(默认配置):

     

    层次聚类节点配置

    可以使用交互表或者右击层次聚类节点查看聚类的结果,如下图所示:

     

     

    使用交互表或者右击层次聚类节点查看聚类的结果

    再使用饼图查看每个类的大小,结果如下:饼图结果

     

     

    从图中可见,分成的三个类样本数差异太大,cluster_0和cluster_1包含的样本数都只有1,这样的分类是没有意义的,因此需要重新分类。我们尝试在层次聚类节点的配置中指定新的聚类方法:完全。新的聚类样本数分布如下:新的聚类样本数分布

     

     

    cluster_0、 cluster_1、cluster_2的样本数分别为:50、9、93。条形图记数

     

     

    执行后输出树状/冰柱图,可以从上往下看,一开始是一大类,往下走就分成了两类,越往下分的类越多,最后细分到每一个记录是一类,如下所示:树状图

     

     

    我们可以再使用条形图查看每类的销售量、平均价格,如下图所示:条形图求和

     

     

    每类总销量分布图每类总销量分布图

     

     

    每类平均销量分布图每类平均销量分布图

     

     

    每类平均价格分布图

     

    我们再看一下每类的销售额分布情况。首先,我们需要使用Java代码段节点或者派生节点生成销售额字段,配置如下:每类平均价格分布图配置

     

    再使用饼图查看销售额分布情况,cluster_0、 cluster_1、cluster_2的市场份额分别为:32.39%、0.53%和67.08%,如下图所示:市场份额

     

     

     

    案例小结

    通过这个案例,大家可以发现聚类分析确实很简单。进行聚类计算后,主要通过图形化探索的方式评估聚类合理性,以及在确定聚类后,分析每类的特征。

    转载于:https://www.cnblogs.com/zourui4271/p/6655699.html

    展开全文
  • https://www.ibm.com/developerworks/cn/analytics/library/ba-1607-clustering-algorithm/index.html前言本文将系统的讲解数据挖掘领域的经典聚类算法,并给予代码实现示例。虽然当下已有很多平台都集成了数据挖掘...

    https://www.ibm.com/developerworks/cn/analytics/library/ba-1607-clustering-algorithm/index.html

    前言

    本文将系统的讲解数据挖掘领域的经典聚类算法,并给予代码实现示例。虽然当下已有很多平台都集成了数据挖掘领域的经典算法模块,但笔者认为要深入理解算法的核心,剖析算法的执行过程,那么通过代码的实现及运行结果来进行算法的验证,这样的过程是很有必要的。因此本文,将有助于读者对经典聚类算法的深入学习与理解。

    聚类和分类的区别

    一开始笔者就想谈谈这个话题,毕竟在数据挖掘算法领域,这两者有着很大的差别,对于初学者很容易混淆。抛开晦涩的定义陈述,在此我们先通过两个生活比喻看看什么是监督学习,什么是非监督学习。

    回首我们人生最美好的豆蔻年华,那时的我们,少年初长成,结束了小学生涯,步入初中,这个年龄是我们人生中第一个分水岭。初中一年级刚入学时,同学们之间彼此不认识,老师对同学们也都不熟悉。但随着时间的推移,同学们基本上都分成了三五群,回想一下那时的我们,是不是整天玩在一起的同学总是那几个?我们发现,这个过程老师是不参与的,老师不会让同学们分成几组,让哪几个同学经常在一起学习和玩耍。想想这个过程,其实是我们自己辨别和哪些同学合得来一个过程,这期间我们可能会判断同学的性格,学习成绩,共同爱好与话题,是否和同学家离的很近还能一起上学和回家等等很多的维度因素。时间久了,班级里就会出现不同的几个圈子,这个圈子的数量及细节一开始并没有人知晓,并且这个过程无老师进行监督,因此我们视之为无监督学习。在此我们指出,聚类算法是无监督学习的算法。

    初中三年级,因为我们背负着中考的重担,大家都为了自己的理想高中做最后的冲刺努力。设想这样一种情况:为了更好的帮助大家不断提高学习成绩,班主任老师将班级分成了五个互帮互助小组(语文、数学、物理、生物、英语),每个小组十位同学,分别是班级里这几个科目考试成绩最好的前十名同学,为了达到更好的互帮互助效果,每位达到条件要求的同学只能加入一门科目小组,也就是说,如果某位同学有两门或两门以上的科目都排在班级前十名,则班主任老师随机指定其加入某一小组。这样所有同学都可以在互帮互助小组的帮助下更大程度的提升自己的薄弱科目,实现共赢。在此我们可以看到小组的种类,数量,都是定义好的,只需要老师指定好各个小组的成员。因此,这样的学习过程是一种监督学习过程,老师给出小组的种类和数量用排名的方式来监督并激励学生学习。在此我们指出,分类算法是监督学习的算法。

    总结一下,数据分类是分析已有的数据,寻找其共同的属性,并根据分类模型将这些数据划分成不同的类别,这些数据赋予类标号。这些类别是事先定义好的,并且类别数是已知的。相反,数据聚类则是将本没有类别参考的数据进行分析并划分为不同的组,即从这些数据导出类标号。聚类分析本身则是根据数据来发掘数据对象及其关系信息,并将这些数据分组。每个组内的对象之间是相似的,而各个组间的对象是不相关的。不难理解,组内相似性越高,组间相异性越高,则聚类越好。

    K 均值算法详解及实现

    算法流程

    K 均值算法,应该是聚类算法中最为基础但也最为重要的算法。其算法流程如下:

    1. 随机的取 k 个点作为 k 个初始质心;
    2. 计算其他点到这个 k 个质心的距离;
    3. 如果某个点 p 离第 n 个质心的距离更近,则该点属于 cluster n,并对其打标签,标注 point p.label=n,其中 n<=k;
    4. 计算同一 cluster 中,也就是相同 label 的点向量的平均值,作为新的质心;
    5. 迭代至所有质心都不变化为止,即算法结束。

    当然算法实现的方法有很多,比如在选择初始质心时,可以随机选择 k 个,也可以随机选择 k 个离得最远的点等等,方法不尽相同。

    K 值估计

    对于 k 值,必须提前知道,这也是 kmeans 算法的一个缺点。当然对于 k 值,我们可以有很多种方法进行估计。本文中,我们采用平均直径法来进行 k 的估计。

    也就是说,首先视所有的点为一个大的整体 cluster,计算所有点之间距离的平均值作为该 cluster 的平均直径。选择初始质心的时候,先选择最远的两个点,接下来从这最两个点开始,与这最两个点距离都很远的点(远的程度为,该点到之前选择的最远的两个点的距离都大于整体 cluster 的平均直径)可视为新发现的质心,否则不视之为质心。设想一下,如果利用平均半径或平均直径这一个指标,若我们猜想的 K 值大于或等于真实的 K 值,也就是簇的真实数目,那么该指标的上升趋势会很缓慢,但是如果我们给出的 K 值小于真实的簇的数目时,这个指标一定会急剧上升。

    根据这样的估算思想,我们就能估计出正确的 k 值,并且得到 k 个初始质心,接着,我们便根据上述算法流程继续进行迭代,直到所有质心都不变化,从而成功实现算法。如下图所示:

    图 1. K 值估计
    图 1. K 值估计

    我们知道 k 均值总是收敛的,也就是说,k 均值算法一定会达到一种稳定状态,在此状态下,所有的点都不会从一个簇转移到另一个簇,因此质心不在发生改变。在此,我们引出一个剪枝优化,即:k 均值最明显的收敛过程会发生在算法运行的前期阶段,故在某些情况下为了增加算法的执行效率,我们可以替换上述算法的第五步,采用“迭代至仅有 1%~3%的点在影响质心”或“迭代至仅有 1%~3%的点在改变簇”。

    k 均值适用于绝大多数的数据类型,并且简单有效。但其缺点就是需要知道准确的 k 值,并且不能处理异形簇,比如球形簇,不同尺寸及密度的簇,环形簇等等。

    本文主要为算法讲解及实现,因此代码实现暂不考虑面向对象思想,采用面向过程的实现方式,如果数据多维,可能会需要做数据预处理,比如归一化,并且修改代码相关方法即可。

    层次聚类算法详解及实现

    层次聚类简介

    层次聚类分为凝聚式层次聚类和分裂式层次聚类。

    凝聚式层次聚类,就是在初始阶段将每一个点都视为一个簇,之后每一次合并两个最接近的簇,当然对于接近程度的定义则需要指定簇的邻近准则。

    分裂式层次聚类,就是在初始阶段将所有的点视为一个簇,之后每次分裂出一个簇,直到最后剩下单个点的簇为止。

    本文中我们将详细介绍凝聚式层次聚类算法。

    对于凝聚式层次聚类,指定簇的邻近准则是非常重要的一个环节,在此我们介绍三种最常用的准则,分别是 MAX, MIN, 组平均。如下图所示:

    图 2. 层次聚类计算准则
    图 2. 层次聚类计算准则

    算法流程

    凝聚式层次聚类算法也是一个迭代的过程,算法流程如下:

    1. 每次选最近的两个簇合并,我们将这两个合并后的簇称之为合并簇。
    2. 若采用 MAX 准则,选择其他簇与合并簇中离得最远的两个点之间的距离作为簇之间的邻近度。若采用 MIN 准则,取其他簇与合并簇中离得最近的两个点之间的距离作为簇之间的邻近度。若组平均准则,取其他簇与合并簇所有点之间距离的平均值作为簇之间的邻近度。
    3. 重复步骤 1 和步骤 2,合并至只剩下一个簇。

    算法过程举例

    下面我们看一个例子:

    下图是一个有五个点的而为坐标系:

    图 3. 层次聚类举例
    图 3. 层次聚类举例

    下表为这五个点的欧式距离矩阵:

    表 1. 欧式距离原始矩阵
     
     P1P2P3P4P5
    P100.811.321.941.82
    P20.8101.562.161.77
    P31.321.5600.630.71
    P41.942.160.6300.71
    P51.821.770.710.710

    根据算法流程,我们先找出距离最近的两个簇,P3, P4。

    合并 P3, P4 为 {P3, P4},根据 MIN 原则更新矩阵如下:

    MIN.distance({P3, P4}, P1) = 1.32;

    MIN.distance({P3, P4}, P2) = 1.56;

    MIN.distance({P3, P4}, P5) = 0.70;

    表 2. 欧式距离更新矩阵 1
     
     P1P2{P3, P4}P5
    P100.811.321.82
    P20.8101.561.77
    {P3, P4}1.321.5600.71
    P51.821.770.710

    接着继续找出距离最近的两个簇,{P3, P4}, P5。

    合并 {P3, P4}, P5 为 {P3, P4, P5},根据 MIN 原则继续更新矩阵:

    MIN.distance(P1, {P3, P4, P5}) = 1.32;

    MIN.distance(P2, {P3, P4, P5}) = 1.56;

    表 3. 欧式距离更新矩阵 2
     
     P1P2{P3, P4, P5}
    P100.811.32
    P20.8101.56
    {P3, P4, P5}1.321.560

    接着继续找出距离最近的两个簇,P1, P2。

    合并 P1, P2 为 {P1, P2},根据 MIN 原则继续更新矩阵:

    MIN.distance({P1,P2}, {P3, P4, P5}) = 1.32

    表 4. 欧式距离更新矩阵 3
     
     {P1, P2}{P3, P4, P5}
    {P1, P2}01.32
    {P3, P4, P5}1.320

    最终合并剩下的这两个簇即可获得最终结果,如下图:

    图 4. 层次聚类举例结果
    图 4. 层次聚类举例结果

    MAX,组平均算法流程同理,只是在更新矩阵时将上述计算簇间距离变为簇间两点最大欧式距离,和簇间所有点平均欧式距离即可。

    DBSCAN 算法详解及实现

    考虑一种情况,点的分布不均匀,形状不规则时,Kmeans 算法及层次聚类算法将面临失效的风险。

    如下坐标系:

    图 5. DBSCAN 算法举例
    图 5. DBSCAN 算法举例

    我们可以看到上面的点密度不均匀,这时我们考虑采用基于密度的聚类算法:DBSCAN。

    算法流程

    1. 设定扫描半径 Eps, 并规定扫描半径内的密度值。若当前点的半径范围内密度大于等于设定密度值,则设置当前点为核心点;若某点刚好在某核心点的半径边缘上,则设定此点为边界点;若某点既不是核心点又不是边界点,则此点为噪声点。
    2. 删除噪声点。
    3. 将距离在扫描半径内的所有核心点赋予边进行连通。
    4. 每组连通的核心点标记为一个簇。
    5. 将所有边界点指定到与之对应的核心点的簇总。

    算法过程举例

    如上图坐标系所示,我们设定扫描半径 Eps 为 1.5,密度阈值 threshold 为 3,则通过上述算法过程,我们可以得到下图:

    图 6. DBSCAN 算法举例结果示例
    图 6. DBSCAN 算法举例结果示例

    通过计算各个点之间的欧式距离及其所在扫描半径内的密度值来判断这些点属于核心点,边界点或是噪声点。因为我们设定了扫描半径为 1.5,密度阈值为 3,所以:

    • P0 点为边界点,因为在以其为中心的扫描半径内只有两个点 P0 和 P1;
    • P1 点为核心点,因为在以其为中心的扫描半径内有四个点 P0,P1,P2,P4 ;
    • P8 为噪声点,因为其既非核心点,也非边界点;
    • 其他点依次类推。

    其他聚类算法简介

    BIRCH 算法

    Birch 是一种能够高效处理大数据聚类的基于树的层次聚类算法。设想这样一种情况,一个拥有大规模数据的数据库,当这些数据被放入主存进行聚类处理时,一般的聚类算法则没有对应的高效处理能力,这时 Birch 算法是最佳的选择。

    Birth 不仅能够高效地处理大数据聚类,并且能最小化 IO 花销。它不需要扫描全局数据已经现有的簇。

    算法流程

    聚类特征 CF=(N,LS,SS),其中 N 代表簇中点的个数,LS 代表簇中代表簇中各点线性和,SS 代表簇中各点的平方和距离。聚类特征被应用于 CF 树中,CF 树是一种高度平衡树,它具有两个参数:平衡因子 B 和簇半径阈值 T。其中平衡因子 B 代表每一个非叶子节点最多能够引入 B 个实体条目。

    叶子节点最多只能包含 L 个实体条目,并且它们具有前向后向指针,这样可以彼此链接起来。

    树的大小取决于簇半径阈值 T 的大小。

    1. 从根节点开始,递归查找与要插入的数据点距离最近的叶子节点中的实体条目,递归过程选择最短路径。
    2. 比较上述计算出的数据点与叶子节点中实体条目间的最近距离是否小叶簇半径阈值 T,小于则吸收该数据点。否则执行下一步。
    3. 判断当前条目所在的叶节点个数是否小于 L,若小于则直接将该数据点插入当前点。否则分裂叶子节点,分裂过程是将叶子节点中距离最远的两个实体条目变为新的两个叶子节点,其他条目则根据距离最近原则重新分配到这两个新的叶子节点中。删除原来的叶子节点并更新 CF 树。

    若不能将所有数据点加入 CF 树中,则考虑增加簇半径阈值 T,并重新更新 CF 树直至所有的数据点被加入 CF 树为止。

    CURE 算法

    算法流程

    1. 在数据集中选择样本数据。
    2. 将上述样本数据划分为 P 个同样大小的划分。
    3. 将每个划分中的点聚成 m/pq 个簇,共得到 m/q 个簇。过程中需删除噪声点。
    4. 对上述 m/q 个簇进行聚类直至剩下 k 个簇。
    5. 继续删除离群点。
    6. 将剩下的点指派到最近的簇完成聚类过程。

    结束语

    聚类算法是数据挖掘算法中最为重要的部分之一,算法种类繁多,应用场景也各有不同,本文章提到的聚类算法为常见常用的一些较为基本的算法,对于其他的聚类算法,如最小生成树聚类,CLIQUE,DENCLUE,SOM 等等如有兴趣,读者可以自行查找相关资料进行学习。本文旨在提高读者对算法本身的理解,代码实现过程及结果打印能够更好的帮助读者剖析算法,使读者能够更快的入门并掌握基本的聚类算法。


    展开全文
  • 案例实践:用SPSS做K均值聚类分析

    千次阅读 2020-12-10 09:31:00
    01案例数据背景某公司对应聘的48人进行多项测试后,对直接表现其特征的14个方面进行了打分,每个单项都采用10分制,得分越高说明当事人在此方面表现越好。试对应聘者做聚类。对应聘者做聚类,...

    01

    案例数据背景

    某公司对应聘的48人进行多项测试后,对直接表现其特征的14个方面进行了打分,每个单项都采用10分制,得分越高说明当事人在此方面表现越好。试对应聘者做聚类。

    对应聘者做聚类,在现实中可能有些意义。比如同一类型的应聘者5人,公司仅有2个名额的话,是不是就方便HR在同一类型人中做更小范围的筛选。

    另外不同类型的应聘者,可以提供不同的工作和培训。

    02

    SPSS菜单操作

    菜单:【分析】→【分类】→【K均值聚类】:

    1)聚类依据是至关重要的,多一个少一个都可能引起聚类结果的改变,本例将所有品质得分数据作为聚类依据。

    2)聚几个类合适呢?可以采用遍历的方式反复多次聚类,并对结果进行比较总结经验,类可以不要太多,本例聚成3类。因此聚类数直接输入数字3。

    K均值聚类要求用户在开始聚类前对聚类对象的分类有所认知,开始聚类时应明确指出聚成几个类,如果对类的结果没有经验参考,那么采取遍历的方式寻找最佳的聚类个数K。

    点开【保存】按钮,要求软件根据聚类算法计算各应聘者的分类及距离类中心的距离。

    打开【选项】按钮,勾选【初始聚类中心】和【ANOVA】表,后者有一定价值,是以聚类结果作为因子,以各参与聚类的变量作为因变量,做单因素方差分析,考察类结果对各指标的区分情况。

    返主对话框,点【确定】后执行。

    03

    SPSS结果解读

    聚类结果之各类规模或各类成员数。出现了一个小类,编号为3,仅有3个应聘者成员。

    在数据视图下可以看到原始数据新增了一个聚类结果变量,给出每一位应聘者的分类编号。比如分类水平1代表归属与编号1的类型。

    至于这三个类的特征,需要用户自己提炼信息并命名。这里和因子分析有些类似。类的特征需要各自独立,且符合实际指导意义。

    有没有办法从可视化效果的角度来看看聚类结果呢?有,我们绘制一个立体3维散点图吧。

    这个角度看,三个分类的区分还是比较明显的。但此图缺点也很明显,怎么选定绘制图所需的三个变量?聚类变量重要性排序吗?

    SPSS并没有给出明确方案。况且散点图我们只能最多放三个轴,可我们现在有10多个聚类依据啊,如何去展示呢?如何辅助去提炼类特征呢?

    小兵给大家一个最简单的方案。

    我们以最终聚类中心为数据资料,绘制各类在各项目上的条形图,对比条形图的高低来对类做特征描述。

    看着此图,我们找一找各个项目的最高得分,最低得分,总结提炼类的特征。编号为1的类型是【忠厚老实】,编号为2的类型是【缺乏经验】,其他方面都不错,编号为3的类型是【经验丰富老油条】或是在某方面有特别之才能。

    对类特征有一个总体把握之后,对各类型应聘者提供不同的,相对应的职位和工作。

    展开全文
  • 【数据挖掘】聚类分析实例

    千次阅读 2020-04-26 12:36:24
    本文,我们将使用划分方法中的k-均值算法和层次聚类方法以一个实例进行完整的聚类分析演示。 1. 问题描述 例题: 为研究我国31个省、市、自治区2007年的城镇居民生活消费的规律,根据调查资料作区域消费类型划分。...
  • (转载)SPSS之聚类分析(图文+数据集)

    千次阅读 多人点赞 2020-01-15 10:51:00
    SPSS之聚类分析(图文+数据集) 聚类分析简介 按照个体(记录)的特征将它们分类,使同一类别内的个体具有尽可能高的同质性,而类别之间则具有尽可能高的异质性。为了得到比较合理的分类,首先要采用适当的...
  • 摘要:案例数据源: 有20种12盎司啤酒成分和价格的数据,变量包括啤酒名称、热量、钠含量、酒精含量、价格。数据来自《SPSS for Windows 统计分析》。 目 录 问题一:选择那些变量进行聚类?——采用“R型...
  • k-means聚类分析小例子,通俗易懂

    千次阅读 2020-05-07 18:07:59
    k-means聚类分析 已知如下数据,对表中数据点运用K-means方法进行聚类分析 X Y P1 0 0 P2 1 2 P3 3 1 P4 8 8 P5 9 10 P6 10 7 选取初值k=2,也就是p1和p2俩点。 计算距离: P1 P2 ...
  • 用MATLAB做聚类分析

    万次阅读 2017-05-15 21:20:29
    近期工作关系用到Matlab做聚类分析。所谓聚类分析,其目的在于将研究的数据样本划分为不同类别。Matlab的统计工具箱提供了相应的分析工具。相关概念在网上可以找到不少资料,这里推荐两个博客供大家参考。   ...
  • 聚类算法应用场景实例十则

    千次阅读 2017-06-15 07:03:58
    本文整理了10个天池、DataCastle、DataFountain等中出现的,可使用聚类算法处理的问题场景实例。 1 基于用户位置信息的商业选址  随着信息技术的快速发展,移动设备和移动互联网已经普及到千家万户。...
  • 聚类分析(K-means) python代码实现

    千次阅读 2020-04-14 18:44:51
    聚类分析(K-means) python...所以,空想不如实干,今天抽出一些时间用python对聚类分析的最基础的一种(K-means)进行了实现,下面,我将就原理、案例及代码进行分析。 ​ 首先,提到聚类分析,我们会想到:群体划分...
  • SPSS(十五)spss之聚类分析(图文+数据集)

    万次阅读 多人点赞 2019-06-08 15:38:48
    SPSS(十五)spss之聚类分析(图文+数据集) 聚类分析简介 按照个体(记录)的特征将它们分类,使同一类别内的个体具有尽可能高的同质性,而类别之间则具有尽可能高的异质性。 为了得到比较合理的分类,首先要采用...
  • 聚类分析的研究成果主要集中在基于距离(或者称为基于相似度)的聚类方法,用距离来作为相似性度量的优点是十分直观,从我们对物体的识别角度来分析,同类的数据样本是相互靠近的,不同类样本应该相聚较远。...
  • 聚类方法 适用场景 代表算法 ... 是解决聚类问题的一种经典算法,简单、快速,复杂度为O(N) 对处理大数据集,该算法保持可伸缩性和高效率 当簇近似为高斯分布时,它的效果较好 .
  • Python数模笔记-Sklearn(1)样本聚类分析 1、分类的分类 分类的分类?没错,分类也有不同的种类,而且在数学建模、机器学习领域常常被混淆。 首先我们谈谈有监督学习(Supervised learning)和无监督学习...
  • 之前的培训有老师提出要做SOM分析,最后卡在code plot只能出segment ...更多聚类相关见:基因共表达聚类分析和可视化聚类分析factoextra获取pheatmap聚类后和标准化后的结果WGCNA分析,简单全面的最新教程一文学会...
  • r语言模糊聚类(真实案例完整流程)

    千次阅读 热门讨论 2018-03-23 10:57:07
    模糊聚类分析是根据客观事物间的特征、亲疏程度、相似性,通过建立模糊相似关系对客观事物进行聚类的分析方法,模糊识别又称为模糊分类。从处理问题的角度来看,模糊识别可以分为有监督的分类和无监督的分类两种类型...
  • Datawhale作者:小一,Datawhale优秀学习者寄语:首先,对聚类算法进行了介绍;然后,解释了EM算法E步、M步的原理;最后,对sklearn参数进行了详解,并对王者荣耀英...
  • K-means算法是经典的基于划分的聚类方法,是十大经典数据挖掘算法之一,其基本思想是:以空间中k个点为中心进行聚类,对最靠近它们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。...
  • 聚类方法 适用场景 代表算法 ... 是解决聚类问题的一种经典算法,简单、快速,复杂度为O(N) 对处理大数据集,该算法保持可伸缩性和高效率 当簇近似为高斯分布时,它的效果较好 .
  • @1、背景经典案例:主成分与原始量 关系:假设:操作实例:
  • SPSS因子分析经典案例分享

    万次阅读 多人点赞 2014-12-10 18:07:32
    因子分析已经被各行业广泛应用,各种案例琳琅满目,以前在百度空间发表过相关文章,是以每到4至6月,这些文章总会被高校毕业生扒拉一遍,也总能收到各种魅惑的留言,因此,有必要再次发布这经典案例以飨读者。...
  •  详解21种常用数据处理算法:数据插值、拟合、线性回归、因子分析(主成分分析)、系统聚类分析、线性规划、非线性规划、层次分析法、指数平滑预测、线性二次移动平均法、混合整数规划、大规模数学规划、DW检验、...
  • 聚类】五种主要聚类算法

    千次阅读 2019-11-15 09:56:49
    聚类是一种机器学习技术,它涉及到数据点的分组。给定一组数据点,我们可以使用聚类算法将...在数据科学中,我们可以使用聚类分析从我们的数据中获得一些有价值的见解。在这篇文章中,我们将研究5种流行的聚类算法以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,041
精华内容 816
关键字:

聚类分析法经典案例