聚类是无监督学习中的一种重要技术,用于在没有标签信息的情况下对数据进行分析和组织。K均值算法是聚类中最常用的方法之一,其目标是将数据点划分为K个簇,使得每个簇内的数据点更加相似,而不同簇之间的数据点差异较大。
准备自定义数据集
首先,需要一个自定义数据集来进行聚类分析。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 创建自定义数据集
np.random.seed(42)
num_samples = 150
# 生成特征数据
X = np.random.rand(num_samples, 2)
# 将数据转换为DataFrame以便查看
data = pd.DataFrame(X, columns=['Feature1', 'Feature2'])
# 可视化数据集
plt.scatter(data['Feature1'], data['Feature2'], c='gray', marker='o', edgecolor='black')
plt.title('Custom Dataset')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()
在这个数据集中,Feature1
和Feature2
是特征。使用K均值算法对这些数据点进行聚类。
使用K均值算法进行聚类
接下来,将使用scikit-learn库中的K均值算法对数据集进行聚类。我们需要指定簇的数量K,假设K=3。
from sklearn.cluster import KMeans
# 指定簇的数量
k = 3
# 初始化K均值聚类器
kmeans = KMeans(n_clusters=k, random_state=42)
# 训练模型
kmeans.fit(X)
# 获取聚类结果
labels = kmeans.labels_
# 获取簇中心
centroids = kmeans.cluster_centers_
# 将聚类结果添加到DataFrame中
data['Cluster'] = labels
print(data.head())
可视化聚类结果
可视化聚类结果,以便更直观地了解数据点的分组情况。
# 可视化聚类结果
plt.figure(figsize=(8, 6))
plt.scatter(data['Feature1'], data['Feature2'], c=data['Cluster'], cmap='viridis', marker='o', edgecolor='black')
plt.scatter(centroids[:, 0], centroids[:, 1], c='red', marker='x', s=200, label='Centroids')
plt.title('K-Means Clustering Result')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()
plt.show()