集成式學習(Ensemble Learning)是機器學習(Machine Learning)領域常見的技術,很多文章都討論如何集成監督式(Supervised)學習演算法,但是卻滿少文章提到集成非監督式(Unsupervised)學習演算法。施威銘研究室過去用了 8 篇文章,分別探討集成分群演算法的方法:Majority Vote、Iterative Voting Consensus、Iterative Probabilistic Voting Consensus、Iterative Pairwise Consensus,以及評量集成效果的指標:Symmetric Distance、Rand Distance、Variation of Information Distance、Compactness。今天,我們要來介紹如果分群(Clustering)問題中,資料含有標籤(Label),可以怎麼評估集成分群的效果。
一、準確率(Accuracy)
在討論準確率應用在分群演算法之前,我們先來看看監督式學習的狀況。監督式學習當中,常見的評價指標之一是準確率。這個方法其實就是評量模型預測正確的資料筆數,佔所有資料的比例為多少。我們現在來看一個範例:
很顯然這個模型的準確率為 70 %。
二、分群中的準確率
現在,我們要來應用準確率到分群演算法中。這裡馬上會遇到一個問題:分群演算法的結果中,子群的索引是隨意指定,所以我們沒辦法直接比較子群索引跟標籤。舉例來說,同樣都是標籤 A 的 2 筆資料,如果分群演算法將這 2 筆資料都放在子群 A,那我們會說這個分群演算法正確處理這 2 筆資料。但是,如果分群演算法把這 2 筆資料都放在子群 B,那這個分群演算法依然正確處理了這 2 筆資料,然而直接比較子群索引跟標籤卻會得到錯誤的結果。
為了解決這個問題,我們套用準確率到分群演算法時,需要對準確率的計算方法做一些修改:
這是什麼意思呢?其實很簡單,我們直接看想要加總的項目:
這個意思是,在某一個子群 Ck 當中,看看哪一個標籤出現最多次,該次數就是計算結果。接著,我們對每一個子群都做同樣的事情,全部加總起來。最後,除以總資料數,就是分群演算法中的準確率囉。
三、Python 程式
以下程式是計算分群的準確率,外面的迴圈,是要針對每一個子群找出哪個標籤最多;裡面的迴圈則是尋找出現最多的標籤。
def get_accuracy(y, p, n_clusters):
score = 0
L = np.zeros(n_clusters)
for i in range(n_clusters):
for j in range(n_clusters):
L[j] = sum([1 for k in range(len(y))
if ((y[k] == j)and(p[k] == i))])
score = score + max(L)
return score / len(y)
參考資料
Nguyen, Nam & Caruana, Rich. (2007). Consensus Clusterings. Proceedings — IEEE International Conference on Data Mining, ICDM. 607–612.
關於作者
Chia-Hao Li received the M.S. degree in computer science from Durham University, United Kingdom. He engages in computer algorithm, machine learning, and hardware/software codesign. He was former senior engineer in Mediatek, Taiwan. His currently research topic is the application of machine learning techniques for fault detection in the high-performance computing systems.