我有浮標一個這樣的數組:分割一個浮動數組相似片段(聚類)
[1.91, 2.87, 3.61, 10.91, 11.91, 12.82, 100.73, 100.71, 101.89, 200]
現在,我想到陣列這樣劃分:
[[1.91, 2.87, 3.61] , [10.91, 11.91, 12.82] , [100.73, 100.71, 101.89] , [200]]
// [ 200]將被視爲異常值,因爲較少集羣支持
我必須爲幾個數組找到這種類型的段,我不知道分區大小應該是多少。我試圖通過使用hierarchical clustering (Agglomerative)來完成,它給我帶來滿意的結果。然而,問題是,我被建議不要使用聚類算法來處理一維問題,因爲它們沒有理論上的理由(因爲它們是用於多維數據)來做到這一點。
我花了很多時間找到解決方案。然而,建議似乎很不一樣,如:this和this VS. this和this和this。
我發現了另一個建議,而不是聚類,即natural breaks optimization。但是,這也需要像K-means(右?)那樣聲明分區號。
這很令人困惑(特別是因爲我必須在幾個陣列上執行這種分割,所以不可能知道最佳分割數)。
是否有任何方法可以找到分區(因此我們可以通過一些理論上的理由來減少分區內的方差並最大化分區之間的差異)?
任何指向文章/論文的指針(如果可用的C/C++/Java實現)和一些理論上的理由將對我非常有用。
我很好奇,爲什麼羣集不適合一個維數據 - 如果你以某種方式增加維例如,添加sqrt(n)作爲維度,有點像SVM中發生的情況? –
@ZiyaoWei,「爲什麼聚類不適合一維數據」 - 我真的不知道。我在課堂上被告知,在1-d數據中使用聚類是瘋狂的。但是,我發現沒有文章說明爲什麼我不能(或可以)。 – alessandro
@ZiyaoWei沒有理由增加尺寸似乎不是一個好的解決方案。 – alessandro