我们在k-means 聚类中找到聚类中心并将点分配给 k 个不同的聚类 bin,这是一种众所周知的算法,几乎在网络上的每个机器学习包中都可以找到。但在我看来,缺少的也是最重要的部分是选择正确的 k。它的最佳价值是什么?而且,最好的意思是什么?
我使用 MATLAB 进行科学计算,其中查看剪影图作为决定此处讨论的 k 的一种方式。但是,我会对贝叶斯方法更感兴趣。任何建议表示赞赏。
我们在k-means 聚类中找到聚类中心并将点分配给 k 个不同的聚类 bin,这是一种众所周知的算法,几乎在网络上的每个机器学习包中都可以找到。但在我看来,缺少的也是最重要的部分是选择正确的 k。它的最佳价值是什么?而且,最好的意思是什么?
我使用 MATLAB 进行科学计算,其中查看剪影图作为决定此处讨论的 k 的一种方式。但是,我会对贝叶斯方法更感兴趣。任何建议表示赞赏。
首先是一个警告。在聚类中,通常没有一个“正确答案”——一个聚类可能在一个指标上优于另一个聚类,而使用另一个指标则可能相反。在某些情况下,两个不同的聚类在相同的度量下可能同样可能。
话虽如此,您可能想看看Dirichlet Processes。另请参阅本教程。
如果您从高斯混合模型开始,您会遇到与 k-means 相同的问题 - 您必须选择集群的数量。您可以使用模型证据,但在这种情况下它不会是可靠的。因此,诀窍是在混合分量之前使用狄利克雷过程,这样您就可以拥有可能无限数量的混合分量,但是模型(通常)会自动找到“正确”数量的分量(在假设该模型)。
请注意,您仍然必须事先指定狄利克雷过程的浓度参数。对于较小的值,来自 DP 的样本可能由少量具有较大权重的原子度量组成。对于较大的值,大多数样本可能是不同的(集中的)。您可以在浓度参数上使用超先验,然后从数据中推断其值,并且该超先验可以适当地模糊以允许许多不同的可能值。然而,如果有足够的数据,浓度参数将不再那么重要,并且可以放弃这个超先验。
我使用肘部方法:
基本原理是,在此之后,您增加了集群的数量,但新集群非常接近现有的一些集群。
集群大小很大程度上取决于您的数据以及您将使用结果的目的。如果您使用数据将事物分成类别,请尝试先想象您想要多少类别。如果是为了数据可视化,让它可配置,这样人们就可以看到大集群和小集群。
如果您需要自动化它,您可能想增加 k 的惩罚,并以这种方式计算最佳集群。然后你只需根据你想要大量集群还是只想要很少的集群来加权 k。