2017-06-20 91 views
-2

我正在研究一个涉及使用K均值模型进行异常检测的项目。在K-Means算法(Apache Spark)中查找K的完美值

但是,要获得精确的几乎和精确的结果,我需要找到K.

我的算法依赖于在我的模型的异常值一般由自己放置在群集上的想法的最佳值。通常,“正常”数据将与其他正常数据聚集在一起,但异常数据会形成它们自己的聚类,因此表明存在异常。但是,我需要找到K的最佳值,以便我的算法能够正常工作,并查看它是否合适。

关于如何找到一个好的K值的任何想法?

这是“正常的”虚拟数据的样本文件,我会用训练我的模型:

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 
+1

您是否考虑过使用其他聚类方法,如分层聚类?它可以帮助你选择K,如果你没有一个具有“真实”群集的测试集。 – Peheje

+0

那是怎么回事?我刚刚浏览了Apache的Spark文档,他们确实支持分层聚类(平分K均值),但是有什么区别,它如何帮助我找到K而不是普通的K均值? – SVCS1994

+0

有用于spark的dbscan的实现。这一个似乎非常适合你的任务。如果你想找到最优的k,你可能需要使用非参数贝叶斯方法。例如,中国餐馆过程。会在颈部疼痛。 – CAFEBABE

回答

0

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

感谢@Peheje提示。

+0

平分K-means不会给你K的最佳值。它默认为4。 –