news 2026/1/14 14:41:57

《机器学习K-means通关指南:选K、算距离、找质心一次搞懂》

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
《机器学习K-means通关指南:选K、算距离、找质心一次搞懂》

文章目录

  • K-means
  • 聚类和分类的区别
    • K-means基本概念:
    • 常见的距离
  • 图解过程
    • 初始状态(图a)
    • 初始化质心(图b)
    • 分配数据点到最近的质心(图c)
    • 重新计算质心并迭代
  • 聚类效果的评价方式
  • 【参数:】
  • 【属性】
  • python实现

K-means

K-means 是一种“无监督聚类”算法,运行前必须人为指定要把数据分成多少个簇,这个数量用 K​ 表示。
K 值直接影响聚类结果。K 太小会把不同类的数据强行合并,K 太大会把同类数据拆得过细。

聚类和分类的区别

分类是“有标签的监督学习”,聚类是“无标签的无监督学习”——前者已知“答案”(类别标签)去学规律,后者不知道“答案”,只能靠数据本身的相似性分组。

K-means基本概念:

1.聚成多少个簇:需要指定K的值
K-means里的K是“要分的簇的数量”,必须人为提前定好。比如想把用户分成3类,K就设为3;想分5类,K就设为5。

2.距离的度量:一般采用欧式距离
算法要判断“数据点离哪个质心近”,就得算距离。最常用的距离是欧式距离

3.质心:各向量的均值
质心是每个簇的“中心点”,计算方式是簇内所有数据点的“向量均值”。


    这是K-means的核心目标:最小化**“所有簇内数据点到质心的平方距离之和”**。

    常见的距离

    图解过程

    初始状态(图a)

    图中有一些绿色的点,代表待聚类的数据集,此时还未确定质心。

    初始化质心(图b)

    图中出现了两个“×”,这两个“×”就是随机初始化的两个质心,用于开始聚类过程。

    分配数据点到最近的质心(图c)

    图中的绿色点被分配到了距离各自最近的质心所在的类别,形成了红色的两个簇。同时,根据注释“新的质心为所有类中的数据x值平均”,接下来会重新计算每个簇的质心。

    重新计算质心并迭代

    重新计算质心后,算法会再次将数据点分配到距离新的质心最近的类别,然后又重新计算质心,如此迭代,直到质心不再发生明显变化或者达到预设的迭代次数等停止条件为止。

    聚类效果的评价方式


    【参数:】

    n_clusters:类中心的个数,就是要聚成几类。【默认是8个】
    init:参初始化的方法,默认为’k-means++’
    (1)‘k-means++’:用一种特殊的方法选定初始质心从而能加速迭代过程的收敛.
    (2) ‘random’:随机从训练数据中选取初始质心。
    **(3) 如果传递的是一个ndarray,**则应该形如 (n_clusters, n_features) 并给出初始质心。
    n_init:整形,缺省值=10
    用不同的质心初始化值运行算法的次数,最终解是在inertia意义下选出的最优结果。
    max_iter :
    执行一次k-means算法所进行的最大迭代数。
    Tol: 与inertia结合来确定收敛条件。
    precompute_distances:三个可选值,‘auto’,True 或者 False。
    预计算距离,计算速度更快但占用更多内存。
    **(1)‘auto’:**如果 样本数乘以聚类数大于 12million 的话则不预计算距离。
    **(2)True:**总是预先计算距离。
    **(3)False:**永远不预先计算距离。
    **verbose:**整形,默认值=0
    **random_state 😗*随机状态
    **copy_x:**布尔型,默认值=True
    当我们precomputing distances时,将数据中心化会得到更准确的结果。如果把此参数值设为True,则原始数据不会被改变。如果是False,则会直接在原始数据 上做修改并在函数返回值时将其还原。但是在计算过程中由于有对数据均值的加减运算,所以数据返回后,原始数据和计算前可能会有细小差别。
    algorithm:‘auto’,‘full’ or ‘elkan’.默认为’auto’
    full:采用经典的EM算法
    elkan:通过使用三角不等式从而更有效,但不支持稀疏数据
    auto:数据稀疏选择full模式,数据稠密选择elkan模式

    【属性】

    cluster_centers_:一个n-clusters*n_features的矩阵,表示聚类中心的坐标
    Labels_:
    每个点的分类标签。
    **inertia_:**float形
    每个点到其簇的质心的距离之和。
    n_iter_ :int
    迭代次数。

    python实现

    importpandasaspdfromsklearn.clusterimportKMeansfromsklearnimportmetrics""" 可视化网站 https://www.naftaliharris.com/blog/visualizing-k-means-clustering/ """#读取文件beer=pd.read_table("data.txt",sep=' ',encoding='utf8',engine='python')#传入变量(列名)X=beer[["calories","sodium","alcohol","cost"]]""" 根据分成不同的簇,自动计算轮廓系数得分 """scores=[]forkinrange(2,10):#寻找合适的K值labels=KMeans(n_clusters=k).fit(X).labels_#从左到右依次进行计算score=metrics.silhouette_score(X,labels)#轮廓系数scores.append(score)print(scores)#绘制得分结果importmatplotlib.pyplotasplt plt.plot(list(range(2,10)),scores)plt.xlabel("Number of Clusters Initialized")plt.ylabel("Sihouette Score")plt.show()#聚类km=KMeans(n_clusters=2).fit(X)#K值为2【分为2类】beer['cluster']=km.labels_#对聚类结果进行评分""" 采用轮廓系数评分 X:数据集 scaled_cluster:聚类结果 score:非标准化聚类结果的轮廓系数 """score=metrics.silhouette_score(X,beer.cluster)print(score)**寻找最佳簇数 K​**用循环测试 K=29,分别训练 K-means 模型。 对每个 K 计算轮廓系数(衡量簇内紧凑度与簇间分离度)。 记录所有 K 的轮廓系数并绘图,直观看出哪个 K 效果最好。**执行最终聚类**​ 根据图形或业务需求,选定一个 K(此代码选 K=2)。 用该 K 训练 K-means,得到每个样本的簇标签,并保存到原数据表中。**评估聚类效果​**用轮廓系数对最终聚类结果打分,判断聚类质量。


    版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
    网站建设 2026/1/5 3:43:44

    如何彻底禁止Win11 自动更新? 这几种方法值得试试 !!win11更新怎么关闭?windows禁止更新工具插件,Win11永久关闭更新要怎么操作?

    由于微软更新策略变更,出厂预装系统是无法禁用更新功能的,在联网检测到版本较低的情况下微软将强制推送更新通知。 那么如何彻底禁止Windows 10自动更新? win11更新怎么关闭?windows禁止更新工具插件,Win11永久关闭更新要怎么操作&#x…

    作者头像 李华
    网站建设 2026/1/9 4:25:54

    GitHub Star增长秘诀:分享实用的PyTorch实战案例

    GitHub Star增长秘诀:分享实用的PyTorch实战案例 在深度学习项目层出不穷的今天,你是否曾疑惑——为什么有些 GitHub 仓库代码并不复杂,却能轻松获得上千 Star?而另一些实现更精巧、算法更前沿的项目,反而无人问津&…

    作者头像 李华
    网站建设 2026/1/9 20:01:18

    VPC 内相关组件详细介绍

    Internet▲│┌───── IGW ─────┐│ │┌───────┴───────┐ ┌───┴────────┐│ Public Subnet │ │ Public Subnet││ (ALB / NAT) │ │ (ALB / NAT) ││ Route Table A │ │ Route Table A││ 0.0.0.0/…

    作者头像 李华
    网站建设 2026/1/14 6:50:23

    GitHub Actions自动测试PyTorch环境的CI/CD配置

    GitHub Actions 自动测试 PyTorch 环境的 CI/CD 配置 在深度学习项目日益复杂的今天,一个常见的场景是:开发者本地运行模型训练一切正常,提交代码后却在 CI 流水线中报错——“CUDA not available” 或 “torch version mismatch”。这种“在…

    作者头像 李华
    网站建设 2026/1/13 18:16:00

    清华镜像源替换Anaconda默认通道的配置步骤

    清华镜像源加速 Conda 环境配置:高效搭建 PyTorch 开发环境 在深度学习项目开发中,一个常见的“拦路虎”并不是模型调参或数据清洗,而是——环境装不上。 你是否经历过这样的场景:深夜赶论文复现实验,conda install py…

    作者头像 李华
    网站建设 2026/1/14 4:09:45

    SSH隧道转发可视化结果:PyTorch训练过程实时监控

    SSH隧道转发可视化结果:PyTorch训练过程实时监控 在深度学习项目中,最令人焦虑的场景莫过于将模型扔进远程GPU服务器后,只能盯着日志文件里不断滚动的数字干等——损失值到底收敛了没有?准确率是不是卡住了?有没有梯度…

    作者头像 李华