Python 在Scikit Learn中进行聚类性能评估

Python 在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()

输出

Python 在Scikit Learn中进行聚类性能评估

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}")

输出

Python 在Scikit Learn中进行聚类性能评估

性能评估指标

Silhouette Score

Silhouette Score 是一种广泛使用的度量方法,用于评估聚类结果的质量。它衡量了一个数据点与其所属簇相比于其他簇的相似程度。该得分的范围从-1到1,值越高表示聚类性能越好。接近1的值表明数据点被很好地聚类和正确分离,而接近-1的值表示数据点可能被错误地分配到了簇中。在代码中,使用silhouette_score()函数来计算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_score()函数计算Calinski−Harabasz指数。

考虑以下示例代码。

示例

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

结论

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

Silhouette Score通过考虑同一簇中样本与其他簇中样本之间的平均距离来衡量簇的质量和分离度。 较高的 Silhouette Score 表明聚类性能更好,具有更好分离且独特的簇。

Calinski-Harabasz指数通过考虑簇间离散度与簇内离散度之比来评估聚类性能。 较高的Calinski-Harabasz指数意味着聚类性能更好,簇间分离度更高,簇内方差更低。

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程