K聚类用法
- 对未知分类的数据进行分类。
- 分类之前要人为定义要分多少类,即要先确定 K 值
- 分类后可以得出每一个样本属于哪一个类,以及各类的中心点。
MATLAB函数
[idx,C,sumd,D] = kmeans(X,K)
- 输入 X 是要分类的数据矩阵,每一行是一个样本,每一列是一组特征值。输入 K 是规定的分类组数。
- idx 是一个列向量,记录对应位置处样本所属类的序号。
- C 记录了 K 个类的中心点的坐标。
- sumd 记录了每组的中心点,每一行是一个中心点坐标。
- D 记录了每个点到每个中心点的距离的平方,第 i 行的第 j 列为第 i 个样本到第 j 组中心点的距离平方。
实例
clear
X = [0 0;1 0; 0 1; 1 1;2 1;1 2; 2 2;3 2; 6 6; 7 6; ...
8 6; 6 7; 7 7; 8 7; 9 7 ; 7 8; 8 8; 9 8; 8 9 ; 9 9];
[idx,C,sumd,D] = kmeans(X,2);
figure
plot(X(:,1),X(:,2),'b*','MarkerSize',10);
hold on
plot(C(:,1),C(:,2),'ro','MarkerSize',10);

K值确定
- 在建模过程中,我们要选取合适的 K 值建立模型,下面介绍一种简单的选取方法。
- 随着 K 值的增大,所有点到其所对应的中心点距离的平方(WSS)会减小(由于算法原因,每一次运行结果可能有所波动),当 K 增大到所有点的个数时,每个点自成一类,WSS变为0。所以,做出X轴是K值,Y轴是WSS的图,看到那个拐弯处最厉害的地方就是理想的 K 值,因为再增加 K 也不会很大地改善分类效果了。
- 下图即为“肘子图”:(盗一张图)

本文章使用limfx的vsocde插件快速发布