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)

程序说明:

  1. 程序首先导入必要的库,包括pandas用于读取Excel数据,numpy用于数值计算,matplotlib用于绘制图表,以及sklearn.cluster中的KMeans用于实现C-均值聚类算法。
  2. 读取Excel数据,并提取身高、体重、50米成绩、肺活量四个特征列的数据。
  3. 定义plot_clusters函数,用于绘制聚类结果,将不同类别的数据点以不同颜色区分,并标记聚类中心点。
  4. 定义evaluate_c_values函数,用于探究聚类数对准则函数值J的影响。程序将遍历不同的聚类数,计算每个聚类数对应的准则函数值J,并绘制成图表。
  5. 定义evaluate_initialization_methods函数,用于探究不同初始聚类中心点选取方法对准则函数值J的影响。程序将比较'random'和'k-means++'两种初始化方法,计算各自对应的准则函数值J,并绘制成图表。
  6. 运行evaluate_c_values函数,观察聚类数对准则函数值J的影响,并根据结果选择最佳聚类数。
  7. 运行evaluate_initialization_methods函数,观察不同初始化方法对准则函数值J的影响,并选择更合适的初始化方法。

运行环境:

程序需要安装以下Python库:pandas、numpy、matplotlib、scikit-learn。可以使用pip命令进行安装:

pip install pandas numpy matplotlib scikit-learn

总结:

本文介绍了如何使用Python编写程序,利用C-均值聚类算法对学生体测数据进行分析,并探究不同的聚类数和初始化方法对聚类结果的影响。程序以图表形式清晰地展现了结果,方便用户理解和分析。

Python实现C-均值聚类算法分析学生体测数据

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

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