機器學習_學習筆記系列(83):沃德階層分群法(Ward Hierarchical Clustering)

--

上一回我們介紹了Hierarchical Clustering,其是將我們原本單獨的數據,運用single-linkage、complete-linkage和average-linkage把他們群聚起來。

而對於上述這三種方法外還有另一種linkage的方式,其是基於Ward’s Method。

Ward Hierarchical Clustering

對於上述的Ward’s Method,其是也是相當的直觀,假使我們今天有兩個cluster,分別為C_1和C_2,我們的計算方式就是

其中u代表的就是C_1和C_2裡面所有資料的平均,而我們可以看到其做的事情就是,找中心點,然後計算所有屬於C_1 U C_2的資料到中心距離的總和。

而利用Ward’s Method的好處就是在有些情況他比single和complete的方法,更能夠全觀的考慮到整個cluster中的資料分布,相對average來說也能更有指標性的選擇適合的cluster。另外利用Ward’s Method,因為我們summation所有點到質心的距離,所以最後得到的cluster也會比較平均。

Note

其實對於Ward Hierarchical Clustering,Scipy有一套自己的Hierarchical Clustering函式庫,而實際上這麼龐大的運算量如果我們直接用python寫,會花非常多時間

所以許多的機器學習和資料科學套件,底層的矩陣運算、遞迴和樹狀演算法都是由C或C++來實現一些效能上的優化。

不過其實對於這方面,就有人發明了所謂的「Cython」,其功能就是使用者可以不用在更改太多python語法的情況下撰寫C/C++,也就是說當我們用Cython寫code的時候,他會把他轉為C/C++的形式以GCC complier編譯,而且他可以在notebook裡面直接編譯、執行,節省了許多建置環境的步驟。

圖片來自wikipedia:Cython

像知名的機器學習套件Sci-kit Learn對於一些樹資料結構的建立和搜尋演算法就使用了Cython撰寫。

Example

接下來我們以MNIST手寫辨識資料集來看其效能

我們可以看到對於使用ward演算法其相較於single、complete和average更接近原始數據分布。

Python Sample Code:

Github:

Reference:

[1] Ward Jr, J. H. (1963). Hierarchical grouping to optimize an objective function. Journal of the American statistical association, 58(301), 236–244.

--

--

劉智皓 (Chih-Hao Liu)
劉智皓 (Chih-Hao Liu)

Written by 劉智皓 (Chih-Hao Liu)

豬屎屋AI RD,熱愛AI研究、LLM/SD模型、RAG應用、CUDA/HIP加速運算、訓練推論加速,同時也是5G技術愛好者,研讀過3GPP/ETSI/O-RAN Spec和O-RAN/ONAP/OAI開源軟體。

No responses yet