Answers:
要求您预先指定群集数量的群集算法是少数。有很多算法没有。他们很难总结。这有点像要求描述不是猫的任何生物。
聚类算法通常分为以下几种:
可能会有其他类别,人们可能会不同意这些类别以及哪些算法属于哪个类别,因为这是启发式的。但是,类似这种方案很常见。从这一点出发,主要是只有分区方法(1)才需要预先指定要查找的群集数量。同样需要预先指定哪些其他信息(例如,每个聚类的点数)以及将各种算法称为“非参数”是否合理,这也是高度可变且难以总结的。
分层聚类不需要您预先指定聚类的数量(k均值的方式),但是您确实需要从输出中选择多个聚类。另一方面,DBSCAN既不需要(但是它确实要求指定“邻域”的最小点数-尽管有默认值,所以从某种意义上讲,您可以跳过指定该点),这确实为集群中模式的数量)。GMM甚至不需要这三个中的任何一个,但是确实需要有关数据生成过程的参数假设。据我所知,没有一种群集算法永远不需要您指定群集数量,每个群集最少的数据或群集内数据的任何模式/排列。我不知道怎么可能。
它可能会帮助您阅读不同类型的聚类算法的概述。以下可能是一个开始的地方:
Mclust
用途旨在优化BIC,但可以使用AIC或一系列似然比测试。我猜您可以称其为元算法,它具有组成步骤(例如EM),但这是您使用的算法,无论如何它都不要求您预先指定k。您可以在链接的示例中清楚地看到,我没有在此处预先指定k。
最简单的示例是层次聚类,您可以使用某个距离度量将每个点彼此比较,然后将距离最小的对连接在一起以创建连接的伪点(例如,b和c使bc像图像上一样)下面)。接下来,通过将点和伪点基于它们的成对距离进行连接来重复该过程,直到每个点与图形连接为止。
(来源:https : //en.wikipedia.org/wiki/Hierarchical_clustering)
该过程是非参数过程,唯一需要的是距离测量。最后,您需要确定如何修剪使用此过程创建的树图,因此需要做出有关预期簇数的决定。
“无参数”方法意味着您只能获得一张照片(可能是随机性除外),并且无法进行定制。
现在,聚类是一种探索技术。您不能假定只有一个“ true”集群。您应该对探索同一数据的不同聚类感兴趣,以了解更多信息。将群集视为黑匣子永远无法正常工作。
例如,您希望能够根据数据自定义使用的距离函数(这也是一个参数!)如果结果太粗糙,则希望获得更好的结果,或者结果太精细,得到它的粗略版本。
最好的方法通常是那些可以让您很好地导航结果的方法,例如层次聚类中的树状图。然后,您可以轻松地探索子结构。
查看Dirichlet混合模型。如果您事先不知道集群的数量,它们将提供一种很好的方式来理解数据。但是,它们确实对数据可能违反的簇的形状进行了假设。