Python实现C-均值聚类算法分析学生体测数据
Python实现C-均值聚类算法分析学生体测数据
本文介绍如何使用Python编写程序,读取Excel文件中的学生体测数据,并利用C-均值聚类算法对其进行分析。程序将探究不同的聚类数和初始化方法对聚类结果的影响,并以图表形式清晰地展现结果。
数据:
程序将读取名为'2023年模式识别与机器学习数据集汇总1.xls'的Excel文件,文件路径为'D:\研究生作业\模式识别作业'(请根据实际情况修改)。Excel文件中包含770组男生女生样本数据,每组数据包含身高、体重、50米成绩、肺活量四个特征。
程序:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# 读取Excel数据
data = pd.read_excel(r'D:\研究生作业\模式识别作业\2023年模式识别与机器学习数据集汇总1.xls')
# 提取身高、体重、50米成绩、肺活量四个特征列的数据
features = data.iloc[:, 0:4].values
# 定义函数绘制聚类结果
def plot_clusters(data, labels, centroids):
colors = ['r', 'g', 'b', 'c', 'm', 'y', 'k']
for i in range(len(data)):
plt.scatter(data[i, 0], data[i, 1], c=colors[labels[i]])
plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', c='k', s=100)
plt.xlabel('Height')
plt.ylabel('Weight')
plt.title('Clustering Result')
plt.show()
# 第一部分:聚类数对准则函数值J的影响
def evaluate_c_values(features):
c_values = range(1, 21)
j_values = []
for c in c_values:
kmeans = KMeans(n_clusters=c, random_state=0)
kmeans.fit(features)
j_values.append(kmeans.inertia_)
plt.plot(c_values, j_values, marker='o')
plt.xlabel('Number of Clusters')
plt.ylabel('J (Inertia)')
plt.title('Inertia vs Number of Clusters')
plt.show()
# 第二部分:不同初始聚类中心点选取方法对准则函数值J的影响
def evaluate_initialization_methods(features, c):
kmeans_random = KMeans(n_clusters=c, init='random', random_state=0)
kmeans_random.fit(features)
j_random = kmeans_random.inertia_
kmeans_kmeans_pp = KMeans(n_clusters=c, init='k-means++', random_state=0)
kmeans_kmeans_pp.fit(features)
j_kmeans_pp = kmeans_kmeans_pp.inertia_
plt.bar(['Random', 'K-means++'], [j_random, j_kmeans_pp])
plt.xlabel('Initialization Method')
plt.ylabel('J (Inertia)')
plt.title('Inertia for Different Initialization Methods')
plt.show()
# 运行第一部分程序
evaluate_c_values(features)
# 运行第二部分程序
best_c = 4 # 根据第一部分结果选择最佳聚类数
evaluate_initialization_methods(features, best_c)
程序说明:
- 程序首先导入必要的库,包括pandas用于读取Excel数据,numpy用于数值计算,matplotlib用于绘制图表,以及sklearn.cluster中的KMeans用于实现C-均值聚类算法。
- 读取Excel数据,并提取身高、体重、50米成绩、肺活量四个特征列的数据。
- 定义
plot_clusters函数,用于绘制聚类结果,将不同类别的数据点以不同颜色区分,并标记聚类中心点。 - 定义
evaluate_c_values函数,用于探究聚类数对准则函数值J的影响。程序将遍历不同的聚类数,计算每个聚类数对应的准则函数值J,并绘制成图表。 - 定义
evaluate_initialization_methods函数,用于探究不同初始聚类中心点选取方法对准则函数值J的影响。程序将比较'random'和'k-means++'两种初始化方法,计算各自对应的准则函数值J,并绘制成图表。 - 运行
evaluate_c_values函数,观察聚类数对准则函数值J的影响,并根据结果选择最佳聚类数。 - 运行
evaluate_initialization_methods函数,观察不同初始化方法对准则函数值J的影响,并选择更合适的初始化方法。
运行环境:
程序需要安装以下Python库:pandas、numpy、matplotlib、scikit-learn。可以使用pip命令进行安装:
pip install pandas numpy matplotlib scikit-learn
总结:
本文介绍了如何使用Python编写程序,利用C-均值聚类算法对学生体测数据进行分析,并探究不同的聚类数和初始化方法对聚类结果的影响。程序以图表形式清晰地展现了结果,方便用户理解和分析。
原文地址: https://www.cveoy.top/t/topic/hvk 著作权归作者所有。请勿转载和采集!