我已经运行了 clv 包,它由 S_Dbw 和 SD 有效性索引组成,用于在 R 指挥官中进行聚类。(http://cran.r-project.org/web/packages/clv/index.html)
我使用 S_Dbw 索引评估了 DBSCAN、K-Means、Kohonen 算法的聚类结果。但是对于所有这三种算法,S_Dbw 都是“Inf”。
是“无限”的意思吗?为什么我要面对“Inf”。我的聚类结果有问题吗?
一般来说,S_Dbw 索引结果是什么时候“Inf”?
我已经运行了 clv 包,它由 S_Dbw 和 SD 有效性索引组成,用于在 R 指挥官中进行聚类。(http://cran.r-project.org/web/packages/clv/index.html)
我使用 S_Dbw 索引评估了 DBSCAN、K-Means、Kohonen 算法的聚类结果。但是对于所有这三种算法,S_Dbw 都是“Inf”。
是“无限”的意思吗?为什么我要面对“Inf”。我的聚类结果有问题吗?
一般来说,S_Dbw 索引结果是什么时候“Inf”?
将不同算法与此类索引进行比较时要小心。
原因是索引本身几乎就是一种算法。对于每个索引,一个特定的聚类必然是“最好的”。索引和实际聚类算法之间的主要区别在于索引不会告诉您如何找到“最佳”解决方案。
一些例子:k-means 最小化从集群成员到集群中心的距离。单链路层次聚类将找到分区之间具有最佳最小距离的分区。好吧,DBSCAN 会找到数据集的分区,其中所有密度连接的点都在同一个分区中。因此,DBSCAN 是最佳的 - 如果您使用适当的措施。
严重地。不要假设因为一种算法在特定度量中的得分高于另一种算法就意味着该算法工作得更好。您通过这种方式发现的所有内容是特定算法与特定度量更(相关)相关。在概念层面上,将其视为度量和算法之间的一种相关性。
使用度量来比较同一算法的不同结果是不同的。那么显然,一种算法不应该比它本身带来好处。在参数方面可能仍然存在类似的效果。例如,当您增加 k 时,k-means 中的簇内距离显然应该下降。
事实上,许多衡量标准甚至在 DBSCAN 结果上都没有明确定义。因为 DBSCAN 有噪声点的概念,而索引没有AFAIK。
不要假设该措施会告诉您什么是“正确的”或“正确的”。更不用说什么是有用的或新的。因为您不应该使用聚类分析来找到特定度量的数学最优值,而是要了解有关您的数据的新的和有用的东西。这可能不是一些度量值。
回到指数。它们通常完全围绕 k-means 设计。从对 S_Dbw 的简短了解中,我的印象是一个“集群”由一个单一的对象(例如 DBSCAN 中的噪声对象),该值将变为无穷大 - 即:未定义。似乎该索引的作者没有考虑这种极端情况,而只是在没有出现这种情况的玩具数据集上使用它。R 实现无法解决此问题,除非从原始索引转移,而是将其转换为另一个索引。处理噪声对象和单例对象绝非易事。我还没有看到一个不会以某种方式失败的索引——通常,诸如“所有对象都是噪声”之类的解决方案要么得分完美,要么通过将每个噪声对象放在最近的位置来轻松改进每个聚类非单例集群。如果您希望您的算法能够说“这个对象不属于任何集群”,那么我不知道任何合适的索引。
IEEE 浮点标准将Inf
和-Inf
分别定义为正无穷和负无穷。这意味着您的结果太大而无法以给定的位数表示。