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

Python 机器学习入门之K-Means聚类算法

系列文章目录

第一章 Python 机器学习入门之线性回归

K-Means聚类算法

  • 系列文章目录
  • 前言
  • 一、K-Means简介
    • 1、定义
    • 2、例子
    • 3、K-Means与KNN
  • 二、 K-Means实现
    • 1、步骤
    • 2、优化
      • 2.1 初始化优化之K-Means++
      • 2.2 距离优化之elkan K-Means
  • 三、优缺点
    • 1、优点
    • 2、缺点

前言

学完K近邻算法,让我们再来看看和它有一定相似程度的K-Means聚类算法

一、K-Means简介

1、定义

wiki定义:
k-均值算法(英文:k-means clustering)源于信号处理中的一种向量量化方法,现在则更多地作为一种聚类分析方法流行于数据挖掘领域。k-均值聚类的目的是:把n个点(可以是样本的一次观察或一个实例)划分到k个聚类中,使得每个点都属于离他最近的均值(此即聚类中心)对应的聚类,以之作为聚类的标准。

这里说下聚类和簇的概念,使用上述算法会把训练中的数据划分成若干个组,每个组就被称为簇,而这种学习方式或者说分类过程就被称为聚类;但是很多资料上往往也会把聚类视作簇,就如上述定义一样。

2、例子

简单来说,K聚类的核心点是找到K个中心点,以此为中心辐射开来,形成K个簇;

举个例子,有些大学在入学时会让学生填写一些个人作息和兴趣爱好来做宿舍分配,其中就可以使用K-Means聚类算法,假设要分配K个宿舍,我们可以先随机出K个学生,然后在此基础上分配剩下的学生,剩下的学生找到与自己个人作息和兴趣爱好相近的K个学生之一;最后我们就可以得到一个相对较好的宿舍环境,熬夜打游戏的可以一起组团开黑,早起学习的可以一起携手前去图书馆,大家都获得了美好的未来。
在这里插入图片描述

3、K-Means与KNN

前言里提到K-Means和KNN有一定相似程度,这是因为二者在运行过程中都用到了最近邻思想,都是找到离某个点最近的点;但是它们不能统一而论,这是它们的区别点

  1. KNN是有监督学习,是有对应的类别输出的;K-Means是无监督学习,没有样本输出
  2. KNN是找离当前点最近的K个点,K-Means是找离当前点最近的K个中心点之一

二、 K-Means实现

1、步骤

  1. 选取初始化的k个样本设为聚类中心a=a1,a2,a3…ak;

  2. 对于数据集的每个数据点Xi,计算它到k个聚类中心的距离(这里通常采用我们在上一篇k近邻中提到的欧式距离来计算),然后将它分到距离最小的聚类中心所对应的簇中;

  3. 针对每个聚类中心aj,当有新的样本加入时,重新计算它的质心(中心点)
    在这里插入图片描述

  4. 重复上述2、3步直至达到终止条件

2、优化

2.1 初始化优化之K-Means++

传统K-Means是随机选择中心点,这样有很大概率会花费更多的时间,因此在选择初始点上我们可以使用更好的方法,那就是K-Means++;

相比于传统K-Means,K-Means在选择新的初始点时都会参考之前选取得初始点,因为我们知道最后得出的结果是K个簇,我们希望每个簇之间的距离越远越好,而这点就可以应用到初始点选择上,我们在选择新的初始点希望找到离之前的初始点越远越好;

步骤:

  1. 随机选择一个初始点a1
  2. 对于数据集中每一个点Xi,计算它到之前每个聚类中心aj的距离D(xi),找到距离最大的那个,但是这只适用于单个距离中心的情况;当面对多个聚类中心,我们使用概率的方式(下式)来找到最可能距离前j个聚类中心最远的点
    在这里插入图片描述
  3. 重复第二步直至找到K个聚类中心

2.2 距离优化之elkan K-Means

传统K-Means中,每次迭代都需要计算机所有样本到所有质心的位置,这样运行时间过长;elkan K-Means算法则是对这一步进行改进,减少不必要的距离的计算;它主要的使用的思想是:利用两边之和大于等于第三边,两边之差小于第三边的三角形的性质,因此达到减少距离计算的目的。

  1. 对于一个样本点x和两个质心a1,a2;我们先计算出这两个质心的距离D(a1,a2),如果2D(a1,x)<=D(a1,a2),那么D(a2,x)>=D(a1,x),就可以不计算D(a2,x),减少一步计算距离
  2. 对于一个样本点x和两个质心a1,a2,我们可以得到D(a2,x)>=max(0,D(a1,x)-D(a1,a2))

第二条规律其实有点难懂,我查阅了下资料,大概是说利用两边之差小于第三边推导出来,然后在此基础上来利用该公式能判断是否可以不用计算D(a2,x)

该方法可以一定程度上提升传统K-Means聚类算法的迭代速度,但是如果样本的特征是稀疏的,并具有缺失值,由于有些距离无法计算,则无法使用该算法。

三、优缺点

1、优点

  1. 简单易懂,算法收敛速度快
  2. 算法的可解释性强

2、缺点

  1. k值的选取一般需要先验经验(专家经验)
  2. 采用迭代的方法,得到的结果只是局部最优
  3. 由于需要计算质心到所有点的距离,对噪音和异常点比较敏感
  4. 如果各隐含类别的数据量严重失衡,或者个各隐含类别的方差不同,则聚类效果不佳

相关文章:

Python 机器学习入门之K-Means聚类算法

系列文章目录 第一章 Python 机器学习入门之线性回归 K-Means聚类算法 系列文章目录前言一、K-Means简介1、定义2、例子3、K-Means与KNN 二、 K-Means实现1、步骤2、优化2.1 初始化优化之K-Means2.2 距离优化之elkan K-Means 三、优缺点1、优点2、缺点 前言 学完K近邻算法&a…...

【jmeter】接口测试流程

1、Jmeter简介 Jmeter是由Apache公司开发的一个纯Java的开源项目&#xff0c;即可以用于做接口测试也可以用于做性能测试。 Jmeter具备高移植性&#xff0c;可以实现跨平台运行。 Jmeter可以实现分布式负载。 Jmeter采用多线程&#xff0c;允许通过多个线程并发取样或通过独…...

RTOS(6)任务管理

任务状态理论 我们是怎么实现&#xff0c;两个同优先级的任务之间交替执行的呢&#xff1f; 任务切换的基础&#xff1a;tick中断&#xff01; tick为1ms一个周期&#xff0c;可以通过修改时钟配置修改&#xff1b; running&#xff1a;正在进行的任务3为running&#xff…...

【UE5】 ListView使用DataTable数据的蓝图方法

【UE5】 ListView使用DataTable数据的蓝图方法 ListView 是虚幻引擎中的一种用户界面控件&#xff0c;用于显示可滚动的列表。它可以用于显示大量的数据&#xff0c;并提供了各种功能和自定义选项来满足不同的需求。 DataTable是虚幻引擎中的一种数据表格结构&#xff0c;用于存…...

Anthropic全球上线AI语言模型Claude 2;多模态系统:融合文本和图像的新前沿

&#x1f989; AI新闻 &#x1f680; Anthropic全球上线AI语言模型Claude 2&#xff0c;编程、数学、推理能力大幅提升 摘要&#xff1a;Anthropic在全球正式上线了AI语言模型Claude 2。相比前代版本&#xff0c;Claude 2在编程、数学、推理等方面都有大幅提升&#xff0c;支…...

pdf压缩文件怎么压缩最小?

pdf压缩文件怎么压缩最小&#xff1f;我们很多项目介绍或是学术的报告都是采用的这个pdf格式&#xff0c;那么我们在存储或是需要进行分享的时候&#xff0c;可能就会因为文件过大而导致无法打开或是发送了。那么就需要将其进行压缩。PDF文件压缩方法很多&#xff0c;pdf压缩文…...

开源智能体来啦!港大团队发布OpenAgents,可以搞数据分析、聊天、支持200+插件

夕小瑶科技说 原创 作者 | 智商掉了一地、ZenMoore 港大的研究团队最近发布了一个新的开源 Agent 框架&#xff0c;名为 OpenAgents. 它可以用于实际用户场景&#xff0c;特别是在使用自然语言执行复杂任务的情况下。先前的语言智能体框架主要关注概念验证或者供开发人员使用&…...

Prometheus metrics数据抓取解析

Prometheus node的监控数据如链接展示&#xff0c;我们希望能更加方便的看到监控数据&#xff0c;shodan对Prometheus metrics 的数据做了格式化处理。172.96.3.215:9100/metricshttp://172.96.3.215:9100/metrics 本文我自己实现了一个命令行工具&#xff0c;可以输出类shodan…...

【算法训练-排序算法 三】【排序应用】合并区间

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【合并区间】&#xff0c;使用【数组】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…...

【iOS】计算器仿写

文章目录 前言一、构建View界面二、Model中进行数据处理三、Controller层实现View与Model交互总结 前言 在前两周组内进行了计算器的仿写&#xff0c;计算器仿写主要用到了MVC框架的思想以及数据结构中用栈进行四则运算的思想&#xff0c;还有就是对OC中的字符串进行各种判错操…...

华为认证 | 华为HCIE认证该怎样备考?

华为HCIE认证是华为认证的最高级别&#xff0c;拥有了华为HCIE认证就代表拥有了华为官方认可的专家级技术水平。 因此HCIE认证的考试难度是非常高的&#xff0c;备考华为认证HCIE需要一定的准备和规划。 整理了一些简单易懂的指南&#xff0c;希望对各位备考的小伙伴一些帮助…...

10月份stable diffusion animatediff等插件使用指南,又来更新了

插件一直会更新&#xff0c;包含了基本市面上流行的90%插件&#xff0c;好用的插件更是不会错过&#xff0c;往期插件请看往期文章&#xff0c;如果你没有时间一直关注sd更新的进展&#xff0c;请关注我&#xff0c;一个月用几个小时看一下我的文章&#xff0c;最短时间跟进sd。…...

抓包工具charles修改请求和返回数据

数据篡改的主要使用场景&#xff1a; &#xff08;1&#xff09;mock场景&#xff0c;mock入参和返回值参数&#xff0c;实现mock测试 &#xff08;2&#xff09;安全测试&#xff0c;对于支付金额等比较重要的字段&#xff0c;可以修改请求参数来进行安全测试 1.首先选择要…...

matlab中绘制 维诺图(Voronoi Diagram)

1.专业术语&#xff08;相关概念&#xff09;&#xff1a; 基点Site&#xff1a;具有一些几何意义的点 细胞Cell&#xff1a;这个Cell中的任何一个点到Cell中基点中的距离都是最近的&#xff0c;离其他Site比离内部Site的距离都要远。 Cell的划分&#xff1a;基点Site与其它的…...

Mybatis TypeHandler 介绍及使用

Mybatis TypeHandler类型转换器是负责Java类和jdbc类型之间的转换 主要涉及到下面这几个类&#xff1a; TypeHandler 类型转换器的顶层接口BaseTypeHandler 抽象类继承自TypeHandler&#xff0c;Mybatis中所有的类型转换器实现均继承他。TypeHandlerRegistry 类型转换器注册器…...

Linux SVN 命令详解

1、将文件 checkout 到本地目录 svn checkout path&#xff08;path是服务器上的目录&#xff09; 例如&#xff1a;svn checkout svn://192.168.1.1/pro/domain 简写&#xff1a;svn co 2、往版本库中添加新的文件 svn add file 例如&#xff1a;svn add test.php(添加test.…...

Maven依赖引入的优先机制

xxxx待持续更新...

全开源无加密跨境电商购物网站系统源码(无货源模式+多语言+多货币)

在全球化的时代背景下&#xff0c;跨境电商成为了越来越受欢迎的消费方式&#xff0c;而建立一个源码无加密多语言跨境购物网站系统是一个具有挑战性的任务&#xff0c;但完全可行。以下是这个过程的一些主要步骤&#xff1a; 1. 确定需求和功能规划&#xff1a;先确定网站需要…...

Python常用视频编辑操作——读取与保存视频、更改帧数、拼接视频、视频语音合并、视频与图像互转等

1.更改视频帧数 降低视频帧数&#xff0c;简单的操作只能降低视频帧数&#xff0c;如果要增加视频帧数&#xff0c;那就要使用深度学习进行插帧处理&#xff1a; import cv2 from moviepy.editor import * def change_fps(inpt_path,output_path,fps):# 加载视频video Video…...

从javascript到vue再到react的演变

当提到前端开发中的框架时&#xff0c;JavaScript、Vue.js和React.js是三个最常见的名词。它们代表了Web开发中不同的技术选择和演变过程。本文将探讨JavaScript从原生到Vue.js再到React.js的演变&#xff0c;以及每个阶段的特点和优势。 JavaScript: 动态语言的基础 JavaScr…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

spring Security对RBAC及其ABAC的支持使用

RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型&#xff0c;它将权限分配给角色&#xff0c;再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...