因为一直在做的是聚类算法的研究,算是总结了一些心得,这里总结些知识性与思路性的东西,我想在其他地方也是很容易的找到类似的内容的。毕竟,世界就是那么小。
声明:本文比较不适合没有DM基础的人来阅读。我只是胡乱的涂鸦而已
在DM里的聚类算法里,有基于划分的算法,基于层次的算法,基于密度的算法,基于网格的算法,基于约束的算法。
其中每一种基于的算法都会衍生出一至几种算法,对应的每一种算法不管在学术界还是工业界都存在着许多的改进的算法
这里想介绍的是基于基于划分的算法里的K均值算法
在基于划分的算法里,最典型的是K均值算法,这个比较简单,也是很容易理解的。
原理:
算法的输入:数据集合,K值
输出:经过聚类的K个中心点
1、在待聚类的数据集合里随机的选取K个数据样本点作为初始的聚类中心
2、计算剩余的每一个样本点距离K个聚类中心点的距离,分配样本点到最最近的聚类中心簇里
3、重新计算聚类簇的均值
4、判断聚类中心点是否会存在变化或者平方误差函数基本上不在变化(这个可以人为的设定,比如通过设定平方误差函数与上次相比满足一定的关系变停止算法等等),否则重复步骤2,3
算法优点
很明显的是算法很容易,很简单,相对来说很快啊,仅限于小数据量。
算法的缺点
这个也是很明显的,根据算法原理,K值的人为性,主观性,要是有一个算法或者什么方式能够精确地确定K值变化给此算法带来突破;另外,初始聚类中心的随机性;还有数据集合肯定存在孤立点的影响以及大数据量的解决方案等等
针对K均值的缺点,前仆后继,中外的scholars和experts都在做出了很大的贡献。我这里根据自己能够想到的总结下(肯定是不全的)
每一种的引入都会对应着一篇或数篇papers,数学的引入,算法的引入,形式多样,不拘一格
这也许正是对应了导师曾经说过的那句话,科学就是要小步慢跑
看paper实现papers,改进papers,优化papers,上线系统的测试等,在看papers,实现papers,改进papers,优化papers,上线测试,循环的更迭。
我想在这一系列的过程中,会有几个好帮手,google,wiki,一个好的IDE,一个足够灵活的大脑,要是有足够的硬件条件来满足你就更棒了
原文地址:http://blog.csdn.net/duankaifei/article/details/44120449