【資料分析】python機器學習-判斷聚類算法好壞的常用內部指標

更新於 發佈於 閱讀時間約 1 分鐘
raw-image

判斷聚類成果的好壞並不像監督學習中的分類任務一樣可以直接依據預測的準確度,因為無監督學習中沒有標準的「正確答案」。然而,仍有一些常見的評估指標和方法可以用來衡量聚類的效果。這些方法主要包括內部指標(根據數據本身進行評估)和外部指標(當你有標籤數據可供參考時進行比較)。

內部指標是一種無需依賴標籤數據的聚類結果評估方法,這些指標依據數據本身的特徵和聚類結構來判斷聚類結果的質量。它們主要衡量兩個方面:群集內部的緊密度(凝聚性)群集之間的分離度。理想的聚類結果應該是同一群集內的數據點彼此接近,而不同群集之間的數據點應該相互遠離


# 可使用目錄功能快速確認要閱覽的主題


方法選擇參考

raw-image



輪廓係數(Silhouette Score)

輪廓係數(Silhouette Score)是一種綜合考慮了群集內凝聚性和群集間分離性的指標。它的範圍是 [-1, 1],值越大表示聚類效果越好。


運作邏輯

輪廓係數的計算基於兩個主要概念:

  1. 凝聚性(Cohesion):數據點與其所屬群集中的其他點的相似性,即點與群集中心的距離越小,凝聚性越高。
  2. 分離性(Separation):數據點與最近其他群集的距離,即點與不同群集的中心點距離越大,分離性越好。

對於每個數據點 i,定義:

  • a(i):數據點 i 與其所屬群集內其他點的平均距離,這衡量了點 i 與群集的凝聚性。
  • b(i):數據點 i 與最近的另一個群集內所有點的平均距離,這衡量了點 i 與其他群集的分離性。

輪廓係數的計算公式:

raw-image




  • 當 s(i) 越接近 1,表示數據點 i 與所屬群集非常接近,與其他群集分離得很好。
  • 當 s(i) 越接近 0,表示數據點位於兩個群集的邊界之間,難以明確分配。
  • 當 s(i) 為負數,表示數據點應該更接近另一個群集,聚類結果不理想。


程式碼範例

from sklearn.metrics import silhouette_score

# 計算輪廓係數
silhouette_avg = silhouette_score(X, labels)
print(f"Silhouette Score: {silhouette_avg}")


輪廓係數優點與缺點


優點

  • 綜合考慮了凝聚性和分離性:輪廓係數同時考慮群集內的數據點相似性(凝聚性)以及群集之間的距離(分離性),給出了一個全面的評估指標。
  • 適用於不同類型的聚類算法:輪廓係數可以用來評估多種聚類算法,如 K-means、DBSCAN、層次聚類等,適用範圍廣泛。
  • 範圍易於解讀:輪廓係數的值範圍為 [-1, 1],值越接近 1 表示效果越好,數據點的聚類結果越清晰,這使得指標易於解讀。
  • 無需標籤:輪廓係數是無需標籤的內部指標,適合無監督學習場景。

缺點

  • 計算複雜度較高:對於大數據集,輪廓係數的計算成本較高,因為它需要計算每個數據點與群集內外的距離,時間複雜度為 O(n2)。
  • 不適合密度差異大的群集:如果數據中存在密度差異較大的群集,輪廓係數可能會對低密度群集評估不準確,因為低密度群集內的點之間距離可能較大。



群集內距離平方和(Within-Cluster Sum of Squares, WCSS)

群集內距離平方和(WCSS)衡量每個數據點與其所屬群集中心之間的距離平方和。WCSS 是 K-means 聚類中的一個重要指標,用來衡量群集內部的凝聚性。


運作邏輯

WCSS 是所有數據點與其群集中心之間距離的平方和。其目標是最小化這個值,表示群集內部的數據點越緊密地分布在群集中心附近,群集越凝聚。

對於每個群集 Ck​

raw-image




其中:

  • K 是群集數量,
  • xi 是群集 Ck 中的數據點,
  • μk​ 是群集中心。


使用方法

  • WCSS 越小,表示群集內的凝聚性越強,即數據點彼此之間更接近。K-means 聚類的目標是最小化這個值。
  • 肘部法則(Elbow Method) 是基於 WCSS 的一種方法,用於選擇最佳的群集數量。在肘部法則中,當隨著群集數量 K 增加,WCSS 下降的速度明顯減緩時,這個「肘部」位置對應的 K 值通常是最佳的群集數。


程式碼範例(肘部法則)

import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# 迭代不同的群集數量 K,計算 WCSS
wcss = []
for k in range(1, 11):
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(X)
wcss.append(kmeans.inertia_) # WCSS 值存儲於 inertia_ 屬性中

# 畫出肘部法則圖
plt.plot(range(1, 11), wcss, marker='o')
plt.title('Elbow Method for Optimal K')
plt.xlabel('Number of Clusters')
plt.ylabel('WCSS')
plt.show()

當 WCSS 隨著群集數的增加而明顯減少,但在某一點之後減少的速度變慢,該點對應的群集數即為最佳選擇。


WCSS 優點與缺點


優點

  • 簡單易懂:WCSS 衡量每個數據點到其群集中心的距離平方和,指標簡單直觀,易於理解。
  • 適合 K-means 聚類:WCSS 是 K-means 聚類中最常用的內部評估指標,因為 K-means 的目標就是最小化群集內距離平方和。
  • 適合肘部法則來選擇最佳 K 值:WCSS 與肘部法則結合使用,可以幫助選擇 K-means 聚類中的最佳群集數量 K,具有很強的應用價值。

缺點

  • 不考慮群集之間的分離性:WCSS 僅衡量群集內數據點的凝聚性,不考慮不同群集之間的分離度,因此可能無法全面評估聚類質量。
  • 需要事先確定 K 值:WCSS 僅適合用於 K-means 聚類,且需要事先確定群集數量 K。如果群集數設定不合理,聚類效果可能不理想。
  • 對異常值敏感:由於 WCSS 依賴於數據點與群集中心的距離,因此它對異常值非常敏感,異常值會顯著增大 WCSS 值,從而影響評估結果。



Davies-Bouldin 指數

Davies-Bouldin 指數(DB 指數)是一種衡量群集內擴展度與群集間分離度的比率。DB 指數越小,表示群集之間的分離性較強,群集內部的緊密性較高,聚類效果越好。


運作邏輯

該指數考慮了群集內的擴展度和群集之間的距離。對於每一個群集 Ci​,計算其與其他群集 Cj​ 的相似性比率:

raw-image




  • σ(i) 是群集 i 的擴展度,定義為該群集內所有點到群集中心的平均距離。
  • d(i,j) 是群集 i 和群集 j 之間的距離,表示兩個群集的分離度。

Davies-Bouldin 指數是所有群集的平均相似性比率:

raw-image




其中 K 是群集數量。


使用方法

DB 指數用來評估群集內的緊密性和群集間的分離度,指數越小表示聚類效果越好。


程式碼範例

from sklearn.metrics import davies_bouldin_score

# 計算 Davies-Bouldin 指數
db_score = davies_bouldin_score(X, labels)
print(f"Davies-Bouldin Index: {db_score}")
  • DB 指數越小:表示群集內部更緊密,群集之間的分離度更大,聚類效果更好。
  • DB 指數可以用來比較不同聚類結果,從而選擇最佳的聚類模型。


Davies-Bouldin 優點與缺點


優點

  • 綜合考慮群集內緊密性和群集間分離性:DB 指數同時考慮了群集內的擴展度(數據點到群集中心的平均距離)和群集之間的距離,能夠較好地平衡凝聚性和分離性。
  • 自動適應不同的群集數:Davies-Bouldin 指數不需要事先指定群集數量,可以用來比較不同聚類結果的質量。
  • 適用於多種聚類算法:DB 指數可用於多種聚類算法的評估,如 K-means、層次聚類等,具有廣泛適用性。

缺點

  • 敏感於群集間距離的計算:DB 指數對群集間距離的計算方式非常敏感,如果群集間距離計算方式不合適,可能會影響評估結果的準確性。
  • 較難解釋:Davies-Bouldin 指數的具體數值範圍並不像輪廓係數那麼直觀,數值越小表示效果越好,但如何判斷具體數值的好壞則不如輪廓係數清晰。
  • 無法解釋異常值的影響:當數據集中存在異常值時,DB 指數可能會受到異常值的影響,特別是在計算群集內擴展度時,異常值可能導致群集的擴展度被誇大,從而影響評估結果。
留言
avatar-img
留言分享你的想法!
avatar-img
JayRay 的沙龍
11會員
23內容數
JayRay 的沙龍的其他內容
2025/01/21
本文章提供深度學習(Deep Learning)、深度神經網絡(DNN)、卷積神經網絡(CNN)和遞歸神經網絡(RNN)的簡介,並包含它們的定義、應用場景、基本結構、工作原理、優缺點和Python範例。
Thumbnail
2025/01/21
本文章提供深度學習(Deep Learning)、深度神經網絡(DNN)、卷積神經網絡(CNN)和遞歸神經網絡(RNN)的簡介,並包含它們的定義、應用場景、基本結構、工作原理、優缺點和Python範例。
Thumbnail
2025/01/05
本篇文章提供描述性統計的完整指南,涵蓋集中趨勢、離散趨勢和數據分佈等重要概念,並附上豐富的實務應用案例與 Python 資料視覺化參考連結,協助讀者快速瞭解數據分析的基礎知識。
Thumbnail
2025/01/05
本篇文章提供描述性統計的完整指南,涵蓋集中趨勢、離散趨勢和數據分佈等重要概念,並附上豐富的實務應用案例與 Python 資料視覺化參考連結,協助讀者快速瞭解數據分析的基礎知識。
Thumbnail
2024/12/25
Naive Bayes是一種基於貝葉斯定理的機器學習分類演算法,適用於文本分類、垃圾郵件檢測及情感分析等任務。雖然假設特徵之間相互獨立,這在現實中不常成立,但其高效計算與穩定性使得在小數據集及高維度特徵空間中表現良好。
Thumbnail
2024/12/25
Naive Bayes是一種基於貝葉斯定理的機器學習分類演算法,適用於文本分類、垃圾郵件檢測及情感分析等任務。雖然假設特徵之間相互獨立,這在現實中不常成立,但其高效計算與穩定性使得在小數據集及高維度特徵空間中表現良好。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
在資料分析過程中,透過衡量變數之間的線性或非線性關係,能有效探索數據集,篩選出重要特徵,並進行預測建模。本文介紹瞭如何理解數據、使用相關矩陣找出變數關聯性,以及利用互資訊評估變數之間的依賴程度,幫助資料科學家在建模過程中選擇適當的變數,提升模型效果。
Thumbnail
在資料分析過程中,透過衡量變數之間的線性或非線性關係,能有效探索數據集,篩選出重要特徵,並進行預測建模。本文介紹瞭如何理解數據、使用相關矩陣找出變數關聯性,以及利用互資訊評估變數之間的依賴程度,幫助資料科學家在建模過程中選擇適當的變數,提升模型效果。
Thumbnail
Python資料視覺化在數據分析中扮演關鍵角色,透過視覺化捕捉數據模式、趨勢和異常,透過Matplotlib等工具創建專業圖表變相對簡單和高效。
Thumbnail
Python資料視覺化在數據分析中扮演關鍵角色,透過視覺化捕捉數據模式、趨勢和異常,透過Matplotlib等工具創建專業圖表變相對簡單和高效。
Thumbnail
資料前處理(Data Preprocessing)中的重要角色-缺失值處理。從檢查、刪除到填充缺失值,以及插值法和機器學習算法的應用方法。Pandas 缺失值處理基礎方法、進階填充缺失值、鐵達尼號存活預測資料集的示例和機器學習算法填補缺失值方法的介紹與使用。
Thumbnail
資料前處理(Data Preprocessing)中的重要角色-缺失值處理。從檢查、刪除到填充缺失值,以及插值法和機器學習算法的應用方法。Pandas 缺失值處理基礎方法、進階填充缺失值、鐵達尼號存活預測資料集的示例和機器學習算法填補缺失值方法的介紹與使用。
Thumbnail
本文將介紹如何用Python繪製群組直條圖。
Thumbnail
本文將介紹如何用Python繪製群組直條圖。
Thumbnail
這篇文章介紹如何使用Python整理資料成百分比資料以及繪製百分比堆疊直條圖。
Thumbnail
這篇文章介紹如何使用Python整理資料成百分比資料以及繪製百分比堆疊直條圖。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News