数学建模学习记录——聚类算法

数学建模学习记录——聚类算法

  • 一、聚类分析的一些概念
    • 数据的一般的格式
    • 样品与样品之间的常用距离(样品i与样品j)
    • 指标与指标之间的常用“距离”(指标i与指标j)
    • 类与类之间的常用距离
  • 二、K-means聚类算法
    • K-means聚类算法概述:
    • K-means++聚类算法
    • Spss的聚类分析
  • 三、系统(层次)聚类
    • 系统聚类法过程
    • 聚类分析需要注意的问题
    • 系统聚类法的SPSS实现
    • 用图形估计聚类的数量
  • 四、DBSCAN算法
    • 基本概念
    • DBSCAN算法伪代码
    • 优缺点

“物以类聚,人以群分”, 所谓的聚类,就是将样本划分为 由类似的对象组成的多个类的过程。聚类后,我们可以更加 准确的在每个类中单独使用统计模型进行估计、分析或预测; 也可以探究不同类之间的相关性和主要差异。

一、聚类分析的一些概念

数据的一般的格式

数学建模学习记录——聚类算法_第1张图片

样品与样品之间的常用距离(样品i与样品j)

数学建模学习记录——聚类算法_第2张图片

指标与指标之间的常用“距离”(指标i与指标j)

数学建模学习记录——聚类算法_第3张图片

类与类之间的常用距离

1.由一个样品组成的类是最基本的类;如果每一类都由一 个样品组成,那么样品间的距离就是类间距离。
2.如果某一类包含不止一个样品,那么就要确定类间距 离,类间距离是基于样品间距离定义的,大致有如下几种 定义方式:最短距离法(Nearest Neighbor)、最长距离法(Furthest Neighbor)、组间平均连接法(Between-group Linkage)、组内平均连接法 (Within-group Linkage)、重心法(Centroid clustering)

二、K-means聚类算法

K-means聚类算法概述:

  • 算法流程图
    数学建模学习记录——聚类算法_第4张图片

  • 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-均值聚类可以很好的帮助我们实现聚类
注:如果数据的量纲不一样,那么算距离时就没有意义。可以通过下面的公式进行标准化处理
数学建模学习记录——聚类算法_第5张图片
当然,Spss的描述统计可以帮助我们标准化变量:
数学建模学习记录——聚类算法_第6张图片
对数据(城市消费水平)进行聚类分析:

数学建模学习记录——聚类算法_第7张图片

数学建模学习记录——聚类算法_第8张图片

三、系统(层次)聚类

系统聚类法过程

数学建模学习记录——聚类算法_第9张图片

通过聚类成一个类后,通过分割可以分成多个类

聚类分析需要注意的问题

数学建模学习记录——聚类算法_第10张图片

系统聚类法的SPSS实现

使用SPSS分类中的系统聚类法,可以得到谱系图
数学建模学习记录——聚类算法_第11张图片

用图形估计聚类的数量

数学建模学习记录——聚类算法_第12张图片
确定K后保存聚类结果并画图
数学建模学习记录——聚类算法_第13张图片

四、DBSCAN算法

之前的聚类算法都是基于距离的算法,但是光是以距离进行聚类,有时很难得到理想的聚类图形;而DBSCAN算法(Density-based spatial clustering of applications with noise) 是一种基于密度的聚类方法,聚类前不需要预先指定聚类的个数,生成的簇的个数不定(和数据有关)。该算法利用基于密度的聚类的概念,即要求聚类空间中的一定区域内所包含对象(点或其他空间对象)的数目不小于某一给定阈值。 该方法能在具有噪声的空间数据库中发现任意形状的簇,可将密度足够大的相邻区域连接,能有效处理异常数据。

采用DBSCAN算法,能很好的处理比如这样的图:
数学建模学习记录——聚类算法_第14张图片

基本概念

DBSCAN算法将数据点分为三类:

  • 核心点:在半径Eps内含有不少于MinPts数目的点
  • 边界点:在半径Eps内点的数量小于MinPts,但是落在核心 点的邻域内
  • 噪音点:既不是核心点也不是边界点的点

数学建模学习记录——聚类算法_第15张图片

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)

优缺点

数学建模学习记录——聚类算法_第16张图片

你可能感兴趣的:(聚类)