我正在进行一个涉及使用K-means模型进行异常检测的项目。
然而,为了获得几乎精确的结果,我需要找到最佳的K值。
我的算法基于这样一个理念:模型中的异常值通常会被单独分配到一个聚类中。通常“正常”的数据会与其他正常数据聚集在一起,而异常数据会形成自己的聚类,从而指示出异常。然而,我需要找到最佳的K值,使我的算法能够正常工作,并判断其效果是否良好。
关于如何找到一个好的K值,有什么建议吗?
这是一个包含“正常”虚拟数据的样本文件,我将用它来训练我的模型:
Name Size RecordsFile1 1013 105727File2 990 104230File3 1520 110542File4 2198 115369File5 2026 113430File6 1844 112105File7 1216 108159File8 1520 110408File9 1013 105359File10 1317 108428File11 1925 112553File12 1449 109456File13 1803 111436File14 2036 115937File15 2043 116383
回答:
使用K-means的层次版本。Apache Spark有BisectingKMeans,它以这种方式工作。它根据你拥有的记录数量计算一个好的K值。这样,你在创建模型时就不需要定义K(聚类)。如果你对它分配的K值不满意,你仍然可以设置一个K值,但通常它运作得很好。
感谢@【隐藏人名】的建议。