Python实现C均值聚类算法:基于身高、体重等特征分析学生数据本文将使用Python,结合C-均值聚类算法对学生数据进行聚类分析。数据集包含学生的身高、体重、50米成绩和肺活量四个特征。**代码实现:**pythonimport pandas as pdfrom sklearn.decomposition import PCAfrom sklearn.cluster import KMeansfrom sklearn.preprocessing import StandardScalerimport matplotlib.pyplot as plt# 读取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米成绩', '肺活量']# 使用PCA进行降维pca = PCA(n_components=2)reduced_data = pca.fit_transform(merged_data[features])# 标准化降维后的数据scaler = StandardScaler()scaled_data = scaler.fit_transform(reduced_data)# 定义聚类数范围num_clusters = range(2, 11)# 计算不同聚类数情况下的聚类准则函数值JJ_values = []for n in num_clusters: kmeans = KMeans(n_clusters=n) kmeans.fit(scaled_data) J = kmeans.inertia_ J_values.append(J)# 输出聚类数和对应的准则函数值Jdf = pd.DataFrame({'聚类数': num_clusters, '准则函数值J': J_values})print(df)# 绘制J与聚类数的曲线图plt.plot(num_clusters, J_values, marker='o')plt.title('聚类准则函数值J与聚类数的关系')plt.xlabel('聚类数')plt.ylabel('聚类准则函数值J')plt.xticks(num_clusters)plt.grid(True)plt.show()**代码解读:**1. 数据准备: 读取Excel文件,提取所需数据,并将男生女生数据合并。2. 特征提取: 选择身高、体重、50米成绩、肺活量作为聚类分析的特征。3. 降维: 使用PCA将四维特征降至二维,方便可视化和后续分析。4. 标准化: 对降维后的数据进行标准化,消除量纲差异带来的影响。5. C均值聚类: 使用KMeans进行聚类,并计算不同聚类数(2-10)下的准则函数值J。6. 结果可视化: 将聚类数与准则函数值J的关系绘制成曲线图,方便观察“肘部”。**如何确定最佳聚类数?**观察曲线图,寻找“肘部”的位置,即曲线斜率变化最明显的地方。该点对应的聚类数通常是比较合理的。“肘部法则”提供了一种直观的确定最佳聚类数的方法。**总结:**本文使用Python实现了基于C-均值聚类算法的学生数据分析。通过数据降维、标准化、聚类分析以及结果可视化,可以帮助我们更好地理解数据,并根据实际需求选择合适的聚类数。

Python实现C均值聚类算法:基于身高、体重等特征分析学生数据

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

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