物以类聚,人以群分,在现实世界中存在着大量的分类问题,聚类分析是研究分类问题的一种多元统计方法,在生物学、经济学、人口学、生态学、电子商务等很多方面有着非常广泛的应用。
更多MATLAB数据分析视频请点击,或者在网易云课堂上搜索《MATLAB数据分析与统计》 http://study.163.com/course/courseMain.htm?courseId=1003615016
聚类分析的目的是把分类对象按一定的规则分成若干类,这些类不是事先给定的,而是根据数据的特征确定的,对类的数目和类的结构不必做任何假定。同一类里面的这些对象在某种意义上倾向于彼此相似,而在不同类例的对象倾向于不相似。
这里主要介绍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’ |