K-Means聚类
2016-03-12 11:36
323 查看
K-Means聚类
算法基本流程
随机选取k个中心点遍历所有数据,将每个数据划分到最近的中心点中
计算每个聚类的平均值,并作为新的中心点
重复2-3,直到这k个中线点不再变化(收敛了),或执行了足够多的迭代
时间复杂度:O(I*n*k*m)
空间复杂度:O(n*m)
其中m为每个元素字段个数,n为数据量,I为迭代个数。一般I,k,m均可认为是常量,所以时间和空间复杂度可以简化为O(n),即线性的。
算法详解
首先是距离计算方式的选择,一般有两种计算方式,一是欧式距离,而是曼哈顿距离计算聚类中心的方法
Minkowski Distancedij=λ∑k=1n|xik−xjk|λ‾‾‾‾‾‾‾‾‾‾‾‾‾‾⎷λ 可以随意取值,可以是负数,也可以是正数,或是无穷大
Euclidean Distancedij=∑k=1n|xik−xjk|2‾‾‾‾‾‾‾‾‾‾‾‾‾‾⎷
CityBlock Distancedij=∑k=1n|xik−xjk|
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析