k-means clustering

k-means clustering 是一种 unsupervised algorithm. 它尝试将数据集分为K类(k是人为设定的初始值).

算法大概是这样子的: 初始时选定K个点, 找出离这些点最近的一些数据归成K类,此时, 计算每一簇数据的均值(或者别的什么?), 然后这K个平均值将会替代初始值, 不断循环分类和计算均值, 结果足够好时退出循环.

初始值随机选定, 不过这个算法是初值敏感型的, 初始不同结果就会不同, 可能会在局部stuck, 可能分出不太合理的聚类来. 所以如果可以改进随机选定初始值这个算法应该可以改善一点, 不过, 我们有暴力的解决办法: 重复执行算法100遍, 在100个结果里面挑最好的.

噪声影响大, 没有像svm或者regression那样有个regularization的砝码. 解决办法: 可以做一下数据预处理, 删掉噪声点, 或者对每个数据做下标准化

均值这个其实也有待商榷, 这个意味着只能聚类出浑圆浑圆像我肚皮一样的聚类了? 比如两个交错的五角星, 这个算法就区分不出来. 求问 有什么聚类方法可以画出阿米巴虫么 = =

一个实际的例子: 昨天突然发现这里的代码进入我们项目的仓库了 ↓ →_→ Using python and k-means to find the dominant colors in images