我还在研究如何评估使用聚类(无监督学习)形成的聚类?
我尝试过谷歌搜索,但得到的度量方法过于理论化。如果大家能分享他们用来评估所形成聚类的方法就太好了。比如说,我有一个 Java 聚类,其中包含 Java EE、Java ME、RMI、JVM 等,另一个聚类是 NoSQL,其中包含 Neo4j、OrientDB、CouchDB 等。这非常完美,我的聚类算法已经为我提供了最准确的聚类。
然而,在训练和测试后,我可能会在 NoSQL 聚类下得到 MySQL、Oracle 等,所以我只是进行手动/视觉解释,然后重新训练我的算法或对其进行调整,以便获得更好的聚类效果。
现在我想自动化这个手动可视化聚类的过程,并拥有一个系统来提供所形成聚类的准确性。我正在寻找类似于搜索中使用的精确度、召回率、NDCG、Map 等的东西。我的聚类长度各不相同,并且可以形成 n 个不同的聚类,所以精确度/召回率可能不是合适的选择。
回答:
我在进行一个关于聚类的项目,目前也有同样的问题。
我现在使用的是JavaML库,该库内置了多种聚类算法(我使用的是 K-means),并且该库还提供了多种评估这些算法的功能。
我用来评估聚类“质量”的函数是每个聚类元素的平方误差之和。为了不那么数学化地解释这种评估方法,基本上平方误差之和总结了每个聚类中每个元素到其各自聚类中心的距离(在 K-means 的情况下)。这并不是您喜欢的完美和理想的评估方法,可能比视觉比较更好(我也有同样的问题),但至少这是一种正式的方式来识别“您的聚类有多好”。它成本低、速度快,并且可以为您提供聚类的总体视图。
您可能还想查看“聚类标记”问题。这不是一个简单的问题,但它试图解决同样的问题。
我认为您问题的正确答案取决于您使用的聚类算法,并且需要理解一些数学理论,因为这不是一个简单的主题 🙂
祝您好运!