MATLAB K-means聚类分析

K聚类用法

  • 对未知分类的数据进行分类。
  • 分类之前要人为定义要分多少类,即要先确定 K 值
  • 分类后可以得出每一个样本属于哪一个类,以及各类的中心点。

MATLAB函数

  • [idx,C,sumd,D] = kmeans(X,K)

  • 输入 X 是要分类的数据矩阵,每一行是一个样本,每一列是一组特征值。输入 K 是规定的分类组数。
  • idx 是一个列向量,记录对应位置处样本所属类的序号。
  • C 记录了 K 个类的中心点的坐标。
  • sumd 记录了每组的中心点,每一行是一个中心点坐标。
  • D 记录了每个点到每个中心点的距离的平方,第 i 行的第 j 列为第 i 个样本到第 j 组中心点的距离平方。

实例

  • 对下面这组数据进行分类,规定分为 2 类
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);

MATLAB K-means聚类分析_第1张图片

K值确定

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

你可能感兴趣的:(数学建模)