以下是根据您的要求编写的代码,用于读取 Excel 表格并执行 C-均值聚类算法分析,对标准化后的数据进行聚类,并绘制二维分布图。然后使用scaler.inverse_transform()将聚类中心还原回初始值,并输出聚类中心:

import pandas as pd
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
import 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米成绩', '肺活量']

# 标准化数据
scaler = StandardScaler()
scaled_data = scaler.fit_transform(merged_data[features])

# 定义聚类数
num_clusters = 2

# 执行聚类并绘制二维分布图
kmeans = KMeans(n_clusters=num_clusters)
kmeans.fit(scaled_data)
labels = kmeans.labels_
centers = kmeans.cluster_centers_

# 绘制二维分布图
plt.scatter(scaled_data[:, 0], scaled_data[:, 1], c=labels)
plt.scatter(centers[:, 0], centers[:, 1], marker='X', c='red')
plt.title(f'聚类数为{num_clusters}的二维分布图')
plt.xlabel('标准化身高')
plt.ylabel('标准化体重')
plt.show()

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

# 输出还原后的聚类中心
print(f'聚类数为{num_clusters}的聚类中心(还原后):')
for center in original_centers:
    print(f'身高: {center[0]}, 体重: {center[1]}, 50米成绩: {center[2]}, 肺活量: {center[3]}')

请确保您已安装 pandas、scikit-learn 和 matplotlib 库。此代码将读取指定路径的 Excel 文件,并提取其中的男生和女生的数据。然后,它使用 C-均值聚类算法对经过标准化的身高、体重、50米成绩和肺活量四个特征进行聚类分析。代码将使用聚类数为 2 进行聚类,并绘制出对应的二维分布图。同时,代码使用scaler.inverse_transform()将标准化后的聚类中心还原回初始值。最后,代码输出聚类中心,其中聚类中心表示为未进行数据处理前的身高、体重、50米成绩和肺活量四个特征的值。


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

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