Python实现C均值聚类算法:分析学生身高、体重与50米成绩
Python实现C均值聚类算法:分析学生身高、体重与50米成绩
本文介绍如何使用Python语言,结合C-均值聚类算法对学生身高、体重、50米成绩数据进行聚类分析,并使用三维可视化展示聚类结果。
代码实现
以下代码读取Excel表格数据,并执行C-均值聚类算法分析,对标准化后的身高、体重和50米成绩三个特征进行聚类。然后,绘制三维分布图,并输出聚类中心,聚类中心表示为未进行数据处理前的身高、体重和50米成绩三个特征的值。pythonimport pandas as pdfrom sklearn.cluster import KMeansfrom sklearn.preprocessing import StandardScalerimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D
读取Excel数据data = pd.read_excel(r'D:\研究生作业\模式识别作业\2023年模式识别与机器学习数据集汇总1.XLS')
提取男生和女生的数据male_data = data[data['性别'] == '男']female_data = data[data['性别'] == '女']
合并男生和女生的数据merged_data = pd.concat([male_data, female_data])
提取身高、体重、50米成绩三个特征features = ['身高', '体重', '50米成绩']
标准化数据scaler = StandardScaler()scaled_data = scaler.fit_transform(merged_data[features])
定义聚类数范围num_clusters = range(2, 11)
执行聚类并绘制三维分布图fig = plt.figure(figsize=(12, 8))ax = fig.add_subplot(111, projection='3d')
for n in num_clusters: kmeans = KMeans(n_clusters=n) kmeans.fit(scaled_data) labels = kmeans.labels_ centers = kmeans.cluster_centers_
# 绘制三维分布图 ax.scatter(scaled_data[:, 0], scaled_data[:, 1], scaled_data[:, 2], c=labels) ax.scatter(centers[:, 0], centers[:, 1], centers[:, 2], marker='X', c='red', s=200, label=f'聚类数={n}')
ax.set_title('不同聚类数下的三维分布图')ax.set_xlabel('标准化身高')ax.set_ylabel('标准化体重')ax.set_zlabel('标准化50米成绩')ax.legend()plt.show()
将聚类中心还原回初始值original_centers = scaler.inverse_transform(centers)
输出聚类中心for i, center in enumerate(original_centers): print(f'聚类数为{num_clusters[i]}的聚类中心(还原后):') for j, feature in enumerate(features): print(f'{feature}: {center[j]}') print()
代码说明
- 代码首先使用
pandas库读取Excel文件中的数据。- 然后,使用scikit-learn库中的StandardScaler类对数据进行标准化处理。- 接着,使用KMeans类对标准化后的数据进行聚类分析,并使用matplotlib库绘制三维分布图。- 最后,将聚类中心还原回初始值,并输出聚类中心。
注意事项
- 请确保已安装
pandas、scikit-learn、matplotlib和mpl_toolkits库。- 代码中的文件路径和名称需要根据实际情况进行修改。- 聚类数范围可以通过修改range(2, 11)来设置。
原文地址: https://www.cveoy.top/t/topic/XVn 著作权归作者所有。请勿转载和采集!