在有真实值的情况下对聚类算法性能对比
有一些指标可用于评估聚类算法相对于真实聚类的结果,其中最重要的是调整 rand 指数(adjusted rand index,ARI)和归一化互信息(normalized mutual information, NMI),二者都给出了定量的度量,其最佳值为 1,0 表示不相关的聚类(虽然 ARI 可以取负值)。下面我们使用 ARI 来比较 k 均值、凝聚聚类和 DBSCAN 算法。
注意,不能使用之前评估监督学习算法的Accuracy Score来评估聚类算法,因为聚类算法的结果不具有先验性。
#计算调整rand指数ARI
from sklearn.metrics.cluster import adjusted_rand_score
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import make_moons
import matplotlib.pyplot as plt
import numpy as np
X, y = make_moons(n_samples=200, noise=0.05, random_state=0)
# 将数据缩放成平均值为0、方差为1
scaler = StandardScaler()
scaler.fit(X)
X_scaled = scaler.transform(X)
fig, axes = plt.subplots(1, 4, figsize=(15, 3),
subplot_kw={
'xticks': (), 'yticks': ()})
# 列出要使用的算法
from sklearn.cluster import DBSCAN, KMeans