我有以下這個方案的增量聚類算法:增量層次結構
Let x a new data-point, and c the centroid that is closest from x
if(distance(x, c) > threshold)
x becomes a new cluster center (i.e. a new centroid)
else assign x to c (i.e. update the centroid by taking x)
爲了加快從X最接近中心的搜索,我想有中心的分層結構(使用一棵樹),我們可以在每次考慮一個新的數據點時增量更新。
樹的每個內部節點都表示爲該節點下的質心的平均值。當更新一個給定的質心(因爲一個新的數據點被分配給這個質心),我們應該重建所有高於這個質心的節點。
這樣的算法變成類似:
Let x a new data-point
c = searchClosestCenter(x, tree) // return the centroid closest to x
if(distance(x, c) > threshold)
x becomes a new cluster center (i.e. a new centroid)
AddCenterToTree(x, tree)
else
assign x to c (i.e. update the centroid by taking x)
UpdateTree(c) // update all nodes that are on top of c
怎麼可以這樣的功能在這種情況下如何界定?有沒有更好的解決方案?
好吧,但R樹增量(即允許我添加/更新/刪除葉子,而不重建整個層次結構)?目前還不清楚如何在我的案例中使用它(請參閱我的第二個算法描述),我已經在C++中找到了一個實現(這對我來說很方便),但是看看我需要調用哪些函數並不簡單,根據我的算法。 – shn
這是我發現在單個頭文件RTree.h中實現的C++實現:http://superliminal.com/sources/RTreeTemplate.zip – shn
是的,R-tree是一種自我平衡樹,專爲變化而設計。 –