使用python实现3D聚类图

ops/2024/9/23 16:42:30/

实验记录,在做XX得分预测的实验中,做了一个基于Python的3D聚类图,水平有限,仅供参考。

一、以实现三个类别聚类为例

代码:

python">import pandas as pd
import numpy as np
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from sklearn.impute import SimpleImputer
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 读取数据
data = pd.read_csv('E:\\shujuji\\Goods\\man.csv')# 选择用于聚类的列
features = ['Weight', 'BMI', 'Lung Capacity Score', '50m Running Score',   'Standing Long Jump Score', 'Sitting Forward Bend Score',   '1000m Running Score', 'Pulling Up Score', 'Total Score']
X = data[features]# 处理缺失值
imputer = SimpleImputer(strategy='mean')
X_imputed = imputer.fit_transform(X)# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_imputed)# 应用PCA降维到3维
pca = PCA(n_components=3)
X_pca = pca.fit_transform(X_scaled)# 执行K-means聚类
# 假设我们想要3个聚类
kmeans = KMeans(n_clusters=9, random_state=0).fit(X_pca)
labels = kmeans.labels_# 将聚类标签添加到原始DataFrame中
data['Cluster'] = labels# 3D可视化聚类结果
fig = plt.figure(1, figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
unique_labels = set(labels)
colors = ['r', 'g', 'b']for k, c in zip(unique_labels, colors):class_member_mask = (labels == k)xy = X_pca[class_member_mask]ax.scatter(xy[:, 0], xy[:, 1], xy[:, 2], c=c, label=f'Cluster {k}')ax.set_title('PCA of Fitness Data with K-means Clustering')
ax.set_xlabel('Principal Component 1')
ax.set_ylabel('Principal Component 2')
ax.set_zlabel('Principal Component 3')
plt.legend()
plt.show()# 打印每个聚类的名称和对应的数据点数量
cluster_centers = kmeans.cluster_centers_
for i in range(3):cluster_data = data[data['Cluster'] == i]print(f"Cluster {i}: Count: {len(cluster_data)}")# 评估聚类效果
from sklearn import metricsprint("Silhouette Coefficient: %0.3f" % metrics.silhouette_score(X_pca, labels))

实现效果:
在这里插入图片描述

二、实现3个聚类以上,以9个类别聚类为例

python">import pandas as pd
import numpy as np
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from sklearn.impute import SimpleImputer
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 读取数据
data = pd.read_csv('E:\\shujuji\\Goods\\man.csv')# 选择用于聚类的列
features = ['Weight', 'BMI', 'Lung Capacity Score', '50m Running Score',   'Standing Long Jump Score', 'Sitting Forward Bend Score',   '1000m Running Score', 'Pulling Up Score', 'Total Score']
X = data[features]# 处理缺失值
imputer = SimpleImputer(strategy='mean')
X_imputed = imputer.fit_transform(X)# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_imputed)# 应用PCA降维到3维
pca = PCA(n_components=3)
X_pca = pca.fit_transform(X_scaled)# 执行K-means聚类
# 假设我们想要9个聚类
kmeans = KMeans(n_clusters=9, random_state=0).fit(X_pca)
labels = kmeans.labels_# 将聚类标签添加到原始DataFrame中
data['Cluster'] = labels# 3D可视化聚类结果
fig = plt.figure(1, figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
unique_labels = set(labels)
colors = ['r', 'g', 'b', 'c', 'm', 'y', 'k', 'orange', 'purple']for k, c in zip(unique_labels, colors):class_member_mask = (labels == k)xy = X_pca[class_member_mask]ax.scatter(xy[:, 0], xy[:, 1], xy[:, 2], c=c, label=f'Cluster {k}')ax.set_title('PCA of Fitness Data with K-means Clustering')
ax.set_xlabel('Principal Component 1')
ax.set_ylabel('Principal Component 2')
ax.set_zlabel('Principal Component 3')
plt.legend()
plt.show()# 打印每个聚类的名称和对应的数据点数量
cluster_centers = kmeans.cluster_centers_
for i in range(9):cluster_data = data[data['Cluster'] == i]print(f"Cluster {i}: Count: {len(cluster_data)}")# 评估聚类效果
from sklearn import metricsprint("Silhouette Coefficient: %0.3f" % metrics.silhouette_score(X_pca, labels))

实现效果;
在这里插入图片描述


http://www.ppmy.cn/ops/96462.html

相关文章

SQL注入(head、报错、盲注)

目录 【学习目标、重难点知识】 【学习目标】 【重难点知识】 1. 报错注入 1.1 那么什么是报错注入呢? 1.2 报错注入原理 extractvalue函数 updatexml函数 1.3 靶场解析 靶场练习 2. HEAD注入 2.1 相关全局变量 2.2 靶场解析 burp暴力破解 靶场练习 3…

设计模式 建造者模式

建造者模式介绍 建造者模式 (builder pattern), 也被称为生成器模式 , 是一种创建型设计模式. 定义: 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 要解决的问题 建造者模式可以将部件和其组装过程分开,一步一步创建一个复…

【Hot100】LeetCode—2. 两数相加

目录 1- 思路思路 2- 实现⭐2. 两数相加——题解思路 3- ACM 实现 原题连接:2. 两数相加 1- 思路 思路 分为几个步骤 ①数据结构:遍历指针,进位符、②遍历两个链表、③处理最后的进位符 1- 数据结构 定义 curA 和 curB 用来遍历两个链表定义 carry 记…

mcjson_根据InPath路径,查询mcjson中的值 如果该路径不存在,则创建该路径并赐予‘‘空值

//根据InPath路径,查询mcjson中的值 如果该路径不存在,则创建该路径并赐予空值 // InJson json数据 //查询json路径格式 InPath:601988\策略名1\日期5\参数2; function TForm1.GegMcJsonValue(var InJson:TMcJsonItem;InPath:string): Variant; var // InJson: TMcJsonIte…

thinkphp5漏洞分析之文件包含

目录 一、环境 二、开始研究 三、漏洞分析 四、漏洞修复 五、攻击总结 一、环境 thinkphp官网下载 创建 application/index/view/index/index.html 文件,内容随意(没有这个模板文件的话,在渲染时程序会报错) 二、开始研究 创…

计算机网络之IPv4深度解析

一.IP地址 IP地址的组成方式:网络号 主机号 可以这样理解,根据网络号找路由器,根据主机号找连着路由器的主机 早期分类的IP地址 表示如下: 其中,有些特殊的IP地址: 主机号全为0,表示本网…

HTML组件上传

<!doctype html> <html> <head> <meta charset"utf-8"> <title>无标题文档</title> </head><fieldset style"width: 200px"><legend>文本组建上传</legend><form action"#" me…

Docker Compose运行Elasticsearch

前提&#xff1a;确保你已经安装了Docker和Docker Compose 创建项目目录 创建一个目录来存放项目文件 mkdir es cd es 创建docker-compose.yml文件 touch docker-compose.yml version: 3.3 services: elasticsearch: image: docker.elastic.co/elasticsearch/elastics…