使用python实现3D聚类图

news2024/11/13 22:43:59

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

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

代码:

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 metrics

print("Silhouette Coefficient: %0.3f" % metrics.silhouette_score(X_pca, labels))

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

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

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 metrics

print("Silhouette Coefficient: %0.3f" % metrics.silhouette_score(X_pca, labels))

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2055464.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Prometheus】监控系统

目录 一.Prometheus概述 1.Prometheus的认识与了解 2.Prometheus的特点 3.Prometheus存储引擎 TSDB 的特点优势 4.Prometheus 的生态组件 Prometheus server Client Library Exporters Service Discovery Alertmanager Pushgateway Grafana 5.Prometheus 的…

二叉树(四)

一、二叉树的性质 二、练习 1.某二叉树共有399个节点,其中有199个度为2的节点,则二叉树中的叶子节点数为( )。 A.不存在这样的树 B.200 C.198 D.199 答案:B 参考二叉树的性质第三条 2.在具有2…

如何将系统/数据/程序从一个硬盘驱动器迁移到另一个硬盘驱动器

何时需要硬盘迁移软件 大多数时候,计算机用户考虑迁移硬盘的原因是: 旧硬盘太小,无法存储不断增加的数据,您需要将这些数据转移到更大的硬盘上。 您购买了比当前硬盘更大更快的新硬盘,并且想要将程序和数据移动到新硬…

数据库分库分表的介绍

为什么要分库分表 把存于一个库的数据分散到多个库中,把存于一个表的数据分散到多个表中。如果说读写分离是为了分散数据库读写操作压力,分库分表就是为了分散存储压力,一般情况下,单表数据量到达千万级别,就可以考虑…

怎么才能真正学好网络安全?一文搞懂网络安全体系

文章目录 前言 网络安全研发具体干什么?二进制安全具体干什么?网络渗透具体干什么?网络渗透方向的工作有下面几个方向:网络安全的学习路线网络安全的学习路线大纲网络安全初体验学习方法 如何入门学习网络安全【黑客】 【----帮助…

suricata编译安装和运行

目录 编译安装 运行 调试 编译安装 apt -y install autoconf automake build-essential cargo \ libjansson-dev libpcap-dev libpcre2-dev libtool \ libyaml-dev make pkg-config rustc zlib1g-dev apt-get install libpcre3-dev wget https://www.openin…

Python编码系列—Python数据可视化:Matplotlib与Seaborn的实战应用

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

google浏览器chrome用户数据(拓展程序,书签等)丢失问题

一、问题背景 我出现这个情况的问题背景是:因为C盘块满了想清理一部分空间(具体看这:windows -- C盘清理_c盘softwaredistribution-CSDN博客),于是找到了更改AppDatta这个方法,但因为,当时做迁移…

ZooKeeper 的四种 Znode (数据节点)类型

ZooKeeper 的四种 Znode (数据节点)类型 1. PERSISTENT(持久节点)2. EPHEMERAL(临时节点)3. PERSISTENT_SEQUENTIAL(持久顺序节点)4. EPHEMERAL_SEQUENTIAL(临时顺序节点…

Zookeeper 如何保证事务的顺序一致性

Zookeeper 如何保证事务的顺序一致性 1、ZXID:唯一事务标识2、两阶段提交协议3、同步与复制 💖The Begin💖点点关注,收藏不迷路💖 Apache ZooKeeper 通过几个关键机制来确保事务的顺序一致性,这些机制包括全…

【正点原子K210连载】第三十一章 视频播放实验 摘自【正点原子】DNK210使用指南-CanMV版指南

1)实验平台:正点原子ATK-DNK210开发板 2)平台购买地址https://detail.tmall.com/item.htm?id731866264428 3)全套实验源码手册视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban 第三十一章 视频播放…

案例分析:多线程锁该如何优化?

我们在前面几篇中,了解到可以使用 ThreadLocal,来避免 SimpleDateFormat 在并发环境下引起的时间错乱问题。其实还有一种解决方式,就是通过对parse 方法进行加锁,也能保证日期处理类的正确运行 其实锁对性能的影响,是非…

.NET系列 定时器

net一共4种定时器 System.Windows.Forms.Timer 类型 》》WinForm专用System.Windows.Threading.DispatcherTime类型》》WPF专用System.Threading.Timer类型》》》它使用 ThreadPool 线程来执行定时操作System.Timers.Timer类型 》》这种很老了。 它使用基于底层计时…

leetcode刷题-动态规划part02

代码随想录动态规划part02|62.不同路径 、63.不同路径II 、343. 整数拆分、 62.不同路径63.不同路径 II343. 整数拆分 再看本题思路并不容易想,一刷建议可以跳过。如果学有余力,可以看视频理解一波。 96.不同的二叉搜索树 跳过 62.不同路径 leetcode题目…

Netty源码小窥探(一)

记录背景 最近在学习Netty,阅读了部分源码,记录一下笔记,方便自己回顾和也希望能作为初学的小伙伴们的部分参考。 本次Netty源码小窥探会是一个小合集,因为个人能力有限,介绍程度肯定不会太深奥,个人是基…

记录|链接MySQL数据库实现学生管理系统

目录 前言一、管理系统的后台数据库1.1 创建DB库1.2 创建login表和student表login表student表 二、窗体创建1.1 VS项目框架1.2 窗口1设计:登录窗口所需控件界面效果 1.3 窗口2设计:学生信息管理界面添加新界面所需控件界面效果 1.4 窗口3设计&#xff1a…

用低代码平台搭建了一套贷前进件系统,1天搞定!

贷前进件系统是什么 贷前进件系统是指金融机构(如银行、消费金融公司等)在贷款申请过程中,用于收集、整理、审核和管理借款人申请资料的系统。该系统是贷款流程中的重要环节,主要作用在于提高贷款申请的处理效率,降低…

滑动变阻器的未来发展趋势和前景如何?是否有替代品出现?

滑动变阻器是常见的电子元件,主要用于调节电路中的电阻值。随着科技的不断发展,滑动变阻器的未来发展趋势和前景也引起了广泛关注。 滑动变阻器的未来发展将更加注重智能化,随着物联网、人工智能等技术的快速发展,滑动变阻器也将与…

Transformer中的位置编码:绝对位置编码、相对位置编码与旋转位置编码

1. 引言 Transformer模型自2017年提出以来,凭借其在序列到序列任务中的优异表现,迅速成为自然语言处理(NLP)领域的主流模型。与传统的循环神经网络(RNN)不同,Transformer模型完全基于自注意力机…

Java 入门指南:反射机制

RTTI RTTI(Run-Time Type Identification)是一种在运行时确定对象类型的机制。它是一种编程语言特性,主要用于在运行时动态识别和处理对象的实际类型。 通过 RTTI,可以在运行时根据对象的实际类型执行相应的操作。这在处理多态对…