最简单有效的方法就是穷举1到N个聚类个数的情况,然后分别算似然。选似然最大的,可以保证找到似然上最优的。
但是如果你的聚类个数有200w个呢?
不要觉得是开玩笑的,不信你们去看看腾讯做的LDA。
如果你是做论文的,可以考虑用Dirichlet Processes.可以学习出聚类个数。推断算法都是现成的。
还一种方法是,如果你的数据很多,可以给一个很大的聚类个数,迭代的过程中按某些准则合并或者丢弃掉一些聚类中心,最后达到一个满意的聚类个数哦(比如,无论扔掉哪个聚类中心或者合并某两个中心,都会导致模型的似然降低,那么就可以停止算法了)。其实很多求解DP模型的算法就是用的这方法。如果你单独用这个算法,就显得很low,如果先用DP建模然后用这方法求解,就显得理论值高些。
作者:杨超
来源:知乎