Python实现C-均值聚类分析:基于身高、体重和50米成绩对学生进行分类
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
from 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=(16, 12))
for i, n in enumerate(num_clusters):
ax = fig.add_subplot(3, 3, i+1, projection='3d')
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(f'聚类数为{n}的三维分布图')
ax.set_xlabel('标准化身高')
ax.set_ylabel('标准化体重')
ax.set_zlabel('标准化50米成绩')
ax.legend()
plt.tight_layout()
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()
这段代码实现了以下功能:
- 读取数据: 从Excel文件'D:\研究生作业\模式识别作业\2023年模式识别与机器学习数据集汇总1.XLS'中读取学生数据。
- 数据预处理: 分别提取男生和女生的数据,合并数据,提取身高、体重和50米成绩三个特征,并对数据进行标准化处理。
- C-均值聚类: 使用
KMeans算法对标准化后的数据进行聚类分析,聚类数范围为2到10。 - 结果可视化: 使用matplotlib库绘制三维散点图,展示不同聚类数下的聚类结果,并标记聚类中心。
- 聚类中心还原: 将标准化后的聚类中心还原为原始数据的单位。
- 输出结果: 打印每个聚类数下的聚类中心,包括身高、体重和50米成绩三个特征的值。
这段代码可以帮助你理解如何使用Python进行C-均值聚类分析,并对结果进行可视化展示。同时,代码中对数据预处理和结果解读的步骤也有一定的参考价值。
原文地址: http://www.cveoy.top/t/topic/XWP 著作权归作者所有。请勿转载和采集!