第十一章《搞懂算法:聚类是怎么回事》笔记

聚类是机器学习中一种重要的无监督算法,可以将数据点归结为一系列的特定组合。归为一类的数据点具有相同的特性,而不同类别的数据点则具有各不相同的属性。

11.1 聚类算法介绍

人们将物理或抽象对象的集合分成由类似 的对象组成的多个类的过程被称为聚类。

11.1.1 聚类是什么

聚类和降维之间有着共通性, 某种意义上聚类就是降维,聚成 K 类就意味着将原来的数据降为 K 维。分类与聚类虽然名称较为接近但两者截然不同,分类是有监督学习中的典型问题,而聚类则是无监督学习中的典型问题。

11.1.2 聚类算法应用场景

11.2 通俗讲解聚类算法过程

聚类算法是无监督学习的典型算法,其中 K-means 算法又是聚类算法中的经典算法。 K-means 算法要求预先设定聚类的个数,然后不断更新聚类中心,通过多次迭代最终使得所有数据点到其聚类中心距离的平方和趋于稳定。

一般来说,K-means 聚类过程如下所示。

(1)从 n 个向量对象中任意选择 K 个对象作为初始聚类中心。

(2)根据步骤(1)中设置的 K 个聚类中心,分别计算每个对象与这 K 个聚类中心对象的距离。

(3)经过步骤(2)后,任何一个对象与这 K 个聚类中心都有一个距离值。这些距离有的远, 有的近,将对象与距离它最近的聚类中心归为一类。

(4)重新计算每个类簇的聚类中心。 (5)重复步骤(3)和步骤(4),直到对象归类变化量极小或者完全停止变化。例如,某次

迭代后只有不到 1% 的对象还会出现类簇之间的归类变化,就可以认为聚类算法实现了。

有两个需要注意的关键点:一是对象距离如何度量;二是聚类效果如何评估,也就是性能如何度量。

11.2.1 相似度如何度量

“相似度”就是通过距离来表示。最常见的距离是“闵可夫斯基距离”:

除了常用的闵可夫斯基距离之外,还有雅卡尔相似系数、余弦相似度、相对熵、黑林格距

离等多种距离计算方法。

11.2.2 聚类性能如何度量

(1)数据含有标记信息。使用调整兰德系数(Adjusted Rand Index,ARI)指标。ARI 指标和分类问题中的准确率指标比较类似,在 sklearn 的 metrics 里面就可以调用。

(2)数据不含标记信息。使用轮廓系数来度量聚类效果。轮廓系数具有兼顾聚类的凝聚度和分离度的优点,数值为 [-1,1]。一般来说,轮廓系数越大,聚类效果越好。轮廓系数可以通过在 sklearn 的 metrics 中调用 silhouette_score 来实现。

11.2.3 具体算法介绍:K-means算法

对于 K-means 算法 中 K 的选取,目前有一种称为“Elbow Method”的方法来处理:通过绘制 K-means 代价函数与 聚类数目 K 的关系图,选取直线拐点处的 K 值作为最佳的聚类中心数目。

但实际中更为常见和提倡的做法还是算法工程师从实际问题出发人工指定合理的 K 值,通过多次随机初始化聚类中心选取比较满意的结果。

K-means 算法是初值敏感的,也就是起始时选择不同的点作为质心,最后得到的聚类结果 可能是不同的。K-means++ 算法就此问题进行了改进。

11.2.4 具体算法介绍:K-means++算法

K-means++ 算法的核心思想是,初始质心并不随机选取,而是希望这 K 个初 始质心相互之间分得越开越好。

计算每个样本点与当前已有质心的最短距离(即与最近一个质心的距离),用表示;接着计算每个样本点被选中作为下一个质心的概率,用表示。值越大表示该点被选为质心的概率越大。这个用概率选取质心的方法就是轮盘法。

轮盘法

我们来看一下如何根据权重来确定概率,实现这点的算法有很多,其中比较简单的是轮盘法。这个算法应该源于赌博或者是抽奖,原理也非常相似。

我们或多或少都玩过超市或者是其他场景下的转盘抽奖,在抽奖当中有一个指针一直保持不动。我们转动转盘,当转盘停下的时候,指针所指向的位置就是抽奖的结果。

我们都知道命中结果的概率和轮盘上对应的面积有关,面积越大抽中的概率也就越大,否则抽中的概率越小。

我们用公式表示一下,对于每一个点被选中的概率是:

其中是每个点到所有类簇的最短距离,表示点被选中作为类簇中心的概率。

轮盘法其实就是一个模拟转盘抽奖的过程,只不过我们用数组模拟了转盘。我们把转盘的扇形拉平,拉成条状,原来的每个扇形就对应了一个区间。扇形的面积就对应了区间的长度,显然长度越长,抽中的概率越大。然后我们来进行抽奖,我们用区间的长度总和乘上一个0-1区间内的数。

我们找到这个结果落在的区间,就是这次轮盘抽中的结果。这样我们就实现了控制随机每个结果的概率。

在上面这张图当中,我们随机出来的值是0.68,然后我们一次减去区间,最后落到的区间。

11.3 编程实践:手把手教你写代码

参考:

详解Kmeans的两大经典优化,mini-batch和kmeans++-腾讯云开发者社区-腾讯云

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

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

相关文章

虚幻引擎:C++网络属性同步

1. UPROPERTY(Replicated) FVector Color;//这一种没有通知,修改了值之后需要在tick中进行更新 UPROPERTY(ReplicatedUsing"OnRep_ChangeColor") FVector RanColor;//这一种有通知UFUNCTION()//有通知的同步需要绑定一个无返回值的函数 void OnRep_ChangeColor();//需…

技术干货 | GreatDB新一代读写分离架构,如何炼就近乎0损耗的性能?

优化数据库性能并降低成本是每位架构师和DBA都必须面对的挑战。其中,读写分离是一种常见方法:即通过将读操作和写操作分发到不同的数据库实例,实现多副本负载和性能提升。 传统的中间件方案,例如基于Proxysql、HAProxy、MySQL Ro…

学习笔记:CANOE模拟LIN主节点和实际从节点进行通信测试

先写点感想,在LIN开发阶段,我一般用图莫斯USB工具来进行模拟主机节点发送数据。后来公司买了CANOE工具就边学习边搭建了LIN的测试工程,网上的资料真的很少,主要是靠自己一点点摸索前进,总算入门。几个月后的今天&#…

计算机网络第4章-网络层(1)

引子 网络层能够被分解为两个相互作用的部分: 数据平面和控制平面。 网络层概述 路由器具有截断的协议栈,即没有网络层以上的部分。 如下图所示,是一个简单网络: 转发和路由选择:数据平面和控制平面 网络层的作用…

【C语言】【数据结构】【顺序表】

1.顺序表的销毁和初始化: 初始化: void SLInit(SeqList* ps) {ps->a NULL;ps->capacity 0;ps->size 0; }销毁: void SLDestroy(SeqList* ps) {if (ps->a)free(ps->a);ps->a NULL;ps->size ps->capacity 0; …

常用中间件分类

常见的中间件包括: 消息中间件:用于处理应用程序之间的异步消息传递,常见的消息中间件包括 RabbitMQ、Apache Kafka、ActiveMQ 等。 缓存中间件:用于缓存数据以加快访问速度,常见的缓存中间件包括 Redis、Memcached 等…

Python语言高级实战-内置函数super()的使用之类的单继承(附源码和实现效果)

实现功能 super()是一个内置函数,用于调用父类的方法。super() 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用&#xf…

[题] 改革春风吹满地 #图论 #多边形面积

题目 HDU 2036 改革春风吹满地 题解 参考博客&#xff1a;HDU 2036 改革春风吹满地 代码 #include<bits/stdc.h> using namespace std; const int N 110; //叉乘计算面积的公式&#xff0c;以(0,0)为起始点划分 int main() {int n;while(~scanf("%d", &…

gitlab数据备份和恢复

gitlab数据备份 sudo gitlab-rake gitlab:backup:create备份文件默认存放在/var/opt/gitlab/backups路径下&#xff0c; 生成1697101003_2023_10_12_12.0.3-ee_gitlab_backup.tar 文件 gitlab数据恢复 sudo gitlab-rake gitlab:backup:restore BACKUP1697101003_2023_10_12_…

SAP-MM-查找采购订单的创建和修改日期

在采购订单页面可以查看采购订单的修改和创建&#xff0c;但是有些内容不能完成看到 例如这个订单显示是用户唐创建&#xff0c;但是他不记得是什么时候创建的&#xff0c;怎么创建的&#xff1f; 点击菜单-环境-表头更改、项目更改&#xff0c;可以查看更改内容 通过这个表可…

蓝桥杯每日一题2023.11.6

取位数 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 由题意我们知道len中为现阶段长度&#xff0c;如果其与k相等也就是找到了正确的位数&#xff0c;否则就调用递归来进行搜索&#xff0c;每次搜索一位数。 #include <stdio.h> // 求x用10进制表示时的数位长度 int …

Zibll子比主题开心版 v7.4.2 不限域名无限搭建

Zibll子比主题是国内一款相对良心&#xff0c;更新也很不错的一款wordpress主题。专为博客、自媒体、资讯类的网站设计开发&#xff0c;简约优雅的设计风格&#xff0c;全面的前端用户功能&#xff0c;简单的模块化配置&#xff0c;欢迎您的体验。 资源入口点击进入 版本说明 新…

IntelliJ IDEA 2022创建Maven项目

IntelliJ IDEA 2022创建Maven项目 点击New Project 配置一下下 (1). 选择Maven Archetype (2). 输入Name就是你的项目名称 (3). 输入Location是你的项目保存目录 (4). 选择JDK (5). 选择Catalog一般默认选择Internal即可 在Archetype这里我们选择一个模板来创建Maven项目 …

leetcode做题笔记217. 存在重复元素

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 &#xff0c;返回 true &#xff1b;如果数组中每个元素互不相同&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,1] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;nums…

什么是Kubernetes RBAC?为什么需要它?

目录 什么是Kubernetes RBAC? 如何启用Kubernetes RBAC 1.服务帐户 2.角色和集群角色 3.角色绑定和集群角色绑定 Kubernetes RBAC的好处 1.适当的授权 2.职责分离 3.100%遵守法规 Kubernetes RBAC的缺点 企业软件开发工具 什么是Kubernetes RBAC? 当组织开始走上…

【原理篇】二、Bean加载控制

文章目录 1、编程式Bean加载控制2、注解式Bean加载控制3、Conditional派生注解4、Bean依赖的属性配置 Bean的加载控制指根据特定情况对bean进行选择性加载以达到适用于项目的目标 上篇Bean声明的方式中&#xff0c;后4种可以实现对Bean加载的控制&#xff0c;分别是&#xff1a…

设计模式——责任链模式(Chain of Responsibility Pattern)+ Spring相关源码

文章目录 一、责任链模式定义二、例子2.1 菜鸟教程2.1.1 定义一个抽象日志类2.1.2 定义日志类的具体实现类ConsoleLogger 、ErrorLogger 、FileLogger2.1.3 将日志类串起来&#xff0c;并使用 2.2 JDK源码——Filter2.3 Spring源码——HandlerInterceptor 三、其他设计模式 一、…

AI创作系统ChatGPT商业运营系统源码+支持GPT4/支持ai绘画

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

陈海波:OpenHarmony技术领先,产学研深度协同,生态蓬勃发展

11月4日&#xff0c;以“技术筑生态&#xff0c;智联赢未来”为主题的第二届OpenHarmony技术大会在北京隆重举办。本次大会由OpenAtom OpenHarmony&#xff08;简称“OpenHarmony"&#xff09;项目群技术指导委员会&#xff08;TSC&#xff09;主办&#xff0c;由华为技术…

智能网联汽车基础软件信息安全需求分析

目录 1.安全启动 2.安全升级 3.安全存储 4.安全通信 5.安全调试 6.安全诊断 7.小结 1.安全启动 对于MCU&#xff0c;安全启动主要是以安全岛BootROM为信任根&#xff0c;在MCU启动后&#xff0c;用户程序运行前&#xff0c;硬件加密模块采用逐级校验、并行校验或者混合校…