2017-06-20 43 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。 –