K-means聚类算法

K-means算法是最简单的非监督学习算法,主要用于解决已知数据的聚类问题。其基本过程如下:
(1)预先指定数值k;将数据集分成k个簇。
(2)随机确定k个中心位置点。
(3)计算各个数据点与k个中心点的距离。
(4)根据距离排序将该数据点分配给最邻近的中心,形成k个簇。
(5)计算每个簇的平均位置,作为新的中心点。
(6)重复步骤3-5直到簇不发生变化或达到最大迭代次数。
一、算法过程
下面结合图例给出其算法过程:
设平面上有如下的数据集(共有9个数据),需要将其进行聚类。
这里写图片描述
(1)指定k=3,将数据集聚成3类。
(2)随机生成k=3个中心点。
这里写图片描述
(3)计算这9个数据点分别到3个中心点的距离。
(4)对这些距离进行排序,将9个数据点按照距离最近原则将其聚类到相应的中心点。
这里写图片描述
如图所示,本次聚类:1,2,3归为了一类;4,5归为了一类;6,7,8,9归为了一类。
(5)计算每一类中的平均位置。例如数据点4,5作为一类,其坐标分别为(20,20),(22,21),则平均位置为(21,20.5),将这个平均位置作为新的中心位置。
这里写图片描述
(6)再次计算这9个数据点分别到3个新中心点的距离。
(7)对这些距离进行排序,将9个数据点按照距离最近原则将其聚类到相应的新中心点。
这里写图片描述
如图所示,本次聚类:1,2,3归为了一类;4,5,6归为了一类;7,8,9归为了一类。
(8)再次计算每一类中的平均位置,将平均位置又作为新的中心点位置。
这里写图片描述
生成的新中心点如图所示。
(9)再次计算这9个数据点分别到3个新中心点的距离。
(10)对这些距离进行排序,将9个数据点按照距离最近原则将其聚类到相应的新中心点。
本次聚类:1,2,3归为了一类;4,5,6归为了一类;7,8,9归为了一类。与上次的聚类没有发生变化,算法过程结束退出。

二、时间复杂度
从算法过程中可以看到,需要求n个数据点和k个中心的距离,外面有多次迭代,迭代次数为m。则k-means算法的时间复杂度为:
O(mnkd),m与数据集本身的分布情况和初始中心点位置有关。n为数据集中数据样本数量,k为聚类个数,d为数据的维数。
三、优缺点
优点:

  • 算法速度快;
  • 原理简单,
  • 易于理解;
  • 聚类效果好。

缺点:
- 需要先确定k的值。事实上我们一般不知道数据集的分布情况。
- 对非线性数据集效果不好或无能为力。如下图的数据集。

这里写图片描述

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值