机器学习算法——Kmeans

2023-11-19

1.k-mean算法的原理

1、选取K个点做为初始聚集的簇心

2、分别计算每个样本点到K个簇核心的距离(这里的距离一般取欧氏距离或余弦距离),找到离该点最近的簇核心,将它归属到对应的簇

3、所有点都归属到簇之后,M个点就分为了K个簇。之后重新计算每个簇的重心(平均距离中心),将其定为新的“簇核心”;

4、反复迭代2-3步骤,直到达到某个中止条件。
直到质心不再改变

2.聚类算法

聚类算法:是一种典型的无监督学习算法,主要用于将相似的样本自动归到一个类别中。

聚类算法与分类算法最大的区别是:聚类算法是无监督的学习算法,而分类算法属于监督的学习算法,分类是知道结果的。

在聚类算法中根据样本之间的相似性,将样本划分到不同的类别中,对于不同的相似度计算方法,会得到不同的聚类结果,常用的相似度计算方法有欧式距离法。

3.kmeans算法效果衡量标准

3.1 K值确定:

Elbow method就是“肘”方法,对于n个点的数据集,迭代计算k from 1 to n,每次聚类完成后计算每个点到其所属的簇中心的距离的平方和,可以想象到这个平方和是会逐渐变小的,直到k==n时平方和为0,因为每个点都是它所在的簇中心本身。但是在这个平方和变化过程中,会出现一个拐点也即“肘”点,下图可以看到下降率突然变缓时即认为是最佳的k值。
在这里插入图片描述
肘方法的核心指标是SSE(sum of the squared errors,误差平方和), Ci是第i个簇,p是Ci中的样本点, mi是Ci的质心(Ci中所有样本的均值), SSE是所有样本的聚类误差,代表了聚类效果的好坏。

在这里插入图片描述

肘方法的核心思想:
随着聚类数k的增大,样本划分会更加精细,每个簇的聚合程度会逐渐提高,那么误差平方和SSE自然会逐渐变小。

并且,当k小于真实聚类数时,由于k的增大会大幅增加每个簇的聚合程度,故SSE的下降幅度会很大,而当k到达真实聚类数时,再增加k所得到的聚合程度回报会迅速变小,

所以SSE的下降幅度会骤减,然后随着k值的继续增大而趋于平缓,也就是说SSE和k的关系图是一个手肘的形状,而这个肘部对应的k值就是数据的真实聚类数。这也是该方法被称为肘方法的原因。

聚类效果怎么判断?
1、SSE误差平方和越小越好,肘部拐点的地方。
2、也可用轮廓系数表示 系数越大,聚类效果越好,簇与簇之间距离越远

kmeans算法的最大弱点:只能处理球形的簇(理论)

3.2轮廓系数:

( Silhouette Coefficient)结合了聚类的凝聚度( Cohesion)和分离度( Separation),用于评估聚类的效果。该值处于-1~1之间,值越大,表示聚类效果越好。
在这里插入图片描述
其中p是某个簇C k 中的样本。即,用X i 到某个簇所有样本平均距离作为衡量该点到该簇的距离后,选择离Xi最近的一个簇作为最近簇。
求出所有样本的轮廓系数后再求平均值就得到了平均轮廓系数。平均轮廓系数的取值范围为[-1,1],且簇内样本的距离越近,簇间样本距离越远,平均轮廓系数越大,聚类效果越好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习算法——Kmeans 的相关文章

随机推荐

  • pp-human在rk3588上部署

    https github com leeguandong Yolov5 rknnlite2https github com leeguandong Yolov5 rknnlite2 这是我在paddledetection和rknn官方基础上
  • Jmeter使用JDBC对数据库压测

    背景说明 压测除了全链路压测外 有时候也需要对指定服务进行性能测试 这里以jmeter工具对数据库进行压测说明 压测不同数据库需要安装不同的数据库驱动 这里以mysql为例进行压测 步骤一 数据库驱动安装 1 进入mysql官网 根据不同m
  • 课程设计心得_关于switch输入字母进入死循环问题

    做C语言课程设计时 采用了大量的switch 在后期找bug时 当输入字符类型时 如a 之类的 程序进入了死循环 但又不想换成其他的 主要是懒 不想大量改动 void menu windows int n system cls fflush
  • Python3 字典

    字典是另一种可变容器模型 且可存储任意类型对象 字典的每个键值 key gt value 对用冒号 分割 每个对之间用逗号 分割 整个字典包括在花括号 中 格式如下所示 注意 dict 作为 Python 的关键字和内置函数 变量名不建议命
  • 安全运维之Resin应用服务器中间件安装使用与安全配置

    本章目录 0x00 快速入门 0x01 Resin安装 0x02 Resin配置文件 0x03 Resin应用 0x04 Security 0x05 Help 附录补充 1 Resin 日志记录之format配置详解 原文地址 https
  • 登入服务器bmc_如何使用 BMCTool 远程管理 PowerEdge C 系列服务器

    文章内容 症状 本文介绍了如何使用 BMCTool 管理 PowerEdge C 系列服务器 BMC 工具旨在压缩和改进 IPMITool 的功能 可从poweredgec dell com下载 需要安装 OpenIPMI 和 IPMITo
  • redis学习笔记(七):redis常见问题和解决方案

    目录 一 缓存穿透 1 基本介绍 2 解决方案 1 布隆过滤器 2 缓存空对象 3 参数校验 4 对比 二 缓存击穿 1 基本介绍 2 解决方案 1 互斥锁 2 永不过期 3 两种方案对比 三 缓存雪崩 1 基本介绍 2 解决方案 1 过期
  • ODBC连接ORACLE数据库的设置

    一 建立服务名1 选择 Net8 Configuration Assistant 选择 本地网络服务名配置 2 选择 添加 3 选择 Oracle 8i数据库或服务 4 输入服务名 此为远程数据库已经定制好的数据库服务名字 比如 ORCL
  • python map和lambda

    map和lambda 前言 一 map 二 lambda 三 map和lambda的使用 前言 一 map map是python的内置函数 根据提供的函数对指定序列做映射 map function literation function 函
  • ngrok服务端搭建并使用docker解放80端口

    start 前言 为什么要搭建ngrok服务端 为什么使用docker 1 开发环境下调试微信公众号使用 要求80端口 2 ngrok配置中要指定 http的端口 如果指定80端口的话 会和nginx抢端口 nginx肯定比ngrok重要
  • Ajax核心技术之XMLHttpRequest对象

    XMLHttpRequest对象到底是什么 跟Ajax到底有什么联系 在了解它之前还是要先了解一下Ajax的功能 与以往的技术不同 Ajax是为了实现异步操作 那么关于异步 好像一个管理者安排好一个项目计划后 将这个项目交给下属去做 而自己
  • 揭秘win10系统CPU占用100%的真正原因/找出那些罪魁祸首

    经常会有 Win10 用户反应 电脑没有运行太多程序 但是在任务管理器中 经常可以看到电脑CPU占用率却一直居高不下 那么 CPU占用100 的正真原因是什么呢 下面小编收集了一些针对CPU占用过高的原因及解决办法 这些可能就是导致你CPU
  • Spring Boot 快速入门、开发环境热部署

    SpringBoot快速上手 准备工作 我们将学习如何快速的创建一个Spring Boot应用 并且实现一个简单的Http请求处理 通过这个例子对Spring Boot有一个初步的了解 并体验其结构简单 开发快速的特性 我的环境准备 jav
  • Sping之自动注入-1

    最近终于能静下心来 一步步的学习Java Web开发 在学习的过程中 遇到太多的问题 一开始好些问题真是不知道怎么解决 在这里要非常感谢 Sping In Action 一书的作者 感谢他能写出此书 让我受益匪浅 您辛苦了 本着 相互学习
  • linux查看已安装的软件

    这本阿里P8撰写的算法笔记 再次推荐给大家 身边不少朋友学完这本书最后加入大厂 Github 疯传 史上最强悍 阿里大佬 LeetCode刷题手册 开放下载了 因为linux安装软件的方式比较多 所以没有一个通用的办法能查到某些软件是否安装
  • docker run之后 docker ps 不显示运行中的容器

    docker run 启动mysql以后 生成的对应容器直接exited 1 问题 今天在部署项目过程中 用docker run指令启动容器返回了容器id 但是用docker ps指令却不显示刚才启动的容器 问题查找 由于docker ps
  • L298N 小车应用(附代码)

    L298N L298N是目前智能小车应用很广泛的价格也比较便宜的电机驱动 用来驱动直流电机 L298N 输出A 输出B 分别接两个直流电机 电机两根线随便接 如果发现两电机方向是反着的 就调换下接线就ok了 12V供电 这个是外部电源为驱动
  • kubernetes集群实战——暴露service供外部访问的4种方法(NodePort、LoadBalancer、ExternalName和分配公有IP)

    1 service介绍 Service可以看作是一组提供相同服务的Pod对外的访问接口 借助Service 应用可以方便地实现服务发现和负载均衡 service默认只支持4层负载均衡能力 没有7层功能 可以通过Ingress实现 servi
  • android studio3.1调试

    快捷键 ctrl alt left或者ctrl alt right 回退 前进 双击快捷键 shift 全局搜索 快捷键 shift F9 开始调试 快捷键 F6 单步执行程序 快捷键 F5 单步执行程序 遇到方法时进入 快捷键 F8 调到
  • 机器学习算法——Kmeans

    1 k mean算法的原理 1 选取K个点做为初始聚集的簇心 2 分别计算每个样本点到K个簇核心的距离 这里的距离一般取欧氏距离或余弦距离 找到离该点最近的簇核心 将它归属到对应的簇 3 所有点都归属到簇之后 M个点就分为了K个簇 之后重新