聚类分析 #数据挖掘 #Python

聚类分析(Cluster Analysis)是一种无监督机器学习方法,主要用于数据挖掘和数据分析中,它的目标是将一组对象或观测值根据它们之间的相似性或相关性自动分组,形成不同的簇或类别。聚类分析并不预先知道每个观测值的具体标签,而是基于数据本身的内在结构进行分组。

聚类过程主要包括以下几个步骤:

  1. 选择算法:常见的聚类算法有K-means、层次聚类(如凝聚层次聚类和分裂层次聚类)、DBSCAN、谱聚类等。
  2. 初始化:确定初始聚类中心或簇的数量。
  3. 迭代:根据所选算法,计算每个观测值与当前簇中心的距离,将其分配到最接近的簇;然后更新簇的中心点。
  4. 评估:根据簇内的相似性和簇间的差异性(如轮廓系数、Calinski-Harabasz指数等)评估聚类效果。
  5. 停止条件:当满足预定的停止标准(如达到预设的迭代次数或聚类不再变化)时,结束聚类过程。

在Python中,有许多库支持聚类分析,其中最常用的是scikit-learn

scikit-learn中的主要模块cluster提供了多种聚类算法,如:

  1. K-Means:这是一种基于距离的聚类算法,通过迭代将数据点分配到最近的质心形成的簇中。
  2. 层次聚类(Hierarchical Clustering):包括凝聚式(自下而上合并)和分裂式(自上而下分裂)两种方法,如单链接、全连接、平均链接和 ward 方法。
  3. DBSCAN:密度聚类算法,能识别任意形状的簇,并对噪声有很好的处理能力。
  4. 谱聚类(Spectral Clustering):利用数据的特征图(如拉普拉斯矩阵)进行聚类,适用于非凸形状的簇和高维数据。
  5. GMM(高斯混合模型):一种概率模型,常用于生成模型和混合分布的聚类。

这里我们主要运用K-Means:

K均值聚类是一种常用的无监督机器学习算法,用于数据分群。它的目标是将一组对象(通常称为数据点)划分为K个互不重叠的类别,每个类别由一个中心点(聚类中心)代表,目的是最小化所有数据点与其所属聚类中心的距离之和,通常采用欧几里得距离作为度量。

下面是K均值聚类的主要步骤:

  1. 选择K值:确定要创建的聚类数量K。
  2. 初始化聚类中心:随机从数据集中选择K个点作为初始聚类中心。
  3. 分配数据点:每个数据点被分配到最近的聚类中心。
  4. 更新聚类中心:根据当前分配的数据点计算每个聚类的新中心。
  5. 迭代过程:重复步骤3和4,直到聚类中心不再改变,或达到预设的最大迭代次数。


1、读取NBA球员数据:players.csv。

# 读取球员数据
import pandas as pd
players = pd.read_csv('players.csv')
players.head()

查看数据形式:

 

2、提取得分、命中率、三分命中率和罚球命中率4个指标作为球员聚类的依据,并对指标数据进行标准化。


# 数据标准化处理
from sklearn import preprocessing
X = preprocessing.minmax_scale(players[['得分','罚球命中率','命中率','三分命中率']])
# 将数组转换为数据框
X = pd.DataFrame(X, columns=['得分','罚球命中率','命中率','三分命中率'])# 绘制得分与命中率的散点图
import seaborn as sns
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei']    #指定默认字体
plt.rcParams['axes.unicode_minus'] = False      #用来正常显示负号sns.lmplot(x = '得分', y = '命中率', data = players, fit_reg = False, scatter_kws = {'alpha':0.8, 'color': 'steelblue'})
plt.show()

 

3、绘制簇内离差平方和与K的关系图,使用拐点法确定合适的K值(参考:K可以取3、4、5之一)。


import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
#构造自定义函数————用于绘制不同k值和对应总的簇类离差平方和的折线图
def k_SSE(X,clusters):K = range(1,clusters+1)    #选择连续的k种不同的值TSSE = []    #构建空列表用于存储总的簇内离差平方和for k in K:SSE = []        #用于存储各个簇内离差平方和kmeans = KMeans(n_clusters=k)kmeans.fit(X)labels = kmeans.labels_        #返回簇标签centers = kmeans.cluster_centers_        #返回簇中心#计算各簇样本的离差平方和,并保存到列表中for label in set(labels):SSE.append(np.sum((X.loc[labels == label,]-centers[label,:])**2))TSSE.append(np.sum(SSE))        #计算总的簇内离差平方和#中文和负号的正常显示plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']plt.rcParams['axes.unicode_minus'] = False#设置绘图风格plt.style.use('ggplot')# 绘制 K 的个数与 GSSE 的关系plt.plot(K, TSSE, 'b*-')plt.xlabel('簇的个数')plt.ylabel('簇内离差平方和之和')# 显示图形plt.show()# 使用拐点法选择最佳的 K 值
k_SSE(X, 15)

 

4、取合适的K值,使用得分与命中率两个指标绘制聚类效果图。


# 将球员数据集聚为 3 类
kmeans = KMeans(n_clusters = 3)
kmeans.fit(X)
# 将聚类结果标签插入到数据集 players 中
players['cluster'] = kmeans.labels_
# 构建空列表,用于存储三个簇的簇中心
centers = []
for i in players.cluster.unique():centers.append(players.loc[players.cluster == i,['得分','罚球命中率','命中率','三分命中率']].mean())
# 将列表转换为数组,便于后面的索引取数
centers = np.array(centers)
# 绘制散点图
sns.lmplot(x = '得分', y = '命中率', hue = 'cluster',data = players,markers = ['^','s','o'],fit_reg = False,scatter_kws = {'alpha':0.8},legend = False)
# 添加簇中心
plt.scatter(centers[:,0], centers[:,2], c='k', marker = '*', s = 180)
plt.xlabel('得分')
plt.ylabel('命中率')
# 图形显示
plt.show()

 

5、绘制雷达图。

(提示:雷达图要在操作系统下打开)


# 雷达图
import pygal
# 调用模型计算出来的簇中心
centers_std = kmeans.cluster_centers_
# 设置填充型雷达图
radar_chart = pygal.Radar(fill = True)
# 添加雷达图各顶点的名称
radar_chart.x_labels = ['得分','罚球命中率','命中率','三分命中率']# 绘制雷达图代表三个簇中心的指标值
radar_chart.add('C1', centers_std[0])
radar_chart.add('C2', centers_std[1])
radar_chart.add('C3', centers_std[2])
# 保存图像
radar_chart.render_to_file('radar_chart.svg')

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

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

相关文章

可燃气体报警器:户外工地安全预警先锋,定期检定保障安全无忧

在现代化的建设进程中,户外工地作为城市发展的重要推动力,其安全问题一直备受关注。 工地现场往往涉及多种易燃易爆气体,一旦发生泄漏,后果不堪设想。因此,如何有效预警并防范可燃气体泄露,成为户外工地安…

新手小白从Windows转Linux,或许manjaro更适合你!

网管小贾 / sysadm.cc 野生动物园里有一块并不怎么大的水塘,一群火烈鸟就生活在这里。 它们在水塘里悠闲地漫步,饿了就找些小鱼小虾,困了就伸个懒腰、打个盹。 就这样日复一日,过着百无聊赖的日子,直到有一天…… 这…

easyexcel和poi版本冲突报错深入解析v2

easyexcel报错解决 问题 项目由poi改用easyexcel,报错如下: java.lang.NoSuchMethodError: ‘org.apache.poi.ss.usermodel.CellType org.apache.poi.ss.usermodel.Cell.getCellType()’ 原因 easyexcel中的poi和项目原本的poi版本冲突问题。 由于之前做…

数据结构---排序算法

个人介绍 hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的…

数据中心机房建设标准

数据中心机房是专门设计用于存放、管理和维护计算机服务器、网络设备、存储设备以及其他IT基础设施的物理空间。它们是信息化社会的基石,为各种在线服务提供硬件和网络支持。数据中心机房的主要功能包括数据存储、处理、传输以及提供计算资源。 数据中心机房建设涉及…

用python绘制三维条形图

用python绘制三维条形图 三维条形图特点与用途 效果代码 三维条形图 三维条形图是一种在三维空间中表示数据的方法,它通过垂直或水平的条形长度来显示类别之间的差异。与传统的二维条形图相比,三维条形图增加了深度或高度的维度,使得数据可视…

数理化解题研究杂志社数理化解题研究编辑部2024年第12期目录

教学设计与教学策略研究 聚焦数学思想 贯彻核心素养——以“函数的奇偶性”的教学设计为例 宋方宁;李硕; 2-4 高中数学课堂案例研究——探讨“教-学-评”一体化模式的应用 赖琰媛;曹小燕; 5-7 漫谈体验式教学在高中数学教学中的运用策略 林素珍; 15-17《数理化解题…

洁盟超声波清洗机怎么样?2024爆款机型声波清洗机测评、一篇看懂

随着现在近视率的逐年上升,戴眼镜的人群越来越多!当然他们也在面临着一个眼镜清洗的问题!因为长期佩戴眼镜,镜框还有镜片上面都是会积累灰尘、油污、污垢以及细菌,脏脏的不仅令眼镜不美观,同时在长期的佩戴…

【嵌入式】SD NAND:SD卡的集成与优化

嵌入式SD卡,也称为SD NAND或贴片式SD卡,是一种专为空间受限的设备设计的存储解决方案。这种存储卡与传统的SD卡不同,它采用贴片式封装,可以直接焊接到设备的PCB上,从而为电子设备提供内置存储功能。以下是嵌入式SD卡的…

简单介绍vim

文章目录 前言一、Vim的特点二、安装Vim三、设置Vim配置文件的位置:编辑配置文件:添加配置选项:保存并退出编辑器:快速配置验证设置: 总结 前言 Vim是一款强大的文本编辑器,被广泛用于各种编程和文本编辑任…

canvas实现画布拖拽效果 适配Uniapp和Vue (开箱即用)

需求:我司是做AIGC项目最近和地铁项目有关需要实现海报效果图,并且需要使用画布拖拽和修改上传删除等等功能 当时连续加班花了10个工作日搓出来 实现挺简单的但是Canvas数据处理还是挺麻烦的 大概功能如图下 首先我们需要引入Fabric.js 这个库封装好了原生的Canva…

C#唯一进程的处理Winform/WPF

C#唯一进程的处理 1.使用进程(Process)判断winformWPF执行效果: 2.使用互斥体(Metux)实现winformWPF实现效果: 在C#客户端(Winform/WPF)开发过程中,有的情况需要确保程序…

三分钟搞懂AI Agent是什么!

点击下方“JavaEdge”,选择“设为星标” 第一时间关注技术干货! 免责声明~ 任何文章不要过度深思! 万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案…

mindmapper17软件最新版下载-MindMapper17(思维导图软件)下载附加详细安装步骤

​​MindMapper​​​是一款专业的可视化思维导图软件,通过智能绘图方法,在管理信息和处理工作流程中,帮助提高组织、审查、合作、分享和交流能力。《思维导图三招十八式》作者也一直力荐 MindMapper这款软件。思维导图是表达发射性思维的有效…

《详解》如何在ROS中建立MQTT通信

观前提醒:本期主要内容为ROS中MQTT通信节点的编程,和ROS部分底层通信机制的浅析 一、复习一下:ROS通信机制&MQTT通信异同点 ROS通信机制概述 ROS中的主要通信机制有以下几种: 话题 (Topics) 发布/订阅模型(Pu…

Android 断点续传基础之单线程下载

**遇到的问题:**在这因为返回值的问题烦躁了一下,有可能出现空指针的异常,已经提出成文章了 请参考http://blog.csdn.net/qq_27489007/article/details/53523378 文件关系图 断点续传流程图 开始撸代码(主要代码) /** 普通断点续传 */ …

AI 生成文本工具推荐(AI 对话/AI 聊天机器人/AI 写作)

① boardmix AI boardmix AI,是一个在线的智能 AI 对话 App,打开浏览器即可在线使用,支持 AI 多轮连续对话,提供 AI 角色切换、AI 多语言翻译、一键唤出、可视化表达及多人协作功能。 boardmix AI 预置了多个不同的 AI 角色&…

⭐Unity 控制任意UI的渐隐渐显

使用脚本之前先给要控制的UI加上CanvasGroup组件 解释: 这个脚本使用协程来逐渐改变CanvasGroup的alpha值,从而实现渐隐和渐显的效果。 Mathf.Lerp函数用于在指定的时间内平滑地从当前透明度过渡到目标透明度。 通过调用FadeIn和FadeOut方法,你可以在任…

eNSP学习——配置DHCP中继

目录 主要命令 原理概述 实验目的 实验内容 实验拓扑 实验编址 实验步骤 1、基本配置 2、搭建OSPF网络 3、配置DHCP服务器 4、配置DHCP中继 5、配置PC获取地址方式为DHCP 主要命令 //配置指定DHCP服务器的方法 //方法一:在面向PC的接口下直接配置DHCP服…