以下是使用Python代码对男生女生样本数据的身高、体重、50米成绩和肺活量进行C-均值聚类分析,并展示聚类结果的二维分布图。代码将数据标准化,分析不同初始聚类中心对聚类结果的影响,并输出聚类中心的值。

import pandas as pd
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
import numpy as np
import matplotlib.pyplot as plt

# 读取Excel数据
data = pd.read_excel(r'D:\研究生作业\模式识别作业\2023年模式识别与机器学习数据集汇总1\XLS')

# 提取身高、体重、50米成绩、肺活量四个特征
features = data[['身高(cm)', '体重(kg)', '50米成绩', '肺活量']]

# 标准化数据
scaler = StandardScaler()
normalized_data = scaler.fit_transform(features)

# 定义聚类数
num_clusters = 6

# 将特征值区间均分为10个子区间,分别取每个子区间的中值作为初始聚类中心
uniform_centers = []
for j in range(normalized_data.shape[1]):
    feature_min = np.min(normalized_data[:, j])
    feature_max = np.max(normalized_data[:, j])
    intervals = np.linspace(feature_min, feature_max, num_clusters + 1)
    centers = [np.mean([intervals[i], intervals[i+1]]) for i in range(num_clusters)]
    uniform_centers.append(centers)
uniform_centers = np.array(uniform_centers).T

# 执行聚类并绘制二维分布图
kmeans = KMeans(n_clusters=num_clusters, init=uniform_centers, random_state=0)
kmeans.fit(normalized_data)
labels = kmeans.labels_
centers = kmeans.cluster_centers_

# 绘制二维分布图
plt.scatter(normalized_data[:, 0], normalized_data[:, 1], c=labels)
plt.scatter(centers[:, 0], centers[:, 1], marker='X', c='red')
plt.title('将特征值区间均分为10个子区间的二维分布图')
plt.xlabel('标准化身高')
plt.ylabel('标准化体重')
plt.show()

# 将聚类中心还原回初始值
original_centers = scaler.inverse_transform(centers)

# 输出初始聚类中心
print('初始聚类中心(还原后):')
for i, center in enumerate(original_centers):
    print(f'聚类中心{i+1}:')
    for j, feature in enumerate(features.columns):
        print(f'{feature}: {center[j]}')
    print()

请确保您已安装pandas、scikit-learn和matplotlib库。此代码将读取指定路径的Excel文件,并提取其中的身高、体重、50米成绩和肺活量四个特征数据。然后,它将对数据进行标准化处理。接下来,代码使用将特征值区间均分为10个子区间,分别取每个子区间的中值作为初始聚类中心的方法执行C-均值聚类算法,并绘制出聚类结果的二维分布图。最后,代码输出初始聚类中心,表示为未进行数据处理前的身高、体重、50米成绩和肺活量四个特征的值。

Python C-均值聚类分析:男生女生样本数据身高、体重、50米成绩和肺活量聚类

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

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