数学建模学习笔记之评价问题聚类分析法
物以类聚、人以群分。
聚类分析是一个很大的概念,显然根据分类的依据不同会出现很多很多聚类的方法。例如K-Means 、Sequential Leader、Model Based Methods、Density Based Methods、Hierarchical Methods、EM、蚁群算法等等。各类算法之间并没有优劣之分,只存在选择是否恰当问题。数学建模主要注重结论,所以这里就重点讲解其中比较有名的K-Means聚类和它在SPSS软件上的实现。
聚类:把各不相同的个体分割为有更多相似性子集合,产生的子集叫做簇
应用领域:客户价值分析、文本分类、数据处理等
K-Means聚类(K-均值)分析
算法步骤
- 随机选取K个样本作为类中心
- 计算各样本与各类之间的距离
- 将各样本归于最近的类中心点
- 求各类样本的均值,作为新的类中心
- 判定:若类中心不再发生变动或到达迭代次数,算法结束,否则返回第二步。
聚类指标
外部指标:将聚类结果与参考模型进行比较
a:集合SS包含在聚类结果中属于相同簇在参考模性中也属于相同簇的样本对。
b:集合SD包含在聚类结果中属于相同簇在参考模性中属于不同簇的样本对。
c:集合DS包含在聚类结果中属于不同簇在参考模性中属于相同簇的样本对。
d:集合DD包含在聚类结果中属于不同簇在参考模性中属于不同簇的样本对。
Jaccard系数
FM指数
Rand指数
上述指标在[0,1]区间内越大越好。
内部指标:不依赖于任何参考模型,直接考察聚类结果
avg©:簇C内样本间平均距离
diam©:簇C间样本间的最远距离
dmin:簇Ci与Cj最近样本间的距离
dcem:簇Ci与Cj中心点间的距离
DB指数越小越好:
紧密性(CP):各样本到聚类中心的距离
间隔性(SP):各类中心间平均距离
代码实现
MATLAB中关于聚类的函数有很多,k-means应该是其中比较简单一种
x = [1 2 6 8 13]'; % 原始数据
opts = statset('Display','final'); % 显示每次聚类的最终结果
% startset产生一个复杂的struct,参数‘display’可选有off/iter/final
idx = kmeans(x,3,'Distance','city','Replicates',5,'Options',opts)
% 将原始的5个点聚为3类,距离采用绝对值距离,重复聚类5次
%Distance’:聚类距离的度量方式 Start’:迭代初始点的选取方式
%‘Replicates’:选取不同的初始点进行计算的次数,默认值为1
%‘Options’:迭代的方式,需要创建一个statset变量
%****************************绘制聚类轮廓图*********************************
[S, H] = silhouette(x,idx) % 绘制轮廓图,并返回轮廓值向量S和图形句柄H
SPSS使用
案例·对下表中10个省份进行聚类
第一步:打开spss>文件>打开>数据
第二步:分析>分类>K-平均值聚类>把依据的指标值导入变量,地区导入标注个案,填写聚类数,勾选迭代与分类
第三步:选项>勾选要查看的结果/迭代选择最大迭代次数
点确定,就结束了。参考结果如下:
总结
K-Means 聚类是一种比较典型的划分聚类方法,其代码简单步骤也比较容易懂。但由于其可选地方不多,而使用系统聚类也就是层次聚类的方法,通过画出的树状图来判断聚类就更加方便。具体SPSS方法和k-means差不多,MATLAB实现代码和教学视频我整理了下手边资料,有兴趣可以下载