簡介
首先必須明確,分類和聚類是兩個不同的東西。
分類的目的是確認數(shù)據(jù)屬于哪個類別活合。分類必須有明確的邊界胧谈,或者說分類是有標準答案的。通過對已知分類數(shù)據(jù)進行訓(xùn)練和學習室梅,找出已知分類特征戏仓,再對未知分類的數(shù)據(jù)進行分類。因此分類通常是有監(jiān)督學習亡鼠。
聚類的目的是找出數(shù)據(jù)間的相似之處赏殃。聚類對邊界的要求不是很高,是開放性命題拆宛。聚類只使用無標簽數(shù)據(jù)嗓奢,通過聚類分析將數(shù)據(jù)聚合成幾個,因此采用無監(jiān)督學習算法浑厚。
現(xiàn)在的做法是先用無監(jiān)督聚類對數(shù)據(jù)進行聚類股耽,把聚類效果結(jié)合實際進行評估,然后小部分數(shù)據(jù)進行標注钳幅,送到分類器分類物蝙,這也就是半監(jiān)督學習。
有監(jiān)督分類學習算法在學術(shù)界已經(jīng)有非常詳盡的理論化的評價指標敢艰,例如正確率诬乞,召回率,精準率,ROC曲線震嫉,AUC曲線森瘪。但是關(guān)于無監(jiān)督學習的聚類評價指標在教材上尚無統(tǒng)一表述。根據(jù) Sk-learn 官方文檔結(jié)合現(xiàn)有資料做一個總結(jié)票堵。需要說明的是沒有哪一種指標是萬能的扼睬,正如沒有哪一種聚類算法是萬金油.
聚類效果的衡量指標分為兩大類,一類是外部信息評價悴势,一類是內(nèi)部信息評價窗宇。
評價聚類效果的好壞,才能確定聚類能否被應(yīng)用到實際中做進一步處理特纤。度量聚類結(jié)果的好壞不是簡單地統(tǒng)計錯誤的數(shù)量军俊,比如極端情況下,聚類算法把要分類的每一個文檔都劃分為一個類捧存,那么錯誤數(shù)量為零粪躬,能代表這個聚類算法是最優(yōu)的嗎?這里的統(tǒng)計錯誤數(shù)量實際上就是去分析外部信息矗蕊,靠人去判斷樣本是不是劃分類準確短蜕,但是數(shù)據(jù)量增大了,比如增大到 10w+ 篇文章還能靠人去逐個判斷嗎傻咖?
外部信息指標
除了上面的準確率外朋魔,筆者另外選出比較容易操作的幾個指標。
假設(shè)數(shù)據(jù)已經(jīng)標注完畢卿操,作為參考簇C警检,算法聚類形成簇D,樣本總數(shù)為 m害淤。下面以D作為Different的縮寫扇雕,S為Same的縮寫。那么窥摄,
a = 在C中為相同簇在D中為相同簇的樣本數(shù)量(SS)
b = 在C中為相同簇在D中為不同簇的樣本數(shù)量(SD)
c = 在C中為不同簇在D中為相同簇的樣本數(shù)量(DS)
d = 在C中為不同簇在D中為不同簇的樣本數(shù)量(DD)
調(diào)整后的 Rand 指數(shù)(Adjusted Rand Index镶奉,ARI)
這個指標用于測量標注的樣本(labels_true,C)與預(yù)測的樣本(labels_pred崭放,D)之間的相似度哨苛,忽略樣本的排列順序,標簽的命名對結(jié)果無影響币砂,同時由于該指標是對稱的建峭,交換參數(shù)不影響得分。
數(shù)學表示
>>> from sklearn import metrics
>>> labels_true = [0, 0, 0, 1, 1, 1]
>>> labels_pred = [0, 0, 1, 1, 2, 2]
>>> metrics.adjusted_rand_score(labels_true, labels_pred)
0.24242424242424246
# Exchange Position
>>> labels_pred = [0, 1, 0, 1, 2, 2]
>>> metrics.adjusted_rand_score(labels_true, labels_pred)
0.24242424242424246
# Alter Tag Name
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.adjusted_rand_score(labels_true, labels_pred)
0.24242424242424246
# Exchange Parameter Position
metrics.adjusted_rand_score(labels_pred, labels_true)
0.24242424242424246
優(yōu)點:
- 范圍有界决摧,[-1, 1]亿蒸,值越大聚類效果越好凑兰。
- 隨機標簽獲得接近 0 的值。
- 對簇的結(jié)果不需要做任何假設(shè)边锁。
缺點:
- 實際操作中大數(shù)據(jù)量基本不可用姑食,需要人工標注。
Fowlkes-Mallows 指數(shù)(Fowlkes-Mallows index砚蓬,F(xiàn)MI)
這個指標被定義為成對的準確率(pairwise precision )與召回率(recall)的幾何平均值
數(shù)學表示
如果用前面假設(shè)的字母表示矢门,則表示為
再說明一次,a就是SS灰蛙,b就是SD,c就是DS隔躲,d就是DD摩梧。FMI 與 ARI 一樣忽略樣本的排列順序,標簽的命名對結(jié)果無影響宣旱。
>>> from sklearn import metrics
>>> labels_true = [0, 0, 0, 1, 1, 1]
>>> labels_pred = [0, 0, 1, 1, 2, 2]
>>> metrics.fowlkes_mallows_score(labels_true, labels_pred)
0.47140...
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.fowlkes_mallows_score(labels_true, labels_pred)
0.47140...
優(yōu)點與缺點和 ARI 基本一致仅父,不過 FMI 的范圍是 0 到 1。
Jaccard 指數(shù)
這個指標用于量化兩個數(shù)據(jù)集之間的相似性浑吟,1表示兩個數(shù)據(jù)集是相同的笙纤,0則表示二者沒有共同的元素。
數(shù)學表示
按前面的假設(shè)组力,也可以是
>>> labels_true = [0, 0, 0, 1, 1, 1]
>>> labels_pred = [0, 0, 1, 1, 2, 2]
>>> metrics.jaccard_similarity_score(labels_pred, labels_true)
0.5
內(nèi)部信息指標
上面外部信息評價指標的缺點均為人工標注在大規(guī)模數(shù)據(jù)下不可行省容,因此,我們需要借助其他的數(shù)字指標燎字,來分析聚類的內(nèi)部信息腥椒。聚類是為了讓同一個簇內(nèi)樣本盡可能的近,不同簇的樣本盡可能遠(類內(nèi)高聚合候衍、類間低耦合)笼蛛。理想情況下,我們希望每個簇只包含一個類的成員(也就是所謂的同質(zhì)性(homogeneity))蛉鹿,給定類的所有成員都分配給同一個簇(也就是所謂的完整性(completeness))滨砍。
從上面的表述中,在沒有已標注數(shù)據(jù)的情況下妖异,需要尋找能表達聚類緊湊度和分離度的內(nèi)部信息指標惋戏。
輪廓系數(shù)(Silhouette Coefficient )
輪廓系數(shù)由兩個得分組成,一是樣本與同一個簇中其他點之間的平均距離(記為a)随闺。二是樣本與下一個距離最近的簇中其他點的平均距離(記為b)日川,根據(jù)公式計算出單個樣本的輪廓系數(shù),然后計算整組的輪廓系數(shù)平均值矩乐。
數(shù)學表示
優(yōu)點
簇緊湊且分離度高時分數(shù)更高龄句。
缺點
凸簇比其他類型的簇分數(shù)更高回论。比如基于密度的 DBSCAN 算法在這種情況下表現(xiàn)更好。
這里的凸簇如果降維到一定程度分歇,會接近于凸集傀蓉。根據(jù)定義,對于集合內(nèi)的每一對點职抡,連接該對點的直線段上的每個點也在該集合內(nèi)葬燎。凸集的邊界總是凸曲線。
Calinski-Harabaz 指數(shù)
此指標又被稱為方差比標準(Variance Ratio Criterion)缚甩,定義為簇內(nèi)色散平均值(dispersion谱净,量化一組事件是聚類還是分散的度量)與簇間色散的比值。
數(shù)學表示
其中擅威,k表示聚類的數(shù)目壕探,N為數(shù)據(jù)的點數(shù),Tr(Bk)為簇內(nèi)色散矩陣的跡郊丛,Tr(Wk)為簇間色散矩陣的跡李请。Cq為簇q的點集,cq為簇q的中心店厉熟,nq為簇q的點數(shù)导盅。
優(yōu)點
簇緊湊且分離度高時分數(shù)更高。
缺點
凸簇比其他類型的簇分數(shù)更高揍瑟。比如基于密度的 DBSCAN 算法在這種情況下表現(xiàn)更好白翻。
除了上述指標外,在分析聚類算法效果優(yōu)劣時月培,還要討論算法處理噪聲的能力嘁字,對數(shù)據(jù)維度是否敏感,對數(shù)據(jù)密度是否有要求等杉畜。