如何确定聚类算法中的类别个数?

论坛 期权论坛 期权     
热心用户   2019-5-18 03:48   2190   5
在分类算法中,一个最为困难的问题就是如何确定类别的个数。
比如说K-均值中,组的个数往往是事先给定的。
传统上,我们有用gap之类的统计值来估计类别个数是否正确,也有用cross validation 来看哪一种分类所提供的误差最小,或者也有根据分类的稳定性提出了一些指标。

但是这些方法都有自己的局限和不能工作的地方。我想知道在具体问题中,应该选取哪一种方法,来达到最好的分类目的。
分享到 :
0 人收藏

5 个回复

倒序浏览
2#
zhihu用户  16级独孤 | 2019-5-18 03:48:48
2014的Science上有篇文章: Clustering by fast search and find of density peaks.
这个写的不错,算法复杂度也低。

聚类数少的时候,穷举1到N,然后用各种指数去衡量最优的情况(一般最优都是比正常聚类数多一点)。

聚类数非常多的时候,我用过一个就是学习,去用前面的状态来去修正当前状态的聚类数。

我知道的就这么多。
3#
zhihu用户  16级独孤 | 2019-5-18 03:48:49
最近在看ISODATA 聚类算法,它可以在聚类的过程中自适应的确定聚类的数目。可以参考这篇博客http://www.cnblogs.com/huadongw/p/4101422.html
4#
zhihu用户  16级独孤 | 2019-5-18 03:48:50
最简单有效的方法就是穷举1到N个聚类个数的情况,然后分别算似然。选似然最大的,可以保证找到似然上最优的。
但是如果你的聚类个数有200w个呢?
不要觉得是开玩笑的,不信你们去看看腾讯做的LDA。

如果你是做论文的,可以考虑用Dirichlet Processes.可以学习出聚类个数。推断算法都是现成的。

还一种方法是,如果你的数据很多,可以给一个很大的聚类个数,迭代的过程中按某些准则合并或者丢弃掉一些聚类中心,最后达到一个满意的聚类个数哦(比如,无论扔掉哪个聚类中心或者合并某两个中心,都会导致模型的似然降低,那么就可以停止算法了)。其实很多求解DP模型的算法就是用的这方法。如果你单独用这个算法,就显得很low,如果先用DP建模然后用这方法求解,就显得理论值高些。
5#
zhihu用户  16级独孤 | 2019-5-18 03:48:51
AP聚类可以不设置聚类个数,甚至距离矩阵都不需要对称,不过空间复杂度嘛……
我自己写过一个聚类算法,以任意初始点为中心蔓延拓展,拓展不开就再选一个中心,支持非欧距离,算法复杂度基本时空都是n,手机码字就先不放了。
6#
zhihu用户  16级独孤 | 2019-5-18 03:48:52
谱聚类有一个方法是看特征值的大小,不过如果数据本身分不开的话,效果不太好。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:64547
帖子:12910
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP