2016-08-05 69 views
0

我正在嘗試使用MiniBatchKMeans將NLP數據進行流式處理並對其進行羣集處理,但無法確定需要多少個羣集。我想要做的是定期拍攝輪廓分數,如果它低於某個閾值,則增加質心的數量。但據我所知,n_clusters在初始化羣集器時設置,不能在不重新啓動的情況下進行更改。我錯了嗎?有沒有解決這個問題的另一種方法可以避免這個問題?在擬合過程中是否可以增加KMeans中的質心數?

+2

儘管事實證明,k-means是啓發式的,我敢肯定,運行期間聚類數量的變化會對交替最小化類型的算法產生極其負面的影響(你會陷入由於現在已經過時的參數,因此只有當地的最小值並且只有那裏)。至少,這是我的想法!只需對n_cluster的不同值進行優化並比較你的分數(如果你信任它們的話)。 k-means應該足夠快來做這種驗證策略。這種方法會更穩定! – sascha

回答

2

在優化過程中這樣做並不是一個好主意,因爲它會大大改變優化過程。它將基本上重置整個優化。有一些策略,比如平分k-均值,試圖在聚類過程中學習k的值,但它們比將k增加1更棘手 - 他們決定要分割一個特定的聚類,並嘗試選擇好的初始質心這個集羣保持一定的穩定性。

此外,增加k並不一定會改善Silhouette。它會平均改善SSQ,所以你也不能用SSQ作爲選擇k的啓發。

最後但並非最不重要的是,計算Silhouette是O(n^2)。經常運行太昂貴了。如果您有足夠大的數據量來要求MiniBatchKMeans(其中確實是僅用於海量數據),那麼您顯然不能計算出Silhouette。

+0

好的,謝謝,我不知道,它大於50GB的元數據,所以是的,它很大 –

+0

然後讓我給你一個重要的建議:**先使用樣本**,測試你的方法。只對您的完整數據進行縮放*。因爲根據我的經驗,k-means會令你失望(請讓我知道它是否給你帶來了好的結果!) - 我一直在考慮做一些關於k-means的工作(並且我有一些很好的想法),但是它在我的問題上從未效果良好。 –

+0

我在樣本上使用過它,它工作得很好 –

相關問題