使用聚類算法后顷编,比如k-means,要評價聚類的效果如何哀军,可以用以下指標。
評價聚類模型好的標準:同一簇類的數據集盡可能密集打却,不同簇類的數據集盡可能遠離杉适。
(1)輪廓系數
1.計算當前簇類凝聚度:當前簇類的樣本i到其簇類內所有其他樣本的距離的平均值,記為a柳击。
2.計算當前簇類與鄰居簇類的分離度:樣本i到鄰居簇類(最近那個)內所有樣本的距離的平均值猿推,記為b。由于不知道哪一個簇類是鄰居簇類捌肴,所以要遍歷其他各個簇類蹬叭,選擇距離平均值最小的簇類作為鄰居簇類。
3.對于樣本i状知,計算輪廓系數:
4.計算當前簇類內的所有樣本的輪廓系數的平均值秽五,作為當前簇類的輪廓系數。
值會在(-1饥悴,1)坦喘,不難發(fā)現若s小于0,說明分離度b小于聚合度a铺坞,表示聚類效果不好起宽。我們希望分離度要大洲胖,聚合度要小济榨,即b>>a,這樣聚類效果比較好绿映。
代碼:
from sklearn import metrics
from sklearn.cluster import KMeans
from sklearn import datasets
# 生成數據集
dataset = datasets.load_iris()
X = dataset.data
y = dataset.target
# 構建K均值聚類模型
kmeans_model = KMeans(n_clusters=3, random_state=1).fit(X)
labels = kmeans_model.labels_
# 輪廓系數
metrics.silhouette_score(X, labels, metric='euclidean')
(2) DB指數(Davies-Bouldin Index)
1.計算各個簇類的凝聚度:
2.計算各個簇類之間的分離度:
其中,是簇類中心叉弦。
3.計算DB指數:
DB指數越小說明聚類效果越好丐一。DB指數的計算比輪廓系數簡單;DB指數的計算只需要知道數據集的數量和特征淹冰。
(3)CH指數
直接上代碼:
from sklearn import metrics
from sklearn.cluster import KMeans
kmeans_model = KMeans(n_clusters=3, random_state=1).fit(X)
labels = kmeans_model.labels_
metrics.calinski_harabaz_score(X, labels)
當簇類密集且簇間分離較好時库车,Caliniski-Harabaz分數越高,聚類性能越好樱拴。