K-means: 多次random initialization来避免bad局部最优
2016-03-03 14:48
267 查看
K-means algorithm initialize
K-means算法中有一步为随机初始化cluster centroids,这步如何进行,我们将介绍一种运行比较好的方法,这种方法比其它初始化的方法都好
如何random initialize
如右图所示,两个不同的random initialize,可能会得到两种不同的聚类结果,特别是可能会得到局部最优
什么是局部最优
如图所示,我们有三种不同的initialize cluster centroids的点(叉叉表示),从而得到了三种不同的聚类
可以看出,最上面的那个是最好的聚类,下面两个都不是很好,下面两个就是在最小化J(c,u)的时候得到二种局部最优解
左下角的那个聚类结果将两个类进行了合并,将右下角的那个类分裂成两个类。
那么我们如何避免局部最优呢?
如何避免局部最优
通常情况是进行多次初始化(一般是50-1000次),然后在这些结果中选择一个最好的(即cost function的值最小的那个聚类)
这种通过多次初始化来选择较好的局部最优解(或者全局最优解)的方法适用于K较小(即聚类的个数)为2-10(特别是K=2,3,4,5,6)的情况;如果K很大,则多次初始化选择出来的最优解可能与第一次初始化求出的解差别不大,即没有多大改进。
总结
通过多次随机初始化cluster centroid来避免出现bad局部最优解
多次随机初始化适用于K较小的情况(2-10),对于K较大的情况,一次随机初始化即可
K-means算法中有一步为随机初始化cluster centroids,这步如何进行,我们将介绍一种运行比较好的方法,这种方法比其它初始化的方法都好
如何random initialize
如右图所示,两个不同的random initialize,可能会得到两种不同的聚类结果,特别是可能会得到局部最优
什么是局部最优
如图所示,我们有三种不同的initialize cluster centroids的点(叉叉表示),从而得到了三种不同的聚类
可以看出,最上面的那个是最好的聚类,下面两个都不是很好,下面两个就是在最小化J(c,u)的时候得到二种局部最优解
左下角的那个聚类结果将两个类进行了合并,将右下角的那个类分裂成两个类。
那么我们如何避免局部最优呢?
如何避免局部最优
通常情况是进行多次初始化(一般是50-1000次),然后在这些结果中选择一个最好的(即cost function的值最小的那个聚类)
这种通过多次初始化来选择较好的局部最优解(或者全局最优解)的方法适用于K较小(即聚类的个数)为2-10(特别是K=2,3,4,5,6)的情况;如果K很大,则多次初始化选择出来的最优解可能与第一次初始化求出的解差别不大,即没有多大改进。
总结
通过多次随机初始化cluster centroid来避免出现bad局部最优解
多次随机初始化适用于K较小的情况(2-10),对于K较大的情况,一次随机初始化即可
相关文章推荐
- Android中实现根据EditText中内容是否完整来控制按钮是否可点击
- 不同磁道上扇区的长度不一样,为什么容量还一样
- java RSA加密解密
- 单链表
- cannot find development files install either libnl1 or libnl3
- spring 的controller返回JSON的集中方法
- android: SQLite更新数据
- How to take partial screenshot with Selenium WebDriver in python
- svn在linux下的使用(转)
- JQuery日期插件datepicker的使用方法
- checkio-unlucky days
- windows下安装redis
- 文本去重之MinHash算法
- linux设备驱动那点事儿之输入子系统理论篇
- Activity的生命周期理解
- NSLog用法,打印日志
- *单链表[递归&不带头结点]
- codeforces 627B B. Factory Repairs(线段树)
- JMeter特点&性能测试工具选型的原则&模拟压力的原理
- android——仿网易今日头条等自定义频道listview 或者grideview等item上移到另一个view中