Python 聚类分析代码参考
分类:机器学习
代码:
import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.datasets import load_iris from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体 plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 # 加载iris数据集 iris = load_iris() X = iris.data y = iris.target # 标准化数据 scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # 使用PCA进行降维 pca = PCA(n_components=2) X_pca = pca.fit_transform(X_scaled) # 使用手肘法确定最佳的K值 inertia = [] for k in range(1, 11): kmeans = KMeans(n_clusters=k, random_state=42) kmeans.fit(X_scaled) inertia.append(kmeans.inertia_) # 绘制手肘法图表 plt.figure(figsize=(8, 4)) plt.plot(range(1, 11), inertia, marker='o', linestyle='--') plt.ylabel('误差平方和') plt.title('手肘法图表') plt.show() # 根据手肘法图表选择最佳的K值 best_k = inertia.index(min(inertia)) + 1 # 选择SSE最小的k值 # 使用最佳的K值进行K-Means聚类 kmeans = KMeans(n_clusters=best_k, random_state=42) kmeans.fit(X_scaled) # 将簇标签添加到原始数据中 y_kmeans = kmeans.labels_ # 可视化聚类结果 plt.figure(figsize=(8, 6)) plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y_kmeans, cmap='viridis') plt.xlabel('主成分1') plt.ylabel('主成分2') plt.title('K-Means 聚类结果') plt.savefig('KMeans_Result.png', dpi=300) plt.show() # 打印每个簇中的样本数量 print("每个簇中的样本数量:", np.bincount(y_kmeans))
每个簇中的样本数量: [17 21 20 16 13 12 7 12 16 16]