在 K-Means 算法 (Apache Spark) 中找到 K 的完美值

Find the perfect value for K in K-Means Algorithm (Apache Spark)

我正在从事一个涉及使用 K-means 模型进行异常检测的项目。

但是,为了获得几乎精确的结果,我需要找到 K 的最佳值。

我的算法依赖于我的模型中的异常值通常会自行放置在一个集群上的想法。通常 "normal" 数据会与其他正常数据聚类在一起,但异常数据会形成自己的聚类,因此表示存在异常。但是,我需要为我的算法找到 K 的最佳值,看看它是否好。

关于如何找到好的 K 值有什么想法吗?

这是一个包含 "normal" 虚拟数据的示例文件,我将使用这些虚拟数据来训练我的模型:

Name    Size    Records
File1   1013    105727
File2   990     104230
File3   1520    110542
File4   2198    115369
File5   2026    113430
File6   1844    112105
File7   1216    108159
File8   1520    110408
File9   1013    105359
File10  1317    108428
File11  1925    112553
File12  1449    109456
File13  1803    111436
File14  2036    115937
File15  2043    116383

使用分层版本的 K-means。 Apache Spark 具有以这种方式工作的 BisectingKMeans。它根据您拥有的记录数量计算出合适的 K 值。这样您就不必在创建模型时定义 K(集群)。如果您对它分配的值不满意,您仍然可以设置一个 K 值,但它通常工作得很好。

感谢@Peheje 的提示。