一、概述
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的矩阵,存储的是每个点与所有质心的距离
其他:
- 官方资料:https://ww2.mathworks.cn/help/stats/kmeans.html
------分享知识,让人愉悦,原创博文,支持请点赞。