深入解析K-means聚类:从原理到调优实战

一、聚类分析与K-means的核心价值

        在无监督学习领域,聚类分析是探索数据内在结构的核心技术。​K-means算法因其简洁高效成为最广泛使用的聚类方法,在客户分群、图像压缩、生物信息学等领域应用广泛。其核心目标是将数据集划分为K个簇,实现“簇内相似度高,簇间差异显著”的理想状态。接下来我们将深入解析这一经典算法的原理、实现与优化技巧。


二、K-means原理与数学本质

算法工作流程

K-means通过迭代优化实现聚类,其核心步骤为:

  1. 初始化中心​:随机选择K个数据点作为初始质心(可优化)
  2. 分配样本​:计算每个点到质心的距离,分配到最近簇
  3. 更新质心​:重新计算各簇样本均值作为新质心
  4. 迭代收敛​:重复2-3步直至质心变化小于阈值或达到最大迭代次数

数学表示

目标函数(SSE)是算法优化的核心:

其中:

  • Ci​ 表示第i个簇
  • μi​ 是该簇质心
  • ∥x−μi​∥ 为欧氏距离

关键点​:K-means本质是通过迭代最小化SSE实现聚类。算法复杂度为O(n⋅K⋅t),其中n为样本数,K为簇数,t为迭代次数。

距离度量选择

虽然默认使用欧氏距离但可根据数据类型替换为:

  • 曼哈顿距离:(适用于高维稀疏数据)
  • 余弦相似度:​(适用于文本向量)

三、API参数深度解析(sklearn.cluster.KMeans)

掌握API参数是模型效果的关键保障:

参数默认值说明调优建议
n_clusters8聚类簇数K通过肘部法则确定
init'k-means++'初始化方法优先选'k-means++'避免局部最优
n_init10不同初始化次数增大值提升稳定性,但增加计算量
max_iter300最大迭代次数高维数据建议增加到500
tol1e-4收敛阈值值越小精度越高但可能不收敛
algorithm'auto'算法实现大数据选'elkan'提升速度

关键参数实践​:

# 优化后的参数设置示例
from sklearn.cluster import KMeans
model = KMeans(n_clusters=5, init='k-means++', n_init=20, max_iter=500,tol=1e-5,random_state=42
)

属性解析

  • labels_:样本所属簇标签
  • cluster_centers_:质心坐标矩阵
  • inertia_:当前SSE值(核心评估指标)

四、实战案例:酒聚类

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from sklearn import metricsbeer = pd.read_table("data.txt",sep=' ',encoding='utf8',engine='python')
X=beer.iloc[:,1:]from sklearn.cluster import KMeans
scores=[]
K=[2,3,4,5,6,7,8,9]
for i in K:model = KMeans(n_clusters=i)model.fit(X)labels = model.labels_                          #获取分类之后的标签score = metrics.silhouette_score(X,labels)      #轮廓系数,可用来评价模型性能scores.append(score)best_K=K[np.argmax(scores)]
print('最佳K值',best_K)modle=KMeans(n_clusters=best_K)
modle.fit(X)
labels = modle.labels_
print('轮廓系数:',metrics.silhouette_score(X,labels))fig = plt.figure(figsize=(10, 8))
fig = plt.axes(projection="3d")# 绘制散点图(颜色映射和大小渐变)
scatter = fig.scatter(xs=X.iloc[:,0],ys=X.iloc[:,1],zs=X.iloc[:,2],c=labels,  # 按聚类结果着色# cmap='viridis',  # 使用色图映射alpha=0.8,s=50)# 设置标签和标题
fig.set(xlabel='X Axis', ylabel='Y Axis', zlabel='Z Axis',title='3D Scatter Plot with Color Gradient')
plt.show()

五、模型评价:超越准确率的评估体系

无监督学习需依赖内部评价指标:

指标公式评估目标范围应用场景
轮廓系数max(a,b)b−a​样本归属合理性[-1, 1]非凸簇评估
s_score = silhouette_score(X, labels)  # 越接近1越好
print(f"轮廓系数: {s_score:.2f}")

​六 K值选择策略

from sklearn.cluster import KMeans
scores=[]
K=[2,3,4,5,6,7,8,9]
for i in K:model = KMeans(n_clusters=i)model.fit(X)labels = model.labels_                          #获取分类之后的标签score = metrics.silhouette_score(X,labels)      #轮廓系数,可用来评价模型性能scores.append(score)best_K=K[np.argmax(scores)]
print('最佳K值',best_K)

给出几个K值,循环带入模型,保存轮廓系数,最后根据最优的轮廓系数找出最佳K值。

                ​​​​​​​        ​​​​​​​     ​​​​​​​        ​​​​​​​

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

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

相关文章

数据结构基础:哈希表、排序和查找算法

目录 一、哈希表 1.哈希算法 2.哈希碰撞 3.哈希表 4.哈希表相关操作 哈希表插入 哈希表遍历 元素查找 哈希表销毁 二、排序算法 1. 排序算法对比 2. 排序算法实现 冒泡排序 选择排序 插入排序 希尔排序 快速排序 三、查找算法 1. 查找算法对比 2. 查找算法实…

Linux内核参数调优:为K8s节点优化网络性能

在高并发微服务环境中,网络性能往往成为K8s集群的瓶颈。本文将深入探讨如何通过精细化的Linux内核参数调优,让你的K8s节点网络性能提升30%以上。引言:为什么网络调优如此重要?作为一名在生产环境中维护过数千节点K8s集群的运维工程…

全家桶” 战略如何重塑智能服务标准?无忧秘书 AI + 智脑 + 数字人协同模式的底层架构解析

在数字化浪潮的推动下,企业对智能化服务的需求日益增长。然而,单一的技术或产品往往难以满足复杂场景下的多样化需求。近年来,“全家桶”战略成为科技行业的一大趋势,通过整合多维度技术与服务,为企业提供全方位的支持…

前端后端之争?JavaScript和Java的特性与应用场景解析

一、名字相似,本质迥异 1.1 历史渊源与命名背景 在编程世界中,很少有两种语言像JavaScript和Java这样,仅仅因为名字的相似性就引发了无数初学者的困惑。然而,这种相似性纯属巧合——或者说是一种营销策略的产物。 JavaScript诞…

【文献分享】Machine learning models提供数据和代码

数据输入及前期信息:ChronoGauge 需要一个基因表达矩阵,其中包括来自多个时间进程 RNA-测序实验的观测数据,用于训练,并且需要有关每个基因在连续光照(LL)条件下经过光暗(LD)周期调整…

PHP MySQL Delete 操作详解

PHP MySQL Delete 操作详解 引言 在Web开发中,数据库是存储和管理数据的重要工具。PHP作为一种流行的服务器端脚本语言,与MySQL数据库结合使用可以高效地处理数据。本文将详细介绍PHP中如何使用DELETE语句删除MySQL数据库中的数据。 什么是DELETE语句&am…

计组-大/小端存放区别

在计算机系统中,大端存放(Big-Endian)和小端存放(Little-Endian)是两种不同的多字节数据存储方式,主要区别在于字节在内存中的排列顺序。理解它们对底层编程(如网络通信、二进制文件处理、硬件交…

线程同步相关知识

文章目录一、线程同步的核心目标二、线程安全的判定条件三、同步方式一:synchronized 关键字1. 同步代码块2. 同步方法四、锁的释放与不释放场景1. 自动释放锁的场景2. 不会释放锁的场景五、同步方式二:ReentrantLock(显式锁)1. 核…

Armoury Crate无法通过BIOS卸载

设备:天选4 Armoury Crate窗口反复弹出影响使用体验,但无法通过BIOS关闭该怎么办?本文以天选4为例提供解决方案。 Step1:进入服务支持官网 Armoury Crate-服务支持 下滑点击”查看更多” 下载安装卸载工具 得到Armoury_Crate_Un…

如何将视频转为GIF格式,3大视频转为GIF工具

在社交媒体和即时通讯盛行的当下,GIF 动图以其独特的魅力备受青睐。它能够生动地捕捉视频中的精彩瞬间,凭借体积小巧、无需复杂加载且可循环播放的特性,成为了人们在网络交流中表达情感、分享趣事的得力工具。无论是制作诙谐幽默的表情包&…

开发避坑指南(22):Vue3响应式编程中this绑定机制与解决方案

错误信息 TypeError: Cannot read properties of undefined (reading find) TypeError: r.vnode.el.querySelector is not a function报错背景 vue2项目升级到vue3后,原来的代码报错。 报错代码computed: {/** 计算列的显示与隐藏*/columnVisible() {return functio…

AI学习笔记三十五:实时传输视频

若该文为原创文章,转载请注明原文出处。 目的是实现视频的传输,只是个demo. 程序分为两部分,视频接收端和视频发送端。 一、视频接收端流程分析 主要流程: 初始化配置: 设置UDP端口(5001)和缓…

【ArcGIS】分区统计中出现Null值且Nodata无法忽略的问题以及shp擦除(erase)的使用——以NDVI去水体为例

需求 已有某地NDVI栅格、行政区shp以及水体shp,计算每个行政区的平均NDVI 问题 1.如果不剔除水体 负值NDVI会把平均值拉低 且水体NDVI并不全为负 需要通过shp剔除,Mask掩膜是提取水体本身而不是剩余部分 2.使用分区统计工具(Zonal statis…

Linux中的内核同步源码相关总结

什么是内核同步Linux 内核同步是指内核中用于解决并发执行单元(如进程、中断、内核线程等)对共享资源(如全局数据结构、硬件寄存器、链表等)的竞争访问的一系列机制和技术。其核心目标是保证多个并发单元在操作共享资源时的数据一…

WORD接受修订,并修改修订后文字的颜色

在 Word 中,接受修订之后默认会采用正文的默认字体格式,不会保留修订时设置的颜色,比如“插入内容是蓝色字体”的设置会被清除。 如果你想要做到:✅ 接受所有修订后仍然让“原插入的文字”变为蓝色字体保留下来你只能通过一些手动…

行业速览:中国新能源汽车市场格局与关键趋势

在全球汽车产业迈向绿色、低碳、智能化的变革浪潮中,新能源汽车已成为各国争夺的战略高地。中国,作为全球最大的汽车市场和新能源汽车制造国,正以强大的市场规模、完整的产业链体系以及快速提升的技术创新能力,在这场变革中不断加…

【51单片机2个按键控制流水灯转向】2022-10-25

缘由51单片机按键流水灯-嵌入式-CSDN问答 #include "REG52.h" sbit k1P3^0; sbit k2P3^1; void main() {unsigned char l0,xd0,ys10,ys20,z0;P1l;while(1){if(k10&&xd0){z0;while(k10);}if(k20&&xd0){z1;while(k20);}if(ys10)if(ys20){if(z0)if(l0)…

flutter开发(一)flutter命令行工具

安装 Linux下面的flutter安装比较简单,在flutter 中文战 上下载一个最新稳定的版本,解压到系统上就行了。 我下载的是Linux下的3.32.7版。 解压之后,flutter目录里会有bin、dev等目录,把bin目录加到系统的PATH环境变量里&#…

OpenCV 入门实战:从环境配置到图像 / 视频处理

OpenCV 是计算机视觉领域最常用的开源库之一,它提供了丰富的图像和视频处理功能。本文将从环境配置开始,带大家一步步解析基础操作代码,快速入门 OpenCV 的使用。 一、环境配置 在开始之前,我们需要先搭建好 OpenCV 的运行环境。…

2.2.1 饰面板材和陶瓷的特性和应用

1、饰面石材1)天然花岗岩2)天然大理石3)人造石(1)人造石按主要原材料分包括人造石实体面材、人造石英石和人造石岗石等产品。2、建筑卫生陶瓷建筑卫生陶瓷包括建筑陶瓷和卫生陶瓷两大类。建筑陶瓷包括陶瓷砖、建筑琉璃…