聚类算法
§6.1 引言
判别分析和聚类分析是两种不同目的的分类方法,它们所起的作用是不同的。
判别分析方法假定组(或类)已事先分好,判别新样品应归属哪一组,对组的事先划分有时也可以通过聚类分析得到。
**聚类分析:**将分类对象分成若干类,相似的归为同一类,不相似的归为不同的类。
聚类分析分为Q型(分类对象为样品)和R型(分类对象为变量)两种。
§6.2 距离和相似系数
相似性度量:距离和相似系数**。
距离常用来度量样品之间的相似性,相似系数常用来度量变量之间的相似性。
样品之间的距离和相似系数有着各种不同的定义,而这些定义与变量的类型有着非常密切的关系。
变量的测量尺度
通常变量按测量尺度的不同可以分为间隔、有序和名义尺度变量三类。
**间隔尺度变量:**变量用连续的量来表示,如长度、重量、速度、温度等。
**有序尺度变量:**变量度量时不用明确的数量表示,而是用等级来表示,如某产品分为一等品、二等品、三等品等有次序关系。
名义尺度变量:变量用一些类表示,这些类之间既无等级关系也无数量关系,如性别、职业、产品的型号等。
本章主要讨论具有间隔尺度变量的样品聚类分析方法。
§6.3 系统聚类法
系统聚类法(hierarchical clustering method)是聚类分析诸方法中用得最多的一种。
基本思想是:开始将n个样品各自作为一类,并规定样品之间的距离和类与类之间的距离,然后将距离最近的两类合并成一个新类,计算新类与其他类的距离;重复进行两个最近类的合并,每次减少一类,直至所有的样品合并为一类。
以下列出了八种系统聚类方法,其区别在于类与类之间距离的计算方法不同。
一、最短距离法
二、最长距离法
三、中间距离法
四、类平均法
五、重心法
六、离差平方和法(Ward方法)
七、系统聚类法的统一
八、类的个数
系统聚类法的统一
§6.4 动态聚类法
动态聚类法的基本思想是,选择一批凝聚点或给出一个初始的分类,让样品按某种原则向凝聚点凝聚,对凝聚点进行不断的修改或迭代,直至分类比较合理或迭代稳定为止。类的个数k可以事先指定,也可以在聚类过程中确定。选择初始凝聚点(或给出初始分类)的一种简单方法是采用随机抽选(或随机分割)样品的方法。
动态聚类法有许多种方法,本节中,只讨论一种比较流行的动态聚类法——k均值法。k均值法是由麦奎因(MacQueen,1967)提出并命名的一种算法。
k均值法的基本步骤
- 选择k个样品作为初始凝聚点,或者将所有样品分成k个初始类,然后将这k个类的重心(均值)作为初始凝聚点。
- 对除凝聚点之外的所有样品逐个归类,将每个样品归入凝聚点离它最近的那个类(通常采用欧氏距离),该类的凝聚点更新为这一类目前的均值,直至所有样品都归了类。
- 重复步骤(2),直至所有的样品都不能再分配为止。
最终的聚类结果在一定程度上依赖于初始凝聚点或初始分类的选择。经验表明,聚类过程中的绝大多数重要变化均发生在第一次再分配中。
k均值算法实战案例:
原始数据:
%--------------------------------------------------------------------------
% 读取examp09_04.xls中数据,进行K均值聚类
%--------------------------------------------------------------------------
%*************************读取数据,并进行标准化变换*************************
[X, textdata] = xlsread('examp09_04.xls'); % 从Excel文件中读取数据
row = ~any(isnan(X), 2); % 返回一个逻辑向量,非缺失观测对应元素1,缺失观测对应元素0
X = X(row, :); % 剔除缺失数据,提取非缺失数据
countryname = textdata(3:end,1); % 提取国家或地区名称,countryname为字符串元胞数组
countryname = countryname(row); % 剔除缺失数据所对应的国家或地区名称
X = zscore(X); % 数据标准化,即减去均值,然后除以标准差
%*************************选取初始凝聚点,进行聚类***************************
startdata = X([8, 27, 42],:); % 选取第8、第27和第42个观测为初始凝聚点
idx = kmeans(X,3,'Start',startdata); % 设置初始凝聚点,进行K均值聚类
%****************************** 绘制轮廓图 *********************************
[S, H] = silhouette(X,idx); % 绘制轮廓图,并返回轮廓值向量S和图形句柄H
countryname(idx == 1) % 查看第1类所包含的国家或地区
countryname(idx == 2) % 查看第2类所包含的国家或地区
countryname(idx == 3) % 查看第3类所包含的国家或地区
在聚类分析中,“Silhouette Value”(轮廓值)是一个衡量聚类效果好坏的指标。
轮廓值的范围是[-1, 1],它为每个数据点提供了一个介于-1和1之间的值,用来表示该数据点在当前聚类中的一致性和凝聚性。
轮廓值的解释如下:
- 接近1的值表示数据点在其聚类中非常紧密,并且与最近的其他聚类相隔较远,即聚类效果良好。
- 接近0的值表示数据点可能处于两个聚类之间的边界上,聚类效果不确定。
- 负值表示数据点可能被错误地分配到了聚类,应该属于另一个聚类。
轮廓值可以用来评估聚类算法的性能,选择最佳的聚类数目,或者比较不同聚类算法的效果。
聚类分析结果:
ans =
16×1 cell 数组
' 中 国'
' 印度尼西亚'
' 伊 朗'
' 哈萨克斯坦'
' 朝 鲜 '
' 蒙 古'
' 菲 律 宾'
' 泰 国'
' 越 南'
' 埃 及'
' 墨 西 哥'
' 巴 西'
' 委内瑞拉'
' 俄罗斯联邦'
' 土 耳 其'
' 乌 克 兰'
ans =
8×1 cell 数组
' 孟加拉国'
' 柬 埔 寨'
' 印 度'
' 老 挝'
' 缅 甸'
' 巴基斯坦'
' 尼日利亚'
' 南 非'
ans =
19×1 cell 数组
' 文 莱'
' 以 色 列'
' 日 本'
' 韩 国'
' 马来西亚'
' 新 加 坡'
' 斯里兰卡'
' 美 国'
' 阿 根 廷'
' 捷 克'
' 法 国'
' 德 国'
' 意 大 利'
' 荷 兰'
' 波 兰'
' 西 班 牙'
' 英 国'
' 澳大利亚'
' 新 西 兰'
文章中的相关文件以及PPT文件可以在上传的资源:《聚类分析,使用MATLAB,案例和代码》中找到。
' 阿 根 廷'
' 捷 克'
' 法 国'
' 德 国'
' 意 大 利'
' 荷 兰'
' 波 兰'
' 西 班 牙'
' 英 国'
' 澳大利亚'
' 新 西 兰'
文章中的相关文件以及PPT文件可以在上传的资源:《聚类分析,使用MATLAB,案例和代码》中找到。