本文借鉴了数学建模清风老师的课件与思路

 聚类和分类的区别:分类是已知类别的,聚类是未知的。

一、案例背景

如何根据下表的数据将31个省份分类?

python层次聚类的评价标准 层次聚类算法spss_算法

二、K-means聚类算法

2.1 算法原理

python层次聚类的评价标准 层次聚类算法spss_python层次聚类的评价标准_02


2.2 K-means算法优缺点

优点:算法简单快速,对于数据量较大时,效率较高;

缺点:使用者在开始时必须给定生成的种类K;对于初值比较敏感;对于孤立点的数据比较敏感;

在下方介绍的K-means算法可以解决后面两个缺点。

三、K-means++算法

3.1 算法原理

python层次聚类的评价标准 层次聚类算法spss_聚类_03


3.2 算法实现 

首先将数据导入进SPSS,再执行下图操作(注:SPSS里的K-均值聚类默认就是K-means++算法),迭代可以自己调,聚类的数目暂时不知道,可以先默认为2。

python层次聚类的评价标准 层次聚类算法spss_matlab_04

 

python层次聚类的评价标准 层次聚类算法spss_聚类_05

现在分类的结果就出来了: 

python层次聚类的评价标准 层次聚类算法spss_数据_06

3.3 其他

python层次聚类的评价标准 层次聚类算法spss_matlab_07

现在在原来的数据后面就会出现标准化后(消除量纲后)的数据,这时就可以用这些新数据重复上面的操作了。

四、系统(层次)聚类

4.1 算法原理

 

python层次聚类的评价标准 层次聚类算法spss_python层次聚类的评价标准_08


 我的理解:在所有数据中选择距离最短的两个数据看作一类,两两一类,再在这些类中选择距离最短的两类看作一类,两两合成一个新的大类,以此类推,不断重复这个过程,直至形成最大的一类。

算法流程:

python层次聚类的评价标准 层次聚类算法spss_聚类_09

4.2 算法实现

首先在SPSS中导入数据,再执行下图操作,如果数据的量纲不一样,在方法里勾选上标准化。

python层次聚类的评价标准 层次聚类算法spss_聚类_10

在生成的结果里有个聚类谱系图(树状图),这个图就是我们要的结果,比如下面这个:

python层次聚类的评价标准 层次聚类算法spss_聚类_11


 可以看到,最终结果是分成了一个大类的,在这里面你想分成几类,就可以分成几类。右边的第一条红色竖线就将所有的数据分成了两类,一类是山西—海南,一类是福建—广东;第二条竖线就分成了三类,一类是山西—海南,一类是福建—北京,一类是上海—广东;以此类推......

结果里还有个集中计划表有用,如下图,它可以帮助我们确定要聚成多少类(K值)。

python层次聚类的评价标准 层次聚类算法spss_聚类_12

肘部法则

肘部法则可以确定到底要聚成多少类。

大致内容如下(可放入论文):

python层次聚类的评价标准 层次聚类算法spss_数据_13


将集中计划表中,系数那列复制到Excel并降序,生成一个散点图,调整一下坐标轴(本案例中有31个待分类,故可将横坐标设为1-30),方便观察,最终呈现在论文里的结果如下图的散点图就可。现在就可以确定聚类的数量了。

python层次聚类的评价标准 层次聚类算法spss_算法_14


现在便再次重复上面的操作,不过在保存那里就需要输入K的取值了,如图:

python层次聚类的评价标准 层次聚类算法spss_数据_15


 这里取的K 值是3,实际的K 取决于那张聚合系数散点图,剩下的步骤都是一样的,最终就会在原始数据的后面出现聚类的结果(呈现在论文里的时候自己解释这三类分别是什么什么),如下图:

python层次聚类的评价标准 层次聚类算法spss_聚类_16

接下来根据指标的数量来画聚类的结果图,指标为2个或3个时才能画这个图(本案例中有8个指标,得到的聚类结果图仅为演示的,实际中不会画出来),因为2个指标即为二维图3个指标即为三维图,若大于3个指标,图就不好看了。

步骤如下(详见视频50:00):

python层次聚类的评价标准 层次聚类算法spss_算法_17


在生成的图里点击小圆点、文本、背景可以修改颜色,文本、颜色,搞成如下两个图就差不多了

python层次聚类的评价标准 层次聚类算法spss_聚类_18


四、DBSCAN算法

4.1 算法原理

python层次聚类的评价标准 层次聚类算法spss_聚类_19

 

简洁的话来说就是:谁和我挨得近,谁是我兄弟,兄弟的兄弟,也是我的兄弟。

python层次聚类的评价标准 层次聚类算法spss_聚类_20


 我的理解:Eps(到时候会让你自己取一个)就是半径的意思;Minpts(到时候也会让你自己取一个)就是在所有的数据中随即抽一个幸运儿数据,以这个幸运儿数据为圆点形成一个圆(半径就是自己取的那个半径),Minpts就是这个圆里面数据的个数。核心点,边界点,噪音点,就不解释了,应该看得懂吧。

4.2 算法实现

算法实现详见清风的空间。

优缺点:

python层次聚类的评价标准 层次聚类算法spss_matlab_21


 图上说的很”DBSCAN“就是作出的散点图是呈现出来一个形状的话就用这个算法。

注:代码不要直接抄下来,怕查重,可加上自己的注释,或者将变量名这些给改了,这样就是自己的了,流程图这些也是的,自己画,也可以加深理解。