我已經在Java中實現了K-Means,並且有一些頭部劃痕。我通過在數據點的值範圍內的每個維度中選擇一個隨機值來選擇我的初始質心。我遇到過這種情況,其結果是這些質心中的一個或多個質心不會成爲任何數據點的最接近質心。那麼我爲下一次迭代做什麼?把它留在原來的隨機值?選擇一個新的隨機值?計算其他質心的平均值?似乎這不算在原始算法中,但可能我錯過了一些東西。當KMeans返回少於K個羣集時該怎麼辦?
1
A
回答
1
k-means的大多數實現使用實際數據點來定義初始質心,而不是由變量繪製的邊界框中的隨機點。但是,下面是解決您的實際問題的一些建議。
您可以隨機取另一個數據點並將其設置爲新的羣集質心。這非常簡單且快速實施,不應該對算法產生不利影響。
您也可以嘗試使用kmeans++更聰明地初步選擇集羣質心。該算法隨機選擇第一個質心,並挑選剩餘的K-1質心來嘗試並最大化質心間距離。通過選擇更智能的質心,您不太可能遇到質心被分配零數據點的問題。
如果您希望稍微聰明一些,可以使用kmeans ++算法在質心獲取零數據點時創建一個新的質心。
1
我用它的方式,初始值是從數據集中的隨機點,而不是跨越空間的隨機點。這意味着每個集羣最初至少有一個點。你仍然可能會因爲離羣值而感到不幸,但是如果運氣好的話,你將能夠檢測到這一點並以不同的點重新開始。 (提供「K個點的集羣」是對您的數據的充分描述)
1
而不是挑選隨機值(如果可能值的空間與羣集相比可能很大,那麼這些值可能非常沒有意義),但許多實現選擇random 點作爲初始質心。
相關問題
- 1. 缺少基礎SDK時該怎麼辦?
- 2. 當Cassandra集羣中的節點達到極限時該怎麼辦?
- 3. 當inptr == NULL時我該怎麼辦?
- 4. kmeans集羣中的集羣錯誤數
- 5. NewGlobalRef返回NULL時怎麼辦?
- 6. 當api返回html或json的不同錯誤時該怎麼辦
- 7. 當數據變得太大以至於web.config時該怎麼辦
- 8. 使用Contract.Assert(true)時該怎麼辦,該方法必須返回什麼?
- 9. 當程序在程序集大於512字節時怎麼辦
- 10. 如果call_user_func應該返回false,該怎麼辦?
- 11. 當一個類型包含它自己時該怎麼辦?
- 12. 當一個參數不起作用時該怎麼辦?
- 13. 當re.findall找不到該模式時該怎麼辦
- 14. 我該怎麼辦?
- 15. NullPointerException - 該怎麼辦?
- 16. 當承諾中沒有什麼可以回報時該怎麼辦?
- 17. getMap()不適用於SupportFragmentManager(),該怎麼辦?
- 18. SplObjectStorage不適用於String,該怎麼辦?
- 19. 當我只是獲取行集羣時,如何優化K意味着集羣?
- 20. 如果beautifulsoups調用返回null,該怎麼辦?
- 21. 如果目標網址未返回,該怎麼辦
- 22. 如果我的navigationController返回「(null)」,我該怎麼辦?
- 23. Mahout上的K-means返回非獨佔集羣
- 24. A ParameterizedThreadStart問題:如果一個方法返回一個對象,該怎麼辦?
- 25. Heroku下降時該怎麼辦?
- 26. Symfony2手動部署時該怎麼辦?
- 27. rubygems.org關閉時該怎麼辦?
- 28. RemotingConfiguration.Configure失敗時該怎麼辦?
- 29. sys.stdout.encoding爲None時該怎麼辦?
- 30. 卸載rubygems-update時該怎麼辦?