KMeans原理实现及分析

摘要

   KMeans是一种简单的对给定数据集将其划分成k个簇的聚类算法,数据挖掘十大算法之一,其数学原理也是非常的朴素。本文将根据KMeans的原理将其实现,并对其性能进行分析,讨论其缺陷与探讨业界主流的改进方式。

1 引言

    KMeans 算法的思想是由许多跨学科领域的研究者们经过长时间不断的交织出来的,但其第一次使用是由Lloyd(1957, 1982)所提出用于调制脉冲编码,关于KMeans的更多历史信息可在[2]中找到,KMeans提出之初因为其朴素算法涉及组合爆炸问题导致其是NP-Hard的问题,但Gray and Neuhoff[3]提出了一种非常高效的启发式搜索算法,使其能够较快的收敛至局部最优值。

   本文第二节会详细的阐述KMeans的数学原理(这是必要的),根据其核心原理使用Python语言将其实现;第三节中会使用scikit-learn产生一组测试数据集,该数据集由三个不同的高斯分布生成,而后会将第二节中实现的KMeans算法应用在此数据集上,并与scikit-learn中提供的KMeans算法进行对比,最后会讨论KMeans的不足并探讨业界流行的改进方式;第四节是对本文的总结。

2 原理及实现

   KMeans其本质是一种基于形心的聚类技术[5],目的要把 D D D 中的所有对象分配到 k k k个簇$ C_1, \cdot \cdot \cdot , C_k$中,使得对于 1 ⩽ i , j ⩽ k , C i ⊆ D 1 \leqslant i , j \leqslant k , C_i \subseteq D 1i,jk,CiD且$ C_i \cap C_j = \varnothing $。使用一个距离度量评价划分的质量,即

E = ∑ j = 1 k ∑ x ∈ C j d i s t ( x , μ j ) ( 2.1 ) E = \sum^{k}_{j=1} \sum_{x \in C_j} dist(x, \mu_j) \qquad \qquad (2.1) E=j=1kxCjdist(x,μj)(2.1)

其中 d i s t ( ⋅ , ⋅ ) dist(\cdot,\cdot) dist(,)<

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值