Scikit Learn 中的聚类性能评估


聚类是一种基本的无监督学习技术,旨在发现未标记数据中的模式或分组。它在数据挖掘、模式识别和客户细分等各个领域都发挥着至关重要的作用。但是,一旦应用了聚类算法,就必须评估其性能并评估所得聚类的质量。

聚类性能评估是理解聚类算法的有效性和可靠性的关键步骤。它包括量化获得的聚类的质量,并提供对其一致性和可分离性的见解。通过评估聚类结果,从业人员可以就算法选择、参数调整和发现的聚类的可解释性做出明智的决策。

在本文中,我们将探讨使用 Python 中的 Scikit-Learn 库进行聚类性能评估的概念。

为了说明聚类性能评估的概念,让我们考虑一个我们对数据集执行聚类的示例。

考虑以下所示的代码。

示例

from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

# Generate random points
features, targets = make_blobs(n_samples=500, centers=5, random_state=42, shuffle=False)

# Create the scatter plot
plt.scatter(features[:, 0], features[:, 1])

# Customize plot appearance
plt.title("Random Points Scatter Plot")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")

# Display the plot
plt.show()

输出

K均值

在下面的示例中,我们将使用 k 均值算法。

考虑以下所示的代码。

示例

import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.metrics import silhouette_score, calinski_harabasz_score, davies_bouldin_score

# Generate sample data
X, y_true = make_blobs(n_samples=500, centers=4, random_state=42)

# Perform clustering using k-means algorithm
kmeans = KMeans(n_clusters=4, random_state=42)
y_pred = kmeans.fit_predict(X)

# Evaluate clustering performance using metrics
silhouette = silhouette_score(X, y_pred)
calinski_harabasz = calinski_harabasz_score(X, y_pred)
davies_bouldin = davies_bouldin_score(X, y_pred)

# Plot the clustering results
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], marker='x', c='red', label='Centroids')
plt.title('K-means Clustering')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()
plt.show()

# Print the evaluation scores
print(f"Silhouette Score: {silhouette:.3f}")
print(f"Calinski-Harabasz Index: {calinski_harabasz:.3f}")
print(f"Davies-Bouldin Index: {davies_bouldin:.3f}")

输出

性能评估指标

轮廓系数

轮廓系数是广泛用于评估聚类结果质量的指标。它衡量数据点与其自身集群相比与其他集群的相似程度。该分数范围为 -1 到 1,其中较高的值表示更好的聚类性能。接近 1 的值表明数据点已很好地聚类并被正确分离,而接近 -1 的值表明数据点可能已被分配到错误的集群。在代码中,轮廓系数是使用 silhouette_score() 函数计算的。

考虑以下所示的代码。

示例

from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score

# Generate sample data
X, _ = make_blobs(n_samples=500, centers=4, random_state=42)

# Perform clustering using K-means algorithm
kmeans = KMeans(n_clusters=4, random_state=42)
y_pred = kmeans.fit_predict(X)

# Calculate the Silhouette Score
silhouette = silhouette_score(X, y_pred)

# Print the Silhouette Score
print("Silhouette Score:", silhouette)

输出

Silhouette Score: 0.7911042588289479

Calinski-Harabasz 指数

Calinski-Harabasz 指数,也称为方差比率准则,是聚类的另一个性能评估指标。它衡量集群间离散度与集群内离散度的比率。较高的 Calinski-Harabasz 指数值表示更好的聚类性能,集群之间具有更高的分离度,而集群内的方差较低。在代码中,Calinski-Harabasz 指数是使用 calinski_harabasz_score() 函数计算的。

考虑以下所示的代码。

示例

from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import calinski_harabasz_score

# Generate sample data
X, _ = make_blobs(n_samples=500, centers=4, random_state=42)

# Perform clustering using K-means algorithm
kmeans = KMeans(n_clusters=4, random_state=42)
y_pred = kmeans.fit_predict(X)

# Calculate the Calinski-Harabasz Index
calinski_harabasz = calinski_harabasz_score(X, y_pred)

# Print the Calinski-Harabasz Index
print("Calinski-Harabasz Index:", calinski_harabasz)

输出

Calinski-Harabasz Index: 5742.035759058726

结论

总之,评估聚类算法的性能对于评估其对数据点分组的有效性至关重要。在本文中,我们探讨了两个常用的性能评估指标:轮廓系数和 Calinski-Harabasz 指数。

轮廓系数通过考虑同一集群中样本之间的平均距离以及其他集群中样本的平均距离来衡量集群的质量和分离度。较高的轮廓系数表示更好的聚类性能,具有良好的分离和不同的集群。

Calinski-Harabasz 指数通过考虑集群间离散度与集群内离散度的比率来评估聚类性能。较高的 Calinski-Harabasz 指数表明更好的聚类性能,集群之间具有更高的分离度,而集群内的方差较低。

通过利用这些评估指标,我们可以定量地评估聚类结果的质量,并就聚类算法和参数设置的选择做出明智的决策。

更新于:2023年8月7日

356 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告