matlabk均值聚类分析代码(matlabk均值聚类)

物以类聚,人以群分,在现实世界中存在着大量的分类问题,聚类分析是研究分类问题的一种多元统计方法,在生物学、经济学、人口学、生态学、电子商务等很多方面有着非常广泛的应用。

聚类分析的目的是把分类对象按一定的规则分成若干类,这些类不是事先给定的,而是根据数据的特征确定的,对类的数目和类的结构不必做任何假定。同一类里面的这些对象在某种意义上倾向于彼此相似,而在不同类例的对象倾向于不相似。

这里主要介绍K均值聚类和模糊C聚类

1.K均值聚类

K均值聚类有称为快速聚类法,是由麦奎因在1967年提出来的一种聚类方法,其基本步骤为:

第一:选择k个样品作为初始凝聚点(聚类种子),或者将所有样本分成k个初始类,然后将k个类的重心(均值)作为初始凝聚点。

第二:对除凝聚点之外的所有样本逐个归类,将每个样品归入离他最近的凝聚点所在的类,该类的凝聚点更新为这一类目前的均值,直至所有样品都归了类。

第三:重复步骤二,直至所有的样本都不能再分配为止。

注意:K均值聚类的最终聚类结果在一定程度上依赖于初始聚类点或初始分类的选择

1.1 K均值聚类的MATLAB函数

与K均值聚类法相关函数有:kmeans和silhouette

(1)kmeans函数

kmeans函数用来做K均值聚类,将n个点(或观测)分为k类。聚类过程是动态的,通过迭代使得每个点与所属类重心距离的和达到最小。默认情况下,kmeans采用平方欧式聚类。调用格式如下:

<1>IDX=kmeans(X,k)

将n个点(或观测)分为k类,输入参数X为nxp的矩阵,矩阵的每一行对应一个点,每一列对应一个变量。输出参数IDX是一个nx1的向量,其元素为每个点所属类的类序号。

<2>[IDX,C]=kmeans(X,k)

返回k个类的重心坐标矩阵C,C是一个kxp的矩阵,第i行元素为第i类的类重心坐标。

<3>[IDX,C,sumd]=kmeans(X,k)

返回类内距离(即类内各点与类重心距离之和)向量sumd,sumd是一个1xk的向量,第i个元素为第i类的类内距离之和。

<4>[IDX,C,sumd,D]=kmeans(X,k)

返回每个点与每个类重心之间的距离矩阵D,D是一个nxk的矩阵,第i行第j列的元素是第i个点与第j类的重心之间的距离

<5>[.......]=kmeans(...,param1,val1,param2,val2,....)

允许用户设置更多的参数及参数值,用来控制kmeans函数所用的迭代算法。param1,param2,...,为参数名,val1,val2,...,为相应的参数值,可用的参数名与参数值如下表:

参数名 参数值 说明
‘distance’ ‘sqEuclidean’ 平方欧式距离(默认情况)
‘cityblock’ 绝对值距离
‘cosine’ 把每个点作为一个向量,两点距离为1减去两个向量夹角余弦
‘correlation’ 把每个点作为一个数值序列,两点间距离为1减去两个数值序列的相关系数
‘Hamming’ 即不一致字节所占的百分比,仅适用于二进制数据
‘emptyaction’ ‘error’ 把空类作为错误对待(默认情况)
‘drop’ 去除空类,输出参数C和D中相应值用NaN表示
‘singleton’ 生成一个只包含最远点的新类
‘onlinephase’ ‘on’ 执行在线更新(默认情况)
‘off’ 不执行在线更新
‘options’ 由statest函数创建的结构体变量 用来设置迭代算法的相关选项
‘replicates’ 正整数 重复聚类的次数
‘start’ ‘sample’ 随机选择k个观测点作为初始凝聚点
‘uniform’ 在观测值矩阵X中随机并均匀地选择k个观测点作为初始凝聚点
‘cluster’ 从X中随机选择10%个子样本,进行聚类运算,确定凝聚点。
‘Matrix’ 若为kxp的矩阵,用来设定k个初始聚类点。若为kxpxm的3维数组,则重复进行m次聚类,每次聚类通过相应页上的二维数组设定k个初始凝聚点

(2)silhouette函数

silhouette函数用来根据聚类的结果绘制轮廓,从轮廓中可以看出那个点的分类是否合理。轮廓图上第i个点的轮廓值定义为:

S(i)=min(b)-a/max(a,min(b))

其中,a是第i个点与同类的其他点之间的平均距离;b为一个向量,其元素是第i个点与不同类的类内各点之间的平均距离。

轮廓值S(i)的取值范围为[-1,1],S(i)的值越大,说明第i个点的分类越合理,当S(i)<0时,说明第i个点的分类不合理,还有比目前分类更合理的分类。

silhouette函数的调用格式如下:

<1>slihouette(X,clust)

更加样本矩阵X和聚类聚过clust绘制轮廓图。输入参数X是一个nxp的矩阵,矩阵的每一行对应一个观测值,每一列对应一个变量。clust是聚类的结果,可以是由每个观测所属的类序号构成的数值向量,也可以是由类名称构成的字符矩阵或字符串元胞数组。

<2> s=silhouette(X,clust)

返回轮廓值向量s,他是以nx1的向量,其元素为相应点的轮廓值。此时不绘制轮廓。

<3>[s,h]=slihouette(X,clust)

绘制轮廓图,并返回轮廓值向量s和图形句柄h。

<4>[......]=silhouette(X,clust,metric)

指定距离计算的方法,绘制轮廓图。输入参数metric为字符串或距离矩阵,用来指定距离计算的方法或距离矩阵。silhouette函数支持的各种距离如下表:

metric参数取值 说明
‘Euclidean’ 欧式距离
‘sqEuclidean’ 平方欧式距离(默认情况)
‘cityblock’ 绝对值距离
‘cosine’ 把每个点作为一个向量,两点距离为1减去两个向量夹角余弦
‘correlation’ 把每个点作为一个数值序列,两点间距离为1减去两个数值序列的相关系数
‘Hamming’ 汉明距离
‘Jaccard’ 不一致的非零坐标所占的百分比
Vector 上三角形式的距离矩阵对应的距离向量

<5>[....]=silhouette(X,clust,distfun,p1,p2,.....)

接受函数句柄作为第三个参数即distfun,用来自低昂呀距离计算的方法。

1.2 K均值距离的示例

下表中列出了46个国家和地区3年(1990,2000,2006)的婴儿死亡率和出生时预期寿命数据,根据这些数据,利用K均值聚类法,对各个国家和地区进行聚类分析

matlabk均值聚类分析代码(matlabk均值聚类)

[X, textdata] = xlsread('婴儿.xls');

%isnan函数的作用是如果x中有非数(NaNs,比如0/0),则取1,否则取0,

%这样isnan(x)得到的就是只含0和1的向量(或矩阵),

%这里我取A = isnan(x),则row=~any(isnan(x),2)可以写成row=~any(A,2),

%any(A, 2)表示对A的行向量判断,如果有非零数,则取1,否则取0;“~”表示逻辑非操作。

%最终,返回一个逻辑值,非缺失观察对应元素1,缺失观察对应元素0

row = ~any(isnan(X), 2);

X = X(row, :); %剔除掉了缺失数据,提取非缺失数据

countryname = textdata(3:end,1); %提取国家或地区名称

countryname = countryname(row); %剔除缺失数据所对应的国家名称或地区名称

%将剔除缺失数据后的数据标准化

%数据标准化,即减去均值,然后除以标准差

X = zscore(X);

%K均值聚类分析,分3类,也可以人为指定初始凝聚点

idx=kmeans(X,3);

% 绘制轮廓图 ,并返回轮廓值向量S和图形句柄H

[S, H] = silhouette(X,idx);

%查看聚类结果

countryname(idx == 1) %查看第1类所包含的国家或地区

countryname(idx == 2) %查看第2类所包含的国家和地区

countryname(idx == 3) %查看第3类所包含的国家和地区

ans =

' 文 莱'

' 以 色 列'

' 日 本'

' 韩 国'

' 马来西亚'

' 新 加 坡'

' 斯里兰卡'

' 美 国'

' 阿 根 廷'

' 委内瑞拉'

' 捷 克'

' 法 国'

' 德 国'

' 意 大 利'

' 荷 兰'

' 波 兰'

' 西 班 牙'

' 英 国'

' 澳大利亚'

' 新 西 兰'

ans =

' 孟加拉国'

' 柬 埔 寨'

' 印 度'

' 老 挝'

' 缅 甸'

' 巴基斯坦'

' 尼日利亚'

' 南 非'

ans =

' 中 国'

' 印度尼西亚'

' 伊 朗'

' 哈萨克斯坦'

' 朝 鲜 '

' 蒙 古'

' 菲 律 宾'

' 泰 国'

' 越 南'

' 埃 及'

' 墨 西 哥'

' 巴 西'

' 俄罗斯联邦'

' 土 耳 其'

' 乌 克 兰'

matlabk均值聚类分析代码(matlabk均值聚类)

以上给出了分为3类时的聚类结果,每一类中所包含的观测一目了然,非常直观。

下次讲解模糊C聚类

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论