数学建模学习记录——聚类算法
数学建模学习记录——聚类算法
“物以类聚,人以群分”,所谓的聚类,就是将样本划分为 由类似的对象组成的多个类的过程。聚类后,我们可以更加 准确的在每个类中单独使用统计模型进行估计、分析或预测; 也可以探究不同类之间的相关性和主要差异。
一、聚类分析的一些概念
数据的一般的格式
样品与样品之间的常用距离(样品i与样品j)
指标与指标之间的常用“距离”(指标i与指标j)
类与类之间的常用距离
1.由一个样品组成的类是最基本的类;如果每一类都由一 个样品组成,那么样品间的距离就是类间距离。
2.如果某一类包含不止一个样品,那么就要确定类间距 离,类间距离是基于样品间距离定义的,大致有如下几种 定义方式:最短距离法(Nearest Neighbor)、最长距离法(Furthest Neighbor)、组间平均连接法(Between-group Linkage)、组内平均连接法 (Within-group Linkage)、重心法(Centroid clustering)
二、K-means聚类算法
K-means聚类算法概述:
-
算法流程图
-
K-means算法的评价
优点:(1)算法简单、快速。
(2)对处理大数据集,该算法是相对高效率的。
缺点:(1)要求用户必须事先给出要生成的簇的数目K。
(2)对初值敏感。
(3)对于孤立点数据敏感。
K-means++聚类算法
K-means++算法是对K-means算法缺点(2)、(3)点的改进;k-means++算法选择初始聚类中心的基本原则是:初始的聚类中 心之间的相互距离要尽可能的远。
算法描述如下: (只对K-means算法“初始化K个聚类中心”这一步进行了优化)
- 步骤一:随机选取一个样本作为第一个聚类中心;
- 步骤二:计算每个样本与当前已有聚类中心的最短距离(即与最 近一个聚类中心的距离),这个值越大,表示被选取作为聚类中 心的概率较大;最后,用轮盘法(依据概率大小来进行抽选)选 出下一个聚类中心;
- 步骤三:重复步骤二,直到选出K个聚类中心。选出初始点后,就 继续使用标准的K-means算法了。
Spss的聚类分析
Spss分析中的K-均值聚类
可以很好的帮助我们实现聚类
注:如果数据的量纲不一样,那么算距离时就没有意义。可以通过下面的公式进行标准化处理
当然,Spss的描述统计可以帮助我们标准化变量:
对数据(城市消费水平)进行聚类分析:
三、系统(层次)聚类
系统聚类法过程
通过聚类成一个类后,通过分割可以分成多个类
聚类分析需要注意的问题
系统聚类法的SPSS实现
使用SPSS分类中的系统聚类法,可以得到谱系图
用图形估计聚类的数量
确定K后保存聚类结果并画图
四、DBSCAN算法
之前的聚类算法都是基于距离的算法,但是光是以距离进行聚类,有时很难得到理想的聚类图形;而DBSCAN算法(Density-based spatial clustering of applications with noise) 是一种基于密度的聚类方法,聚类前不需要预先指定聚类的个数,生成的簇的个数不定(和数据有关)。该算法利用基于密度的聚类的概念,即要求聚类空间中的一定区域内所包含对象(点或其他空间对象)的数目不小于某一给定阈值。 该方法能在具有噪声的空间数据库中发现任意形状的簇,可将密度足够大的相邻区域连接,能有效处理异常数据。
采用DBSCAN算法,能很好的处理比如这样的图:
基本概念
DBSCAN算法将数据点分为三类:
- 核心点:在半径Eps内含有不少于MinPts数目的点
- 边界点:在半径Eps内点的数量小于MinPts,但是落在核心 点的邻域内
- 噪音点:既不是核心点也不是边界点的点
DBSCAN算法伪代码
DBSCAN(D, eps, MinPts) {
C = 0
for each point P in dataset D {
if P is visited
continue next point
mark P as visited
NeighborPts= regionQuery(P, eps)
if sizeof(NeighborPts) < MinPts
mark P as NOISE
else {
C = next cluster
expandCluster(P, NeighborPts, C, eps, MinPts)
}
}
}
expandCluster(P, NeighborPts, C, eps, MinPts) {
add P to cluster C
for each point P' in NeighborPts{
if P' is not visited {
mark P' as visited
NeighborPts' = regionQuery(P', eps)
if sizeof(NeighborPts') >= MinPts
NeighborPts= NeighborPtsjoined with NeighborPts'
}
if P' is not yet member of any cluster
add P' to cluster C
}
}
regionQuery(P, eps)
return all points within P's eps-neighborhood (including P)
优缺点
下一篇: DSCAN聚类算法概念和实现