📜  测量数据挖掘中的聚类质量(1)

📅  最后修改于: 2023-12-03 14:56:05.530000             🧑  作者: Mango

测量数据挖掘中的聚类质量

简介

在数据挖掘过程中,聚类是一种常用的无监督学习方法。它的目标是将数据集划分为多个组,使得同组的数据点相似度高,不同组的数据点相似度低。因此,评估聚类的质量是非常重要的。本文将介绍常用的聚类质量评估方法和如何用Python实现它们。

常用的聚类质量评估方法
SSE

SSE(Sum of Squared Errors)是最基本的聚类质量评估方法之一,它的计算公式如下:

$$SSE=\sum_{i=1}^{k}\sum_{x\in C_i}||x-\mu_i||^2$$

其中,$k$表示聚类的个数,$C_i$表示第$i$个聚类的数据点集合,$\mu_i$表示第$i$个聚类的质心。

SSE越小,表示聚类效果越好。但是,SSE的缺点在于它受到数据集大小和聚类数的影响。因此,需要使用一些更加可靠的聚类质量评估方法。

轮廓系数

轮廓系数是一种比较常用的聚类质量评估方法,它的计算公式如下:

$$s_i=\frac{b_i-a_i}{max(a_i,b_i)}$$

$$s=\frac{\sum_{i=1}^{n}s_i}{n}$$

其中,$a_i$表示数据点$i$与同组其他数据点之间的平均距离(即簇内距离),$b_i$表示数据点$i$与其他组数据点之间的平均距离(即簇间距离)。

轮廓系数的取值范围在[-1,1]之间,越接近1表示聚类效果越好,越接近-1表示聚类效果越差。

Calinski-Harabasz指数

Calinski-Harabasz指数也是一种常用的聚类质量评估方法,它的计算公式如下:

$$CH=\frac{tr(B_k)}{tr(W_k)}\times\frac{n-k}{k-1}$$

其中,$n$表示数据集大小,$k$表示聚类数。$tr(B_k)$表示簇之间的方差,$tr(W_k)$表示簇内的方差。

Calinski-Harabasz指数越大,表示聚类效果越好。

Python实现代码
SSE示例
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs

# 生成数据
X, y_true = make_blobs(n_samples=300, centers=4,
                       cluster_std=0.60, random_state=0)

# 计算SSE
kmeans = KMeans(n_clusters=4, random_state=0).fit(X)
sse = kmeans.inertia_
print("SSE:", sse)
轮廓系数示例
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.metrics import silhouette_score

# 生成数据
X, y_true = make_blobs(n_samples=300, centers=4,
                       cluster_std=0.60, random_state=0)

# 计算轮廓系数
kmeans = KMeans(n_clusters=4, random_state=0).fit(X)
score = silhouette_score(X, kmeans.labels_)
print("轮廓系数:", score)
Calinski-Harabasz指数示例
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.metrics import calinski_harabasz_score

# 生成数据
X, y_true = make_blobs(n_samples=300, centers=4,
                       cluster_std=0.60, random_state=0)

# 计算Calinski-Harabasz指数
kmeans = KMeans(n_clusters=4, random_state=0).fit(X)
score = calinski_harabasz_score(X, kmeans.labels_)
print("Calinski-Harabasz指数:", score)

以上代码仅供参考,实际应用中需要根据需求进行调整。