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库绘制三维分布图。- 最后,将聚类中心还原回初始值,并输出聚类中心。

注意事项

  • 请确保已安装pandasscikit-learnmatplotlibmpl_toolkits库。- 代码中的文件路径和名称需要根据实际情况进行修改。- 聚类数范围可以通过修改range(2, 11)来设置。
Python实现C均值聚类算法:分析学生身高、体重与50米成绩

原文地址: https://www.cveoy.top/t/topic/XVn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录