MATLAB K-means聚类代码讲解

血红的双手。 提交于 2019-12-02 08:09:54

一、概述

K-means聚类采用类内距离和最小的方式对数据分类,MATLAB中自带K-means算法,最简单的调用如下:

idx=kmeans(x,k)

n-by-p数据矩阵x中的数据划分为k个类簇。x的行对应数据条数,x的列对应数据的维度。注意:当x是向量时,kmeans将其视为n乘1数据矩阵,而不管其方向如何。kmeans返回一个n乘1向量idx,其中包含每个点的簇索引。默认情况下,kmeans使用平方欧氏距离。

二、K-means参数

典型的带参数的K-means调用如下:

[ ... ] = kmeans(..., 'PARAM1',val1, 'PARAM2',val2, ...)

由param和val构成参数键值对进行控制,常用的参数有:

1 'Distance' - 距离度量, 在P维空间中,K-means应该最小化的距离度量

  • 'sqeuclidean'  - 平方欧氏距离(默认值)
  • 'cityblock'       - 绝对差之和,即L1距离
  • 'cosine'          - 1减去点之间夹角的余弦
  • 'correlation'    - 1减去点之间的样本相关性
  •  'hamming'      - 不同位的百分比

2 'Start' - 选择初始簇质心位置的方法

  • 'plus'    - 默认值。根据k-means++算法从X中选择K个观测值。第一个聚类中心从X中随机地选择,然后从剩余的数据点随机地选择每个后续的聚类中心,其概率与距离最近的现有聚类中心的距离成比例。
  • 'sample'  - 随机从X中选择K个观测值.
  • 'uniform' - 从X的分布范围内随机均匀地选择K个点。对于hamming距离无效。
  • 'cluster' - 对X的随机10%子样本执行初步聚类阶段。此初步阶段本身使用“sample”初始化
  • matrix   - 用一个K行P列的矩阵作为初始聚类中心

3 'Replicates' - 重复聚类的次数,每个聚类都有一组新的初始质心,默认为1。

4 'EmptyAction'- 在聚类过程中一个类别丢失了它所有的成员时,需要采用的措施

  •  'singleton' - 创建一个新类簇,该簇由距离其质心最远的一个观测组成(默认值)
  • 'error'     - 空类别作为错误处理.
  • 'drop'      - 删除所有变为空的类簇,并将C和D中的相应值设置为NaN.

5  'Options' - 用于最小化拟合准则的迭代算法的选项, 用statset构建,statset传入的参数包括:

  • 'Display'  - 显示输出的层级。可选 'off', 'iter', 'final'. 其中默认是选择'off'
  • 'MaxIter'  - 最大的迭代次数. 默认100次.
  • 'UseParallel'  - 选择为‘true’或者‘default’,进行并行计算。前提是需要打开并行计算工具箱的parpool,否则设置为默认值‘default’,表示串行计算。
  •  'UseSubstreams'  - 设置为true以可重复的方式并行计算。默认值为false。要重复计算,设置为允许子流的类型:“mlfg6331_64”或“mrg32k3A”.
  •  'Streams'  - 如果“useParallel”为true,“useSubstreams”为false,则“streams”的长度必须等于KMeans使用的工作线程数。如果并行池已打开,则此将是并行池的大小. 

三、带参调用示例

一个例子来描述Kmeans如何带参调用。例如以下代码:

最大迭代100000次,采用1-相关性系数作为距离,对数据进行聚类分析。

K=6;
opts = statset('Display','final','MaxIter',100000);
[Idx,C,sumD,D1]=kmeans(dataStandardlized,K,'dist','correlation','Options',opts);
  • dataStandardlized :N*P的输入数据矩阵
  • K: 表示将dataStandardlized划分为几类,为整数
  • Idx :N*1的向量,存储的是每个点的聚类标号
  • C: K*P的矩阵,存储的是K个聚类质心位置
  • sumD: 1*K的和向量,存储的是类间所有点与该类质心点距离之和
  • D1: N*K的矩阵,存储的是每个点与所有质心的距离

其他:

------分享知识,让人愉悦,原创博文,支持请点赞。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!