本文会谈谈解决该问题的两种流行方法:elbow method(肘子法)和 silhouette method。
在监督学习里,某特定数据集的类(class)的数量,在一开始就是知道的——每个数据实例,都被标记归属于某个类。最坏的情况下,我们还可以盘查类属性( class attribute),计算其中包含的独特元素。
但在无监督学习里,类属性或者明确的类成员划分是不存在的。想想也是,无监督学习的一个主要形式,就是数据聚类。它的目标是通过最小化不同类之间的实例相似度、最大化同个类中的实例相似度,来进行大致的类成员划分。
众所周知,聚类问题有一个很大的技术难题——不管是以什么形式,开发者需要在一开始,就给出无标记数据集中的类的数目。足够幸运的话,你或许事先就知道数据的 ground truth——类的真实数目。但情况并不会总是如此。譬如说,或许数据中不存在定义明确的类(簇)。而无监督学习本来的意义,便是探索数据,找出使簇、类得数目达到最优的结构。
这就回到了文章开头的问题:不知道 ground truth 的情况下,怎么才能知道数据簇的最优数目是多少?这方面,倒是已经林林总总有相当多的处理方法。本文会讨论其中应用极广泛的两种方法。第一种,是 Elbow Method。
Elbow Method
elbow method 是上手首选,由于能通过可视化便利地解释、验证,它的用处很大。它用关于簇数目的函数来解释方差(k-means 里的 k)。它会绘制出能被 k 解释的方差的比例。第一批的 N 个簇应当会为解释方差添加大量信息。但是,有些 k 最终值会导致少得多的信息增量。这时,数据图会有明显的角度。该角度就是簇的最优数量。
雷锋网提醒,有一点应该是不言而喻、无须解释的:为了按照不同的簇数量绘制方差,需要对不同数目的簇进行测试。在绘制、比较结果之后,必须要有该聚类方法的成功、完整地迭代。
Silhouette Method
Silhouette method 会衡量对象和所属簇之间的相似度——即内聚性(cohesion)。当把它与其他簇做比较,就称为分离性(separation)。该对比通过 silhouette 值来实现,后者在 [-1, 1] 范围内。Silhouette 值接近 1,说明对象与所属簇之间有密切联系;反之则接近 -1。若某模型中的一个数据簇,生成的基本是比较高的 silhouette 值,说明该模型是合适、可接受的。
====================================分割线================================ 本文作者:三川 本文转自雷锋网禁止二次转载, 原文链接 相关资源:七夕情人节表白HTML源码(两款)