KMeans实战——聚类和轮廓系数评估啤酒数据集

embedded/2025/3/16 21:17:32/

原理:

       在数据分析和机器学习中,聚类是一种常用的无监督学习方法,用于将数据集中的样本划分为若干个簇,使得同一簇内的样本相似度较高,而不同簇之间的样本相似度较低。KMeans算法是其中最常用的聚类算法之一。本文将介绍如何使用KMeans算法对啤酒数据集进行聚类,并使用轮廓系数(Silhouette Score)来评估聚类结果的质量。

1. 数据准备

        首先,我们需要导入必要的库并加载数据集。本文使用的数据集是一个啤酒数据集,包含啤酒的热量(calories)、钠含量(sodium)、酒精含量(alcohol)和成本(cost)等特征。


import pandas as pd
from sklearn.cluster import KMeans
from sklearn import metrics
import matplotlib.pyplot as plt# 加载数据集
beer = pd.read_table('data.txt', sep=' ', encoding='utf-8', engine='python')# 选择特征
X = beer[['calories', 'sodium', 'alcohol', 'cost']]

 2. 轮廓系数简介

       轮廓系数是一种用于评估聚类质量的指标,其值介于-1和1之间。轮廓系数越接近1,表示聚类结果越好;越接近-1,则表示聚类结果可能存在问题。轮廓系数的计算公式如下:

其中:

3. 计算不同簇数的轮廓系数

为了找到最佳的簇数,我们可以尝试不同的簇数,并计算每个簇数对应的轮廓系数。代码如下:


scores = []
for k in range(2, 10):labels = KMeans(n_clusters=k).fit(X).labels_  # 聚类score = metrics.silhouette_score(X, labels)  # 计算轮廓系数scores.append(score)print(scores)

4. 绘制轮廓系数随簇数变化的曲线

为了更直观地观察轮廓系数随簇数的变化,我们可以绘制轮廓系数曲线:


plt.plot(list(range(2, 10)), scores)
plt.xlabel('Number of Clusters')
plt.ylabel('Silhouette Score')
plt.show()

通过观察曲线,我们可以选择一个轮廓系数较高的簇数作为最终的聚类数。

 5. 进行聚类并评估结果

假设我们选择簇数为2,进行聚类并评估结果:


# 聚类
km = KMeans(n_clusters=2).fit(X)
beer['cluster'] = km.labels_# 计算轮廓系数
score = metrics.silhouette_score(X, beer.cluster)
print(score)

6、运行结果

 总结

        本文介绍了如何使用KMeans算法对啤酒数据集进行聚类,并使用轮廓系数来评估聚类结果的质量。通过尝试不同的簇数并计算轮廓系数,我们可以选择一个合适的簇数,从而得到较好的聚类结果。轮廓系数是一个非常有用的指标,可以帮助我们判断聚类结果的好坏。


http://www.ppmy.cn/embedded/173158.html

相关文章

Centos 7 安装达梦数据库

一、环境准备 1. 确认操作系统的版本和数据库的版本是否一致 cat /etc/redhat-release 2. 关闭防火墙 查看防火墙状态 firewall-cmd --state 停止firewall systemctl stop firewalld.service 禁止firewall开机启动 systemctl disable firewalld.service 3. 修改文件l…

夜莺监控 v8.0 新版通知规则 | 对接企微告警

对新版本通知规则还不太了解的用户可以阅读文章:《夜莺监控巨大革新:抽象出通知规则,增强告警通知的灵活性》。下面我们将以企微通知为例,介绍如何使用新版通知规则来对接企微通知。 上图是通知规则对接企微通知的示意逻辑图。 在…

说说 CDN 的工作原理,它在前端性能优化中起到什么作用?

说说 CDN 的工作原理,它在前端性能优化中起到什么作用? CDN 的工作原理 CDN 全称是 Content Delivery Network,即内容分发网络。它的核心目的是让用户能更快地获取到内容,其工作原理如下: 用户请求内容:…

如何在Futter开发中做性能优化?

目录 1. 避免不必要的Widget重建 问题:频繁调用setState()导致整个Widget树重建。 优化策略: 2. 高效处理长列表 问题:ListView一次性加载所有子项导致内存暴涨。 优化策略: 3. 图片加载优化 问题:加载高分辨率图片导致内存溢出。 优化策略: 4. 动画性能优化 …

Docker Desktop 安装与使用详解

目录 1. 前言2. Docker Desktop 安装2.1 下载及安装2.2 登录 Docker 账号2.3 进入 Docker Desktop 主界面 3. Docker 版本查看与环境检查3.1 查看 Docker Desktop 支持的 Docker 和 Kubernetes 版本3.2 检查 Docker 版本 4. Docker Hub 和常用镜像管理方式4.1 使用 Docker Hub4…

计算机网络-网络存储技术

分类 直连式存储(DAS)(SAS): 也叫服务器附加存储,将存储设备通过I/O设备(一般常用SCSI)附加在服务器上。本身是硬件的堆叠 无法跨平台进行存储 网络附加存储(NAS&…

深入理解静态与动态代理设计模式:从理论到实践

静态代理设计模式 1.为什么需要代理设计模式? javaEE分层开发中,哪个层次对于我们来讲最重要 DAO---->Service---->Controller JavaEE分层中,最为重要的是Service层 Service层包含了那些代码 Service层核心功能(几十行 上百代码) 额外…

Protobuf 学习与实践

Protobuf 学习与实践 Protobuf 学习与实践一、安装 Protobuf1. 在 Ubuntu 上下载 Protobuf 编译器1.1 下载地址与版本选择1.2 安装依赖1.3 下载与解压 2. 安装 Protobuf2.1 配置与编译2.2 增大 Swap 分区(若需要)2.3 配置环境变量(若自定义安…