当前位置: 首页 > news >正文

深入解析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.dtcms.com/a/321533.html

相关文章:

  • 基于STM32F030C8T6单片机实现与CH224Q诱骗芯片的I2C通信和电压输出配置
  • 9:USB摄像头的最后一战(上):MP4音视频合封!
  • 《MySQL索引底层原理:B+树、覆盖索引与最左前缀法则》
  • TF 上架全流程实战,从构建到 TestFlight 分发
  • iOS 签名证书全流程详解,申请、管理与上架实战
  • 飞算JavaAI深度剖析:开启Java开发智能新时代
  • 路由器不能上网的解决过程
  • 综合实验作业
  • Web Worker 性能革命:让浏览器多线程为您的应用加速
  • OpenAI 开源 GPT-OSS:1200亿参数推理模型上线,完全免费、商用可用,全民可控智能体时代正式开启!
  • 异步改变Promise状态与then调用顺序
  • 零基础深度学习规划路线:从数学公式到AI大模型的系统进阶指南
  • 【完整源码+数据集+部署教程】植物病害检测系统源码和数据集:改进yolo11-MultiSEAMHead
  • SpringBoot的profile加载
  • Cesium 模型3dtiles 开挖 挖洞 压平
  • 单层 PDF 与双层 PDF:一字之差,功能大不同
  • 如何高效使用Cursor?要节省者用?
  • 【代码随想录day 14】 力扣 104.二叉树的最大深度
  • 机器学习及其KNN算法
  • 静态路由主备切换
  • 力扣-189.轮转数组
  • MetaBit基金会加码投资图灵协议,深化去中心化金融与元宇宙生态合作
  • mysql复制连接下的所有表+一次性拷贝到自己的库
  • 本地开发penpot源码支持AI原型设计(一)
  • node.js 学习笔记2 进程/线程、fs
  • PCB焊盘脱落的补救办法与猎板制造优势解析
  • 活到老学到老之使用jenv管理多个java版本
  • 微型导轨在半导体制造中有哪些高精密应用场景?
  • 【AI工具】解放双手,操控浏览器的工具对比,来了
  • 基于深度学习的nlp