k-means算法以k为参数(所指望的簇的个数),把n个对象分红k个簇(单层划分),用质心(数据点的平均值)定义簇的原型。使得簇内具备较高的类似度,而簇间的类似度较低。算法
经过聚类,咱们可以发现数据对象之间的关系。簇内的类似度越高,簇间的类似度越低,聚类效果越好。优化
①随机选择k个点做为初始的聚类中心。spa
②对于剩下的点,根据其与聚类中心的距离,将其纳入最近的簇,造成k个簇。对象
③对每一个簇,计算全部点的均值做为新的聚类中心。原型
④重复②、③,直到聚类中心再也不改变。数据类型
①可能收敛于局部最小值,在大规模数据中收敛较慢。方法
②k值须要预先给定,属于先验知识。数据
③对初始选取的聚类中心敏感。这会致使①。参数
④并不适合全部的数据类型,好比不能处理非球形簇。数据处理
⑤对含离群点的数据处理时存在问题。
为了克服k-means收敛于局部最小值的问题,能够采用二分k-means(bisecting K-means).
①将全部样本当作一个簇。
②当簇小于k时,对于每一个簇i,计算总偏差,在簇i上进行2-means聚类,再计算该簇划分为两个簇后的总偏差,选择偏差最小的簇进行划分。