Davies-Bouldin Index (戴維斯-博爾丁指數)
簡介
概念與定義
Davies-Bouldin Index是由David L. Davies和Donald W. Bouldin于1979年提出的一種用于評估聚類算法效果的內部指標。它通過計算每個簇內數據點之間的相似性和不同簇中心點的距離來衡量聚類結果的質量。DBI的值越低,表明聚類的效果越好。
計算方法
對于給定的數據集和其劃分成的k個簇,DBI的計算公式如下:
DB=1k∑i=1kmax?j≠i(σi+σjd(ci,cj))DB = \frac{1}{k} \sum_{i=1}^{k} \max_{j \neq i} \left( \frac{\sigma_i + \sigma_j}{d(c_i, c_j)} \right)DB=k1?i=1∑k?j=imax?(d(ci?,cj?)σi?+σj??)
其中,(\sigma_i)代表第(i)個簇內數據點到該簇中心點的平均距離,(c_i)是第(i)個簇的中心點,而(d(c_i, c_j))表示簇(i)和簇(j)中心點之間的距離。
使用場景
數據探索階段
在數據分析的初期階段,當嘗試理解數據結構并尋找合適的聚類數時,DBI可以作為一種有效的工具來評估不同的聚類方案。
選擇最佳聚類數
DBI常被用來比較不同數量的簇所得到的聚類效果,幫助確定最佳的簇數量。
優點
直觀易懂
DBI的計算基于簡單的數學概念,易于理解和實現。
缺點
對非球形簇的限制
由于DBI依賴于簇內點間距離和簇中心點間的距離,因此對于形狀不規則或大小差異較大的簇,DBI可能無法提供準確的評價。
sklearn.metrics.davies_bouldin_score函數
sklearn.metrics.davies_bouldin_score
是用于評估聚類效果的一個指標,基于Davies-Bouldin Index來衡量聚類質量。該分數越低,表示聚類效果越好。
核心作用
- 評估聚類算法的效果,通過計算簇內相似性與簇間分離度的比率。
函數參數
X
: {array-like, sparse matrix} of shape (n_samples, n_features)- 特征數組或矩陣。
labels
: array-like of shape (n_samples,)- 每個樣本的類別標簽。
返回值
score
: float- Davies-Bouldin Index的值,數值越低表示聚類效果越好。
內部數學形式
對于每個簇CiC_iCi?,定義其平均距離到其他點的距離為:
Rij=σi+σjd(μi,μj)R_{ij} = \frac{\sigma_i + \sigma_j}{d(\mu_i, \mu_j)}Rij?=d(μi?,μj?)σi?+σj??
其中,
-σi\sigma_iσi?是簇CiC_iCi?的標準差(或簇內散度)。
- μi\mu_iμi? 是簇CiC_iCi?的質心。
- d(μi,μj)d(\mu_i, \mu_j)d(μi?,μj?)是兩個簇質心間的歐幾里得距離。
最終的Davies-Bouldin指數為所有簇對的最大RijR_{ij}Rij?值的平均。
示例代碼
from sklearn.cluster import KMeans
from sklearn.metrics import davies_bouldin_score
from sklearn.datasets import make_blobs# 創建模擬數據集
X, _ = make_blobs(n_samples=1000, centers=5, n_features=2, random_state=42)# 使用KMeans進行聚類
kmeans = KMeans(n_clusters=5, random_state=42).fit(X)# 計算Davies-Bouldin指數
db_index = davies_bouldin_score(X, kmeans.labels_)print(f"Davies-Bouldin Index: {db_index}")
輸出
Calinski-Harabasz 指數: 2157.53
代碼說明
make_blobs
: 生成一個具有預設簇結構的二維數據集,便于演示。KMeans
: 使用 K-Means 算法進行聚類。n_init=10
確保算法運行10次并選擇最優結果。calinski_harabasz_score(X, cluster_labels)
:X
: 輸入的數據特征矩陣。cluster_labels
: 聚類算法產生的標簽。- 該函數計算并返回 Calinski-Harabasz 指數。
- 輸出: 打印出計算得到的指數值。