前言javascript
kmeans是最简单的聚类算法之一,可是运用十分普遍。最近在工做中也常常遇到这个算法。kmeans通常在数据分析前期使用,选取适当的k,将数据分类后,而后分类研究不一样聚类下数据的特色。html
本文记录学习kmeans算法相关的内容,包括算法原理,收敛性,效果评估聚,最后带上R语言的例子,做为备忘。java
算法原理算法
kmeans的计算方法以下:shell
1 随机选取k个中心点app
2 遍历全部数据,将每一个数据划分到最近的中心点中机器学习
3 计算每一个聚类的平均值,并做为新的中心点ide
4 重复2-3,直到这k个中线点再也不变化(收敛了),或执行了足够多的迭代函数
时间复杂度:O(I*n*k*m)post
空间复杂度:O(n*m)
其中m为每一个元素字段个数,n为数据量,I为跌打个数。通常I,k,m都可认为是常量,因此时间和空间复杂度能够简化为O(n),即线性的。
算法收敛
从kmeans的算法能够发现,SSE实际上是一个严格的坐标降低(Coordinate Decendet)过程。设目标函数SSE以下:
SSE(,