亦菲喊你来学机器学习(16) --K-means聚类算法

news2024/9/28 11:22:34

文章目录

  • K-means
    • 基本步骤
    • 优缺点
    • 构建模型
  • 总结

K-means

K-means 算法是一种广泛使用的聚类算法,旨在将数据集划分为 K 个簇,使得每个簇内的数据点尽可能相似,而不同簇之间的数据点尽可能不同。这个算法通过迭代的方式实现,每次迭代都会更新簇的中心(即簇内所有点的均值),然后将每个点重新分配到最近的簇中心所在的簇中。

基本步骤

  1. 选择簇的数量 K:这是用户需要预先指定的参数,表示要将数据分成多少个簇。
  2. 初始化簇中心:随机选择 K 个数据点作为初始的簇中心,或者采用其他方法来选择初始中心,如 K-means++ 算法,这有助于避免局部最优解。
  3. 分配数据点到簇:对于数据集中的每一个点,根据其与各个簇中心的距离(通常采用欧氏距离),将该点分配到最近的簇中心所在的簇中。
  4. 重新计算簇中心:对于每个簇,计算该簇内所有点的均值(坐标的平均值),得到新的簇中心。
  5. 重复步骤 3 和 4:直到簇中心不再发生变化,或者达到预设的迭代次数,或者簇中心的变化量小于某个阈值,算法结束。

优缺点

优点

  • 原理简单,容易实现。
  • 收敛速度快,对于大数据集同样有效。
  • 当簇近似为高斯分布时,效果较好。

缺点

  • 需要预先指定簇的数量 K,这在实际应用中可能是一个挑战。
  • 对初始簇中心的选择敏感,可能导致算法陷入局部最优解。
  • 对于非球形的簇或大小差异很大的簇,效果可能不佳。
  • 对噪声和异常值比较敏感。

构建模型

K-means模型主要调整参数为n_clusters: 类中心的个数,就是要聚成几类。【默认是8个】

聚类算法事先是没有标签的,模型训练分类之后,模型自动打上标签。

  1. 收集数据
    链接: 数据
    提取码: 9bs9

  2. 数据预处理

import pandas as pd

beer = pd.read_table("data.txt",sep=" ",encoding='utf8')
x = beer[["calories","sodium","alcohol","cost"]]
  1. 交叉验证,寻找最优参数

fit模型之后,模型中会有labels_参数(是他给每个参数打的标签),可以将它拿出来:

在这里插入图片描述

from sklearn.cluster import KMeans
scores = []
for k in range(2,10):
    labels = KMeans(n_clusters=k).fit(x).labels_
    score = metrics.silhouette_score(x,labels)
    scores.append(score)
  1. 绘图,查看最优点
import matplotlib.pyplot as plt
plt.plot(list(range(2,10)),scores)
plt.xlabel('x')
plt.ylabel('y')
plt.show()

在这里插入图片描述

由图可得,选择的最优参数为2。

  1. 计算轮廓系数

轮廓系数的值域为[-1, 1],值越大表示聚类效果越好:

from sklearn import metrics
km = KMeans(n_clusters=2).fit(x)
beer['cluster'] = km.labels_
score = metrics.silhouette_score(x,beer.cluster)
print(score)
-------------------
0.6917656034079486

这样我们就构建好一个K-means聚类模型啦!!

总结

本篇介绍了:

  1. K-means聚类算法的过程。
  2. K-means聚类算法训练的数据没有标签,自动分配标签。
  3. 通过轮廓系数查看聚类效果,值越大表示聚类效果越好。

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

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

相关文章

三耐环保家族控股99.17%:分红6000多万再补流,董事长董秘一年3次被警示

《港湾商业观察》施子夫 王璐 持续冲刺北交所的杭州三耐环保科技股份有限公司(以下简称,三耐环保)日前收到第三轮审核问询函,其保荐机构为民生证券。 值得关注的是,第三轮审核问询函依旧围绕的问题是,进…

linux系统修改/etc/profile,修改错了,再打开乱码

执行vim /etc/profile, 在文件末尾增加两行配置,可能是$符号写错了,输入:x保存,提示输入密码(help cm),然后输入两次cm 执行source /etc/profile 提 示文件错误字段 执行cat profile结果如下: 这有没有办法还原啊…

省略号(一行多行)vue3

组件 <template><div ref"tooltipParentRef" class"moreTipText"><el-tooltip:placement"props.placement"effect"dark":enterable"true":show-after"200":offset"10":popper-class&qu…

声纹API验证快速检索技术实现

一、实现思路&#xff0c;假如我们有4个人员&#xff0c;要从中快速找到4号的发音&#xff0c;那么我们就可以使用声纹API验证技术。 二、首先我们要创建特征库&#xff0c;然后分别添加到特征库里&#xff0c;随后找另一个人发音不同的音频去快速定位寻找。 三、比如我们要找到…

什么是集成测试?它和系统测试的区别是什么?

01 什么是集成测试&#xff1f; 集成测试是软件测试的一种方法&#xff0c;用于测试不同的软件模块之间的交互和协作是否正常。集成测试的主要目的是确保不同的软件模块能够无缝协作&#xff0c;形成一个完整的软件系统&#xff0c;并且能够满足系统的需求和规格。 在集成测试…

yml Unused property

问题描述 以前用的好好的项目,今天突然打开就发现idea不识别spring配置信息显示未引用,如果config代码中引入的配置却可以高亮显示,然后输入spring相关的配置,文件是没有提示的。经过研究发现是spring相关的插件被关闭了。效果如下 解决方法 启用三个插件spring Boot,Sp…

openEuler:ssh 管理和安全

ssh 简介 ssh 为 secure shell&#xff0c;是一种网络安全协议&#xff0c;通过加密和认证的方式实现远程安全登录&#xff0c;文件传输等服务。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。 但是在近期&#xff0c;OpenSSH 爆出首个远程执行漏洞 CVE-2024-6387 …

R18 XR :NR L2 enhancement

这篇主要看下为支持XR,L2都有哪些增强。主要分3个部分:(1)additionalBS-TableAllowed和Delay Status Report(DSR) (2)UE assistance info for UL traffic information (3) PDU set discard。正文开始: 为了增强 XR 上行资源的调度,引入了以下改进: (1)一个额外的buffer s…

c++类(中)续

c类&#xff08;中&#xff09;续 一、日期类&#xff08;1&#xff09;什么是日期类&#xff1f;&#xff08;2&#xff09;日期类的初始化与销毁&#xff08;3&#xff09;我们需要完成的操作(1)初始化与输出日期&#xff08;2&#xff09;日期加等于天数&#xff08;3&#…

Linux实现进度条小程序——缓冲区

&#x1f4dd;Linux实现进度条小程序 &#x1f4dd; 行缓冲区&#x1f4dd; fflush函数&#x1f4dd; 示例&#x1f4dd; 进度条如何编译运行proc.hproc.cmain.c 好雨知时节 当春乃发生 随风潜入夜 润物细无声 回车换行其实是两个概念&#xff0c;一是回车&#xff0c;一是换行…

JAVA毕业设计167—基于Java+Springboot+vue3+小程序的物业管理系统小程序(源代码+数据库+万字论文+文献综述)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue3小程序的物业管理系统小程序(源代码数据库万字论文文献综述)167 一、系统介绍 本项目前后端分离带小程序(可以改为ssm版本)&#xff0c;分为用户、管理员两…

微服务--认识微服务

微服务架构的演变 1. 单体架构&#xff08;Monolithic&#xff09; 阶段描述&#xff1a;在单体应用时代&#xff0c;整个应用程序被设计为一个项目&#xff0c;并在一个进程内运行。这种架构方式开发简单&#xff0c;便于集中管理&#xff0c;但随着应用的复杂化&#xff0c…

[000-01-008].第01节:Nacos开发应用

我的后端学习大纲 SpringCloud学习大纲 2.Nacos功能&#xff1a; Nacos可以作为服务的注册中心&#xff0c;也可以作为服务配置中心&#xff1a; 服务发现与服务健康检查:Nacos使服务更容易注册,并通过DNS或HTTP接口发现其他服务&#xff0c;Nacos还提供服务的实时健康检查&…

无人机遥控器工作原理!!!

一、基本组成 无人机遥控器通常由发射端&#xff08;遥控器本体&#xff09;和接收端&#xff08;安装在无人机上的接收模块&#xff09;两部分组成。发射端包含控制杆、按钮、显示屏等物理控件&#xff0c;用于输入控制指令&#xff1b;接收端则负责接收来自发射端的无线电信…

机器人外呼的具体操作步骤是怎样的?

今天小编给大家整理一下几点关于使用AI机器人拨打电销电话的具体步骤可以归纳为以下几个关键环节&#xff1a; ​ ### 一、选择合适的AI机器人服务 1. **平台选择**&#xff1a; - 选择一个提供AI机器人拨打电话服务的平台&#xff0c;这可以是云端的AI电话机器人服务&#…

关于docker-maven-plugin在arm架构的机器上制作镜像报错

背景 客户环境提供的容器集群全是arm架构&#xff0c;因此打包时要在arm架构的电脑上来制作镜像&#xff0c;本人使用mac m3芯片macbook&#xff0c;但是执行mvn clean package -D maven.test.skiptrue docker:build 命令时报错&#xff0c;报错信息如下&#xff1a; Caused …

数据分析及应用:如何分析基于绝对中位差的异常值检测问题?

目录 0 场景描述 1 数据准备 2 问题分析 abs(rn - (cnt+1)/2) < 1 3 小结 0 场景描述 数据集中可能存在异常的值。值存在异常有多种原因: (1)可能是数据收集方式有问题,比如记录值的仪表存在误差;(2)可能是数据输入错误导致的;(3)还可能是因为数据生成时环境…

基于web 在线影院系统网站设计与实现

3.1 系统基本情况描述 在线影院系统需要实现的功能包括用户的管理&#xff0c;以及视频信息的管理和使用等。具体来讲&#xff0c;它包含用户管理中常见的注册、登录操作&#xff0c;视频信息的显示、播放、搜索操作&#xff0c;视频管理中的添加、删除、修改等。同时为了方便…

【VScode环境配置】在VScode中配置php环境(wamp版)

1.前置准备 1.wamp&#xff08;集成环境&#xff09; 2.Visual Studio Code 2.系统变量配置 1.打开php所在路径&#xff1a; 一般在你所安装的wamp的bin目录文件夹下。wamp可以自定义安装路径&#xff0c;每个人的位置不一样&#xff0c;这里是拿作者的路径作为演示。 C:…

Golang | Leetcode Golang题解之第382题链表随机节点

题目&#xff1a; 题解&#xff1a; type Solution struct {head *ListNode }func Constructor(head *ListNode) Solution {return Solution{head} }func (s *Solution) GetRandom() (ans int) {for node, i : s.head, 1; node ! nil; node node.Next {if rand.Intn(i) 0 { …