如何评估聚类?

Posted

技术标签:

【中文标题】如何评估聚类?【英文标题】:How do I evaluate Clustering? 【发布时间】:2012-02-24 21:48:09 【问题描述】:

我还在研究评估使用聚类(无监督学习)形成的聚类吗?

我试过谷歌搜索,但我得到的衡量标准太理论化了。如果人们可以分享他们用来评估所形成集群的机制,那就太好了。假设我有一个 Java 集群,它将包含 Java EE、Java ME、RMI、JVM 等,另一个集群说 NoSQL,它将有 Neo4j、OrientDB、CouchDB 等。这是完美的,我的集群算法给了我最多准确的集群。

但是在训练和测试之后,我可能会说 mysql、Oracle 在 NoSQL 集群下,所以我只是做一个手动/视觉解释,然后重新训练我的算法或调整它,以便我获得更好的集群。

现在我想自动化这个手动可视化集群的过程,并拥有一个系统,可以让我获得所形成集群的准确性。我正在寻找与搜索中使用的 Precision、Recall、NDCG、Map 等类似的东西。我的集群长度不同,并且可以形成 n 个不同的集群,因此精度/召回率不是正确的。

【问题讨论】:

【参考方案1】:

通常将聚类用作无监督和半监督学习算法。由于您提到“但是在训练和测试之后,我可能会说 MySQL,......”我假设您正在为您的应用程序使用半监督聚类算法。

您可以增加输入特征的数量(或者可能在增加输入特征数量的同时做几个实验)看看您的系统的准确性如何随时间变化。特征向量的大小。

此外,您可以评估不同的聚类算法并选择具有最佳预测精度的最佳算法。

【讨论】:

谢谢 Upul。实际上,我正在研究无监督学习,因为最初没有固定的集群并且我有非结构化文本。我已经选择了一个聚类算法。但是,我想针对它产生的集群评估相同的聚类算法。举个例子,说我得到了集群,那么什么指标可以用来评估集群,它可以给我一个百分比,比如集群准确度是 70%。然后我可以工作并重新训练我的相同算法以获得更高的准确性。【参考方案2】:

我正在做一个集群项目,到目前为止我也有同样的问题。

现在我正在使用 JavaML 库,它内置了几个聚类算法(在我的例子中,我使用的是 K-means),并且这个库还有几个函数来评估这个算法。

我用来评估集群“质量”的函数是每个集群元素的平方误差之和。为了不从数学上解释这种评估方法,基本上平方误差之和总结了每个簇的每个元素到它们各自簇质心的距离(在 K-means 的情况下)。这不是一个完美和理想的评估,因为您喜欢它可能比视觉比较更好(我有同样的问题),但至少是一种正式的方式来确定“你的集群有多好”。它便宜、快速,可以让您大致了解集群。

您可能还想检查“Cluster labeling”问题。这不是微不足道的,但它打算解决同样的问题。

我认为您问题的正确答案取决于您使用的聚类算法并理解这里的一些数学理论,因为这不是一个简单的主题:)

祝你好运!

【讨论】:

希望对您有所帮助!我很期待知道这个项目是如何结束的

以上是关于如何评估聚类?的主要内容,如果未能解决你的问题,请参考以下文章

聚类算法的评估指标

聚类聚类算法(K均值层次聚类DBSCAN)的对比与评估

R 中聚类的训练和测试评估

聚类 高维聚类 聚类评估标准

K-Mean 聚类:评估新的聚类中心

监督聚类 - 评估每个真实标签的指标?