引言
聚类分析是一种无监督学习技术,旨在将数据集中的样本分成具有相似特征的组。K均值聚类是其中一种常见的方法,它通过将数据点划分为K个簇,并使每个数据点与其所属簇的中心点距离最小化来实现聚类。本文将介绍如何使用Python和Scikit-learn库执行K均值聚类,并以鸢尾花(Iris)数据集为例进行说明。
数据集介绍
鸢尾花数据集是一个经典的多变量数据集,由英国统计学家罗纳德·费舍尔于1936年收集。该数据集包含了150个样本,每个样本代表一种鸢尾花,共分为三类:山鸢尾(setosa)、变色鸢尾(versicolor)和维吉尼亚鸢尾(virginica)。每个样本有四个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度。
研究目的
本文的目标是利用K均值聚类方法对鸢尾花数据集进行聚类分析,以探索数据中可能存在的群组结构,并可视化聚类结果。
实现步骤
1. 导入所需的库
首先,我们需要导入所需的Python库,包括Matplotlib和Scikit-learn。
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
2. 加载数据集和数据预处理
我们加载鸢尾花数据集,并对数据进行标准化处理,以确保各个特征具有相同的重要性。
# 加载Iris数据集
iris = load_iris()
X = iris.data
feature_names = iris.feature_names
# 数据预处理:标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
3. 执行K均值聚类
接下来,我们使用Scikit-learn中的KMeans模型执行K均值聚类。我们设定聚类的数量为3,因为我们知道鸢尾花数据集包含三个类别。
# 执行K均值聚类
k = 3 # 设定聚类的数量
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(X_scaled)
# 获取聚类中心和每个数据点的簇标签
cluster_centers = kmeans.cluster_centers_
cluster_labels = kmeans.labels_
4. 可视化聚类结果
最后,我们将聚类结果可视化,以便更好地理解数据中的群组结构。
# 可视化聚类结果
plt.figure(figsize=(10, 6))
for i in range(k):
plt.scatter(X_scaled[cluster_labels == i, 0], X_scaled[cluster_labels == i, 1], label=f'Cluster {i+1}')
plt.scatter(cluster_centers[:, 0], cluster_centers[:, 1], marker='x', color='black', s=200, label='Centroids')
plt.xlabel(feature_names[0])
plt.ylabel(feature_names[1])
plt.title('K-Means Clustering of Iris Dataset')
plt.legend()
plt.show()
结果展示
# 导入所需的库
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
# 加载Iris数据集
iris = load_iris()
X = iris.data
feature_names = iris.feature_names
# 数据预处理:标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 执行K均值聚类
k = 3 # 设定聚类的数量
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(X_scaled)
# 获取聚类中心和每个数据点的簇标签
cluster_centers = kmeans.cluster_centers_
cluster_labels = kmeans.labels_
# 可视化聚类结果
plt.figure(figsize=(10, 6))
for i in range(k):
plt.scatter(X_scaled[cluster_labels == i, 0], X_scaled[cluster_labels == i, 1], label=f'Cluster {i+1}')
plt.scatter(cluster_centers[:, 0], cluster_centers[:, 1], marker='x', color='black', s=200, label='Centroids')
plt.xlabel(feature_names[0])
plt.ylabel(feature_names[1])
plt.title('K-Means Clustering of Iris Dataset')
plt.legend()
plt.show()
执行上述代码后,我们可以得到聚类的结果。通过可视化结果,我们可以清晰地看到数据点在不同簇之间的分布情况,以及簇中心的位置。
结论
本文介绍了如何使用Python和Scikit-learn库执行K均值聚类,并以鸢尾花数据集为例进行了演示。通过聚类分析,我们可以发现数据中的潜在群组结构,为数据分析和建模提供了重要的参考。读者可以将本文提供的代码应用于自己的数据集,以实现聚类分析,并进一步探索数据中的内在结构。
总结
聚类分析是一种强大的数据分析技术,可以帮助我们发现数据集中的潜在结构和模式。通过本文的学习,读者可以掌握基本的聚类分析方法,并将其应用于自己的数据集中。