
- Scikit Learn 教程
- Scikit Learn - 首頁
- Scikit Learn - 簡介
- Scikit Learn - 建模過程
- Scikit Learn - 資料表示
- Scikit Learn - 估計器API
- Scikit Learn - 約定
- Scikit Learn - 線性模型
- Scikit Learn - 擴充套件線性模型
- 隨機梯度下降
- Scikit Learn - 支援向量機
- Scikit Learn - 異常檢測
- Scikit Learn - K近鄰演算法
- Scikit Learn - KNN學習
- 樸素貝葉斯分類
- Scikit Learn - 決策樹
- 隨機決策樹
- Scikit Learn - Boosting方法
- Scikit Learn - 聚類方法
- 聚類效能評估
- 使用PCA進行降維
- Scikit Learn 有用資源
- Scikit Learn - 快速指南
- Scikit Learn - 有用資源
- Scikit Learn - 討論
Scikit Learn - 聚類效能評估
有很多函式可以幫助我們評估聚類演算法的效能。
以下是Scikit-learn提供的一些重要且常用的用於評估聚類效能的函式:
調整後的蘭德指數 (Adjusted Rand Index)
蘭德指數是一個計算兩個聚類之間相似性度量的函式。此計算考慮所有樣本對,並計算在預測聚類和真實聚類中分配到相似或不同聚類的樣本對數量。之後,使用以下公式將原始蘭德指數分數“調整為機會”轉換為調整後的蘭德指數分數:
$$調整後的RI=\left(RI-預期RI\right)/\left(max\left(RI\right)-預期RI\right)$$它有兩個引數,即`labels_true`(真實類標籤)和`labels_pred`(要評估的聚類標籤)。
示例
from sklearn.metrics.cluster import adjusted_rand_score labels_true = [0, 0, 1, 1, 1, 1] labels_pred = [0, 0, 2, 2, 3, 3] adjusted_rand_score(labels_true, labels_pred)
輸出
0.4444444444444445
完美的標籤得分將為1,而糟糕的標籤或獨立的標籤得分將為0或負數。
基於互資訊的得分
互資訊是一個計算兩個分配一致性的函式。它忽略排列。有以下版本可用:
歸一化互資訊 (NMI)
Scikit learn 有`sklearn.metrics.normalized_mutual_info_score`模組。
示例
from sklearn.metrics.cluster import normalized_mutual_info_score labels_true = [0, 0, 1, 1, 1, 1] labels_pred = [0, 0, 2, 2, 3, 3] normalized_mutual_info_score (labels_true, labels_pred)
輸出
0.7611702597222881
調整後的互資訊 (AMI)
Scikit learn 有`sklearn.metrics.adjusted_mutual_info_score`模組。
示例
from sklearn.metrics.cluster import adjusted_mutual_info_score labels_true = [0, 0, 1, 1, 1, 1] labels_pred = [0, 0, 2, 2, 3, 3] adjusted_mutual_info_score (labels_true, labels_pred)
輸出
0.4444444444444448
Fowlkes-Mallows 得分
Fowlkes-Mallows 函式測量一組點的兩個聚類的相似性。它可以定義為成對精度和召回率的幾何平均值。
數學上,
$$FMS=\frac{TP}{\sqrt{\left(TP+FP\right)\left(TP+FN\right)}}$$這裡,`TP = 真陽性` - 真實標籤和預測標籤中都屬於相同聚類的點對數量。
`FP = 假陽性` - 在真實標籤中屬於相同聚類但在預測標籤中不屬於相同聚類的點對數量。
`FN = 假陰性` - 在預測標籤中屬於相同聚類但在真實標籤中不屬於相同聚類的點對數量。
Scikit learn 有`sklearn.metrics.fowlkes_mallows_score`模組。
示例
from sklearn.metrics.cluster import fowlkes_mallows_score labels_true = [0, 0, 1, 1, 1, 1] labels_pred = [0, 0, 2, 2, 3, 3] fowlkes_mallows__score (labels_true, labels_pred)
輸出
0.6546536707079771
輪廓係數 (Silhouette Coefficient)
輪廓函式將使用每個樣本的平均簇內距離和平均最近簇距離來計算所有樣本的平均輪廓係數。
數學上,
$$S=\left(b-a\right)/max\left(a,b\right)$$這裡,a是簇內距離。
而b是平均最近簇距離。
Scikit learn 有`sklearn.metrics.silhouette_score`模組。
示例
from sklearn import metrics.silhouette_score from sklearn.metrics import pairwise_distances from sklearn import datasets import numpy as np from sklearn.cluster import KMeans dataset = datasets.load_iris() X = dataset.data y = dataset.target kmeans_model = KMeans(n_clusters = 3, random_state = 1).fit(X) labels = kmeans_model.labels_ silhouette_score(X, labels, metric = 'euclidean')
輸出
0.5528190123564091
列聯表 (Contingency Matrix)
此矩陣將報告每個可信的(真實,預測)對的交集基數。分類問題的混淆矩陣是一個正方形列聯表。
Scikit learn 有`sklearn.metrics.contingency_matrix`模組。
示例
from sklearn.metrics.cluster import contingency_matrix x = ["a", "a", "a", "b", "b", "b"] y = [1, 1, 2, 0, 1, 2] contingency_matrix(x, y)
輸出
array([ [0, 2, 1], [1, 1, 1] ])
上面輸出的第一行顯示,在真實聚類為“a”的三個樣本中,沒有一個在0中,兩個在1中,一個在2中。另一方面,第二行顯示,在真實聚類為“b”的三個樣本中,一個在0中,一個在1中,一個在2中。