机器学习无监督学习sklearn实战一:K-Means 算法聚类对葡萄酒数据集进行聚类分析和可视化( 主成分分析PCA特征降维)
本项目代码在个人github链接:https://github.com/KLWU07/Machine-learning-Project-practice/tree/main/1-Wine%20cluster%20analysis
如果对于聚类算法理论不理解可参考这篇之前文章机器学习中无监督学习方法的聚类:划分式聚类、层次聚类、密度聚类;如果降维方法主成分分析PCA降维理解可参考这篇文章机器学习数据降维方法。数据wine.data可在个人github链接下载。
一、聚类分析功能说明
1. 数据准备与预处理
从wine.data文件加载葡萄酒数据集,包含 178 个样本和 14 个特征;将类别标签从 1/2/3 重新编码为 0/1/2;提取特征数据(X)和类别标签(y)。
2. 数据降维和标准化
使用 PCA(主成分分析)将原始 13 个特征降至 3 个维度;对数据进行标准化处理,确保各特征具有相同尺度。
3. 聚类分析
使用 K-Means 算法进行聚类,指定聚类数为 3;计算每个样本到三个聚类中心的距离并打印;输出聚类结果的标签和聚类中心坐标。
4. 模型评估
计算并打印六项评估指标:
(1)同质性得分(Homogeneity)
衡量聚类结果中每个簇是否仅包含同一类别的样本(即聚类结果的 “纯度”)。若所有簇中的样本都属于同一真实类别,则同质性为 1;若簇中样本混杂不同类别,则得分越低,随机聚类时接近 0。
(2)完整性得分(Completeness)
衡量同一真实类别中的样本是否都被分配到同一个簇中(即真实类别的 “完整性”)。若同一真实类别的所有样本都被聚到同一簇,则完整性为 1;若真实类别样本被分到多个簇,则得分越低,随机聚类时接近 0。
(3)V-measure 得分
同质性(Homogeneity)和完整性(Completeness)的调和平均,用于综合评估聚类结果的准确性。
(4)调整兰德指数(ARI)
衡量聚类结果与真实类别之间的一致性,考虑了随机聚类的影响(“调整” 即扣除随机因素)。
(5)调整互信息(AMI)
衡量聚类标签与真实类别之间的互信息(MI),同样扣除了随机因素的影响。互信息(MI)表示两个变量的共享信息量,调整互信息(AMI)通过标准化使结果更易解释。
(6)轮廓系数(Silhouette Score)
衡量单个样本与其所在簇的紧密程度(内聚性)和与其他簇的分离程度(分离性),适用于评估聚类数 k 的合理性。
5. 三维可视化
创建 3D 图形展示 PCA 降维后的聚类结果;使用不同颜色区分三个聚类;用红色星形标记聚类中心;添加坐标轴标签、标题和图例;优化图形布局和视角,提升可视化效果。
二、代码演示
# 导入必要的库(保持不变)
from pandas import read_csv
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
from sklearn import metrics# 数据加载和预处理(保持不变)
filename = 'wine.data'
names = ['class', 'Alcohol', 'MalicAcid', 'Ash', 'AlclinityOfAsh', 'Magnesium', 'TotalPhenols', 'Flavanoids','NonflayanoidPhenols', 'Proanthocyanins', 'ColorIntensiyt', 'Hue', 'OD280/OD315', 'Proline']
dataset = read_csv(filename, names=names)
dataset['class'] = dataset['class'].replace(to_replace=[1, 2, 3], value=[0, 1, 2])
array = dataset.values
X = array[:, 1:13]
y = array[:, 0]# 数据降维和聚类(保持不变)
pca = PCA(n_components=3)
X_scale = StandardScaler().fit_transform(X)
X_reduce = pca.fit_transform(X_scale)model = KMeans(n_clusters=3, n_init=10)
model.fit(X_reduce)
labels = model.labels_
centers = model.cluster_centers_
print(model.transform(X_reduce))# 输出模型评估指标(保持不变)
print('%.3f %.3f %.3f %.3f %.3f %.3f' % (metrics.homogeneity_score(y, labels),metrics.completeness_score(y, labels),metrics.v_measure_score(y, labels),metrics.adjusted_rand_score(y, labels),metrics.adjusted_mutual_info_score(y, labels),metrics.silhouette_score(X_reduce, labels)
))# 绘制模型的分布图(修改部分)
fig = plt.figure(figsize=(10, 6)) # 添加图形尺寸
ax = fig.add_subplot(111, projection='3d', elev=30, azim=120) # 修改3D轴创建方式,调整视角
ax.scatter(X_reduce[:, 0], X_reduce[:, 1], X_reduce[:, 2], c=labels, cmap='tab10', s=60, alpha=0.8) # 优化散点图配置
ax.scatter(centers[:, 0], centers[:, 1], centers[:, 2], marker='*', color='red', s=300, label='Cluster Centers') # 添加图例标签# 添加坐标轴标签和标题
ax.set_xlabel('PC1')
ax.set_ylabel('PC2')
ax.set_zlabel('PC3')
ax.set_title('KMeans Clustering Result (3D PCA)')
ax.legend() # 显示图例plt.tight_layout() # 优化布局
plt.show()
0.740 0.736 0.738 0.740 0.735 0.413 #评估指标六个值
三、K-Means 算法13个特征无降维聚类3类
# 导入必要的库(保持不变)
from pandas import read_csv
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from sklearn import metrics# 数据加载和预处理(保持不变)
filename = 'wine.data'
names = ['class', 'Alcohol', 'MalicAcid', 'Ash', 'AlclinityOfAsh', 'Magnesium', 'TotalPhenols', 'Flavanoids','NonflayanoidPhenols', 'Proanthocyanins', 'ColorIntensiyt', 'Hue', 'OD280/OD315', 'Proline']
dataset = read_csv(filename, names=names)
dataset['class'] = dataset['class'].replace(to_replace=[1, 2, 3], value=[0, 1, 2])
array = dataset.values
X = array[:, 1:14] # 选择所有13个特征
y = array[:, 0]# 数据标准化(保持不变)
X_scale = StandardScaler().fit_transform(X)# 聚类(使用全部13个特征)
model = KMeans(n_clusters=3, n_init=10)
model.fit(X_scale)
labels = model.labels_
centers = model.cluster_centers_# 输出模型评估指标(保持不变)
print('%.3f %.3f %.3f %.3f %.3f %.3f' % (metrics.homogeneity_score(y, labels),metrics.completeness_score(y, labels),metrics.v_measure_score(y, labels),metrics.adjusted_rand_score(y, labels),metrics.adjusted_mutual_info_score(y, labels),metrics.silhouette_score(X_scale, labels)
))
0.879 0.873 0.876 0.897 0.875 0.285 # 评价指标
三、K-Means 算法13个特征降维维聚类3类
# 导入必要的库(保持不变)
from pandas import read_csv
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from matplotlib import pyplot as plt
import numpy as np
from sklearn import metrics# 数据加载和预处理(保持不变)
filename = 'wine.data'
names = ['class', 'Alcohol', 'MalicAcid', 'Ash', 'AlclinityOfAsh', 'Magnesium', 'TotalPhenols', 'Flavanoids','NonflayanoidPhenols', 'Proanthocyanins', 'ColorIntensiyt', 'Hue', 'OD280/OD315', 'Proline']
dataset = read_csv(filename, names=names)
dataset['class'] = dataset['class'].replace(to_replace=[1, 2, 3], value=[0, 1, 2])
array = dataset.values
X = array[:, 1:13]
y = array[:, 0]# 数据降维和聚类(修改降维部分)
pca = PCA(n_components=2) # 修改为2维降维
X_scale = StandardScaler().fit_transform(X)
X_reduce = pca.fit_transform(X_scale)model = KMeans(n_clusters=3, n_init=10)
model.fit(X_reduce)
labels = model.labels_
centers = model.cluster_centers_
print(model.transform(X_reduce))# 输出模型评估指标(保持不变)
print('%.3f %.3f %.3f %.3f %.3f %.3f' % (metrics.homogeneity_score(y, labels),metrics.completeness_score(y, labels),metrics.v_measure_score(y, labels),metrics.adjusted_rand_score(y, labels),metrics.adjusted_mutual_info_score(y, labels),metrics.silhouette_score(X_reduce, labels)
))# 绘制模型的分布图(修改为2D散点图)
plt.figure(figsize=(10, 6)) # 添加图形尺寸
plt.scatter(X_reduce[:, 0], X_reduce[:, 1], c=labels, cmap='tab10', s=60, alpha=0.8) # 优化散点图配置
plt.scatter(centers[:, 0], centers[:, 1], marker='*', color='red', s=300, label='Cluster Centers') # 添加图例标签# 添加坐标轴标签和标题
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.title('KMeans Clustering Result (2D PCA)')
plt.legend() # 显示图例plt.tight_layout() # 优化布局
plt.show()
0.740 0.738 0.739 0.726 0.737 0.521 # 六个评价指标
相关文章:

机器学习无监督学习sklearn实战一:K-Means 算法聚类对葡萄酒数据集进行聚类分析和可视化( 主成分分析PCA特征降维)
本项目代码在个人github链接:https://github.com/KLWU07/Machine-learning-Project-practice/tree/main/1-Wine%20cluster%20analysis 如果对于聚类算法理论不理解可参考这篇之前文章机器学习中无监督学习方法的聚类:划分式聚类、层次聚类、密度聚类&…...

可灵2.1 vs Veo 3:AI视频生成谁更胜一筹?
在Google发布Veo 3几天后,可灵显然感受到了压力,发布了即将推出的视频模型系列可灵 2.1的早期体验版。 据我了解,有三种不同的模式: 可灵 2.1 标准模式: 720p分辨率 仅支持图像转视频(生成更快,一致性更好) 5秒视频仍需20积分 可灵 2.1 专业模式: 1080p分辨率 仅在图…...
C语言之编译器集合
C语言有多种不同的编译器,以下是常见的编译工具及其特点: 一、主流C语言编译器 GCC(GNU Compiler Collection) 特点:开源、跨平台,支持多种语言(C、C、Fortran 等)。 使用场景&…...
计量表计的演进历程与技术变革:从机械到物联网时代
前言 近期在用python写一些关于计量表计数据集采模型。主要就是针对计量表计采集的相关数据,按照通讯协议格式进行解析,最后根据自己需求,编制界面进行数据的展示,存储,以及运算的内容。现在就个人关于计量表计的一点…...
更换Homebrew 源
以下是查看和修改 Homebrew 源的详细步骤,适用于需要切换到国内镜像以加速下载的场景: 1. 查看当前 Homebrew 源 # 查看 brew 主仓库地址 git -C "$(brew --repo)" remote get-url origin# 查看 homebrew-core 仓库地址 git -C "$(brew…...
人工智能在智能供应链中的创新应用与未来趋势
随着全球化的加速和市场竞争的加剧,供应链管理的复杂性和重要性日益凸显。传统的供应链管理面临着诸多挑战,如需求预测不准确、库存管理效率低下、物流配送延迟等。智能供应链通过引入人工智能(AI)、物联网(IoT&#x…...
鸿蒙OSUniApp自定义手势识别与操作控制实践#三方框架 #Uniapp
UniApp自定义手势识别与操作控制实践 引言 在移动应用开发中,手势交互已经成为提升用户体验的重要组成部分。本文将深入探讨如何在UniApp框架中实现自定义手势识别与操作控制,通过实际案例帮助开发者掌握这一关键技术。我们将以一个图片查看器为例&…...

LLM优化技术——Paged Attention
在Transformer decoding的过程中,需要存储过去tokens的所有Keys和Values,以完成self attention的计算,称之为KV cache。 (1)KV cache的大小 可以计算存储KV cache所需的内存大小: batch * layers * kv-he…...

推荐几个不错的AI入门学习视频
引言:昨天推荐了几本AI入门书(AI入门书),反响还不错。今天,我再推荐几个不错的AI学习视频,希望对大家有帮助。 网上关于AI的学习视频特别多。有收费的,也有免费的。我今天只推荐免费的。 我们按…...

采用Bright Data+n8n+AI打造自动化新闻助手:每天5分钟实现内容日更
一、引言 在信息爆炸的时代,作为科技领域的内容创作者,我每天都要花费2-3小时手动收集行业新闻、撰写摘要并发布到各个社群。直到我发现Bright Datan8nAI这套"黄金组合",才真正实现了从"人工搬运"到"智能自动化&qu…...

Real SQL Programming
目录 SQL in Real Programs Options Stored Procedures Advantages of Stored Procedures Parameters in PSM SQL in Real Programs We have seen only how SQL is used at the generic query interface --- an environment where we sit at a terminal and ask queries …...

Sentinel限流熔断机制实战
1、核心概念 1.1、流量控制 流量控制是为了 防止系统被过多的请求压垮,确保资源合理分配并保持服务的可用性,比如对请求数量的限制。 流量控制的 3 个主要优势: 防止过载:当瞬间涌入的请求量超出系统处理能力时,会…...
Java 数据处理 - 数值转不同进制的字符串(数值转十进制字符串、数值转二进制字符串、数值转八进制字符串、数值转十六进制字符串)
一、数值转十进制字符串 调用 String.valueOf() int num 123;String decStr String.valueOf(num);System.out.println(decStr);# 输出结果123调用 Integer.toString(),指定进制 int num 123;String decStr Integer.toString(num);System.out.println(decStr)…...

79. 单词搜索-极致优化,可行性剪枝和顺序剪枝
给你一个目标字符串,和一个二维字符数组,判断在数组中是否能找到目标字符串。 例如,board [["A","B","C","E"],["S","F","C","S"],["A","…...

ICDMC 2025:创新媒体模式,迎接数字时代的挑战
2025年数字媒体与通讯国际会议将在风景秀丽的中国山东举行。此次会议致力于促进数字媒体和通讯领域的国际合作与交流,为相关产业发展提供智力支持和技术引领。我们诚挚邀请来自世界各地的学者、研究人员和行业专家参加本次会议,共同探讨前沿问题和发展方…...
深入解析C#多态性:基类引用、虚方法与覆写机制
基类引用的本质 在C#面向对象编程中,派生类对象由基类部分和扩展部分组成。通过基类引用访问派生类对象时,实际是在进行「观察视角」的转换: MyDerivedClass derived new MyDerivedClass(); MyBaseClass mybc (MyBaseClass)derived; //…...

SoftThinking:让模型学会模糊思考,同时提升准确性和推理速度!!
摘要:人类的认知通常涉及通过抽象、灵活的概念进行思考,而不是严格依赖离散的语言符号。然而,当前的推理模型受到人类语言边界的限制,只能处理代表语义空间中固定点的离散符号嵌入。这种离散性限制了推理模型的表达能力和上限潜力…...
C++中 newdelete 与 mallocfree 的异同详解
C中 new/delete 与 malloc/free 的异同详解 在 C 开发中,动态内存管理是重中之重!new/delete 和 malloc/free 都是用来动态申请和释放内存的,但它们有本质的区别。今天我们就来彻底搞懂它们的区别,避免内存泄漏和 undefined beha…...

晨控CK-UR08与欧姆龙PLC配置Ethernet/IP通讯连接操作手册
晨控CK-UR08与欧姆龙PLC配置Ethernet/IP通讯连接操作手册 晨控CK-UR08系列作为晨控智能工业级别RFID读写器,支持大部分工业协议如RS232、RS485、以太网。支持工业协议Modbus RTU、Modbus TCP、Profinet、EtherNet/lP、EtherCat以及自由协议TCP/IP等。 本期主题:围绕…...
STM32入门教程——LED闪烁LED流水灯蜂鸣器
前言 本教材基于B站江协科技课程整理,适合有C语言基础、刚接触STM32的新手。它梳理了STM32核心知识点,帮助大家把C语言知识应用到STM32开发中,更高效地开启STM32学习之旅。 一、硬件电路搭建与工程配置 电路连接要点 LED 闪烁 / 流水灯&…...
鸿蒙OSUniApp 实现的数据可视化图表组件#三方框架 #Uniapp
UniApp 实现的数据可视化图表组件 前言 在移动互联网时代,数据可视化已成为产品展示和决策分析的重要手段。无论是运营后台、健康监测、还是电商分析,图表组件都能让数据一目了然。UniApp 作为一款优秀的跨平台开发框架,支持在鸿蒙…...
Tornado WebSocket实时聊天实例
在 Python 3 Tornado 中使用 WebSocket 非常直接。你需要创建一个继承自 tornado.websocket.WebSocketHandler 的类,并实现它的几个关键方法。 下面是一个简单的示例,演示了如何创建一个 WebSocket 服务器,该服务器会接收客户端发送的消息&a…...
HarmonyOS鸿蒙与React Native的融合开发模式以及能否增加对性能优化的具体案例
鸿蒙与React Native的融合开发模式 一、技术架构设计 底层适配层 通过HarmonyOS的NDK封装原生能力(如分布式软总线、AI引擎) 使用React Native的Native Modules桥接鸿蒙API(需重写Java/Objective-C部分为ArkTS) 组件映射机制 …...
化学分析原理。
化学分析关心的要素:a.空间结构(晶格结构、胶体结构、玻璃体结构、膜结构,宏观与微观两个层面,化学键与键角以及结构强度,结合能以及物质内聚力研究,主要目的是化学建模),b.成分与组…...

开源即战力!从科研到商用:Hello Robot 移动操作机器人Stretch 3多模态传感融合(RGB-D/激光/力矩)控制方案
科研领域对机器人技术的需求日益增长,Hello Robot的移动操作机器人Stretch 3凭借其灵活性和性能满足了这一需求。其模块化设计、开源架构和高精度传感控制能力,使科研人员能够顺利开展实验。Stretch 3以其独特的移动操作能力,为科研探索提供了…...

元胞自动机(Cellular Automata, CA)
一、什么是元胞自动机(Cellular Automata, CA) 元胞自动机(CA) 是一种基于离散时间、离散空间与规则驱动演化的动力系统,由 冯诺依曼(John von Neumann) 于1940年代首次提出,用于模…...

智能手表单元测试报告(Unit Test Report)
📄 智能手表单元测试报告(Unit Test Report) 项目名称:Aurora Watch S1 模块版本:Firmware v1.0.4 测试阶段:模块开发完成后的单元测试 报告编号:AW-S1-UTR-2025-001 测试负责人:赵磊(软件架构师) 报告日期:2025-xx-xx 一、测试目的 通过对智能手表关键功能模块进…...

微深节能 码头装卸船机定位与控制系统 格雷母线
微深节能码头装卸船机定位与控制系统:格雷母线技术赋能港口作业智能化升级 在现代化港口散货装卸作业中,装卸船机是连接船舶与陆域运输的核心枢纽设备。传统装卸船机依赖人工操作,存在定位偏差大、动态协同难、安全风险高等痛点。微深节能基于…...
基于matlab遗传算法和模拟退火算法求解三维装箱优化问题
一、遗传算法和模拟退火算法求解三维装箱优化问题 遗传算法(Genetic Algorithm)和模拟退火算法(Simulated Annealing Algorithm)都是优化算法,可以用来求解三维装箱优化问题。 遗传算法原理和流程: 1 原理…...
在Spring Boot中集成Redis进行缓存
在Spring Boot中集成Redis进行缓存,主要分为以下步骤: 1. 添加依赖 在pom.xml中添加Redis和缓存相关的依赖: <!-- Spring Boot Redis Starter --> <dependency><groupId>org.springframework.boot</groupId><ar…...