Python C-均值聚类分析:男生女生样本数据身高、体重、50米成绩、肺活量聚类
以下是根据您的要求编写的代码,用于读取Excel表格并执行C-均值聚类算法分析,对身高、体重、50米成绩和肺活量四个特征进行聚类。首先将数据进行标准化。然后,分析不同聚类初始值对聚类结果的影响,包括在特征最大值与最小值中间取10个随机聚类中心和将特征值区间均分为10个子区间的中值作为类中心。代码将输出两种方法的初始聚类中心,并绘制出聚类结果的二维分布图。最后,代码将输出聚类过后的聚类中心,表示为未进行数据处理前的身高、体重、50米成绩和肺活量四个特征的值。/n/npython/nimport pandas as pd/nfrom sklearn.cluster import KMeans/nfrom sklearn.preprocessing import StandardScaler/nimport matplotlib.pyplot as plt/nimport numpy as np/nimport random/n/n# 读取Excel数据/ndata = pd.read_excel(r'D:/研究生作业/模式识别作业/2023年模式识别与机器学习数据集汇总1/XLS')/n/n# 提取身高、体重、50米成绩、肺活量四个特征/nfeatures = ['身高', '体重', '50米成绩', '肺活量']/n/n# 标准化数据/nscaler = StandardScaler()/nnormalized_data = scaler.fit_transform(data[features])/n/n# 定义聚类数/nnum_clusters = 2/n/n# 在特征最大值与最小值中间取10个随机聚类中心/nrandom_centers = []/nfor feature in features:/n min_value = np.min(data[feature])/n max_value = np.max(data[feature])/n centers = np.linspace(min_value, max_value, num_clusters + 1)[1:-1]/n random_centers.append(random.sample(list(centers), num_clusters))/nrandom_centers = np.array(random_centers).T/n/n# 将特征值区间均分为10个子区间,分别取每个子区间的中值作为类中心/nuniform_centers = []/nfor feature in features:/n min_value = np.min(data[feature])/n max_value = np.max(data[feature])/n intervals = np.linspace(min_value, max_value, num_clusters + 1)[1:-1]/n center = [np.mean([interval, intervals[i+1]]) for i, interval in enumerate(intervals[:-1])]/n uniform_centers.append(center)/nuniform_centers = np.array(uniform_centers).T/n/n# 执行聚类并绘制二维分布图/nfig, axs = plt.subplots(2, 1, figsize=(12, 12))/n/nfor i, centers in enumerate([random_centers, uniform_centers]):/n kmeans = KMeans(n_clusters=num_clusters, init=centers)/n kmeans.fit(normalized_data)/n labels = kmeans.labels_/n centers = kmeans.cluster_centers_/n/n # 绘制二维分布图/n axs[i].scatter(normalized_data[:, 0], normalized_data[:, 1], c=labels)/n axs[i].scatter(centers[:, 0], centers[:, 1], marker='X', c='red', s=200)/n axs[i].set_title(f'初始聚类点方法:{'随机选择' if i == 0 else '特征值区间均分'}')/n axs[i].set_xlabel('标准化身高')/n axs[i].set_ylabel('标准化体重')/n/nplt.tight_layout()/nplt.show()/n/n# 将聚类中心还原回初始值/noriginal_centers_random = scaler.inverse_transform(random_centers)/noriginal_centers_uniform = scaler.inverse_transform(uniform_centers)/n/n# 输出初始聚类中心/nprint('随机选择初始聚类点的聚类中心(还原后):')/nfor i, center in enumerate(original_centers_random):/n print(f'聚类中心{i+1}:')/n for j, feature in enumerate(features):/n print(f'{feature}: {center[j]}')/n print()/n/nprint('特征值区间均分作为初始聚类点的聚类中心(还原后):')/nfor i, center in enumerate(original_centers_uniform):/n print(f'聚类中心{i+1}:')/n for j, feature in enumerate(features):/n print(f'{feature}: {center[j]}')/n print()/n/n/n请确保您已安装pandas、scikit-learn和matplotlib库。此代码将读取指定路径的Excel文件,并提取其中的身高、体重、50米成绩和肺活量四个特征数据。然后,它将对数据进行标准化处理。接下来,代码使用随机选择和特征值区间均分两种方法选择初始聚类点,并执行C-均值聚类算法得到聚类结果。同时,代码绘制出聚类结果的二维分布图。最后,代码输出初始聚类中心和聚类过后的聚类中心,表示为未进行数据处理前的身高、体重、50米成绩和肺活量四个特征的值。
原文地址: https://www.cveoy.top/t/topic/5nS 著作权归作者所有。请勿转载和采集!