聚类算法 距离矩阵_快速且不需要超参的无监督聚类方法
論文: Ef?cient Parameter-free Clustering Using First Neighbor Relations
Efficient Parameter-free Clustering Using First Neighbor Relations?arxiv.org代碼:
https://github.com/ssarfraz/FINCH-Clustering?github.com此文是CVPR2019的oral文章。兩個字評價:快!好!
方法
本文提出了一種parameter-free,并且效果卓越,效率奇高的無監督聚類方法。聚類的方法非常簡單,簡單到一個公式就可以說清聚類的方法:
其中
代表第 個點的最近鄰點。 是數據的鄰接矩陣。觀察上述鄰接的計算方式可以發現,只要在符合以下情況時,鄰接矩陣中的值為1:
- :對于第i個點來說,我的最近鄰就是第j個點
- :對于第i個點來說,我是第j個點的最近鄰
- :第i個點的最近鄰點和第j個點的最近鄰點相同
例子
----------------------------------------------------------------------------------
以太陽為例,解釋整個聚類的過程:
我們知道太陽系中各個行星的最近鄰(與當前行星距離最近的行星)關系如下:
根據這些行星的最近鄰情況,以及上述公式的計算方法可以得到鄰接矩陣:
以第一行為例(i=1, 即Mercury),
- 條件1: ,在第i個行星的最近鄰的處標上1;Mercury的最近鄰是Moon,其id為4,所以(1,4)為1
- 條件2: ,誰的最近鄰是我,那就在誰那兒標1,結果發現沒有行星的最近鄰是Mercury,所以不標1
- 條件3: ,誰的最近鄰和我的最近鄰一樣(即誰的最近鄰也是Moon),那就在誰那兒標1。發現Mars的最近鄰也是Moon,其id為5,所以在(1,5)處也標記為1.
根據上述的過程,最終得到的鄰接矩陣是個對稱矩陣。并且,根據這個鄰接矩陣可以得到如下一個有向圖:
通過這個圖可以明顯看出,所有的行星被分為了三個cluster。
上述三個步驟:
可以將數據進行第一次聚類,上面的例子中,此聚類算法一次就聚類得到了3個cluster。
接下來可以對每個圖結構重新進行特征計算,比如上面的三個cluster可以通過求均值的方式得到三個cluster center,這個三個center可以認為是三個樣本數據,然后重復上述的三個步驟,就可以對這三個cluster進行進一步的聚類。最終,所有的樣本都會被聚成一個cluster。
在這一步步聚類的過程中,不同的step可以得到不同的聚類中心個數,我們只要選取適合我們的聚類中心個數,并把那一步的聚類結果拿出來就可以了。
----------------------------------------------------------------------------------
總結
1、parameter-free:本文是一種parameter-free的無監督聚類方法,同時也是一種層級聚類方法(Hierarchical Clustering)。 在聚類的過程中不需要指定cluster數量。當然,作者也在文中給出了指定cluster數量的聚類方法,具體可以看論文中的描述。
假設一開始有共有10000個樣本,那么一開始認為有10000個cluster,在經過第一個聚類后,變成了2000個cluster,再一次聚類后變成了400個cluster,直到最后變成了一個cluster。而我們只需要根據聚類效果,選取某個cluster個數就可以了,比如聚類成400個cluster效果不錯,那我們就把這一步的聚類結果拿出來就可以了。
作者給出了一些數據集中cluster個數和聚類step的關系圖:
2、快速:本文的方法不需要計算所有sample之間的距離,只需要找到每個sample的最近鄰即可。而尋找最近鄰的方法有現成的快速的方法,比如(FLANN)等。下圖是一張聚類時間表,可以看出本文方法(FINCH)很有優勢。
總結
以上是生活随笔為你收集整理的聚类算法 距离矩阵_快速且不需要超参的无监督聚类方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ 3690 找星座(2D匹配)(未
- 下一篇: LeetCode 701. 二叉搜索树中