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

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

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.rhkb.cn/news/183689.html

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

相关文章

用Java(C语言也可以看)实现冒泡排序和折半查找(详细过程图)+逆序数组

目录 一、冒泡排序 1.冒泡排序介绍 2.排序的思路 3.完整代码 二、折半查找 1.折半查找介绍 2.查找的思路 3.完整代码 三、逆序数组 1.逆序思路 2..完整代码 一、冒泡排序 冒泡排序是众多排序的一种,无论在C语言或者Java中都很常见,后续在数据…

基于Chirp窄带扩频技术的无线混合组网应用,以多角色智能计量插座作为Chirp广域基站,构建边缘计算混合无线网络

随着物联网(IoT)的不断发展,无线通信技术的需求也在不断增加。Chirp窄带扩频技术是一种具有广泛应用潜力的无线通信技术,它在低功耗、广域覆盖、抗干扰等方面具备独特的优势。本文介绍了如何利用磐启微Chirp技术构建ECWAN无线混合…

iSlide2024一款基于PPT的插件工具包含38个设计辅助功能

根据使用者情况表明iSlide 是一款拥有30W素材的PPT高效设计软件,可提高90%工作效率,现全球已有超过1400万使用者,智能排版原创高品模板可商用图形,真正摆脱PPT的束缚,把精力用在该用的地方。我们都明白islide插件功能特…

『昆仑天工』4款AI产品开源!提供API对接!

在文章开篇,小圈先介绍下 昆仑万维 公司旗下的AI大模型**『天工』**,它是由昆仑万维自研的双千亿级大语言模型, 也是国内首个对标ChatGPT的双千亿级大语言模型,可满足文案创作、知识问答、代码编程、逻辑推演、数理推算等需求。 …

skynet学习笔记01— skynet开发环境搭建(超详细)与第一个skynet程序

01、前置准备 开发所在目录 mhzzjmhzzj-virtual-machine:~/work/skynetStudy$ pwd /home/mhzzj/work/skynetStudy前置准备 mhzzjmhzzj-virtual-machine:~/work/skynetStudy$ sudo apt install lua5.3 mhzzjmhzzj-virtual-machine:~/work/skynetStudy$ apt install git mhzzj…

Stable Diffusion 的提示词使用技巧

推荐Stable Diffusion自动纹理工具: DreamTexture.js自动纹理化开发包 什么是提示语? 提示语是人工智能中的一个重要组成部分,尤其是自然语言处理 (NLP)。在AI自人工智能中,想要获得好的效果,简…

物联网AI MicroPython学习之语法 uhashlib哈希算法

学物联网,来万物简单IoT物联网!! uhashlib 介绍 实现二进制数据散列算法,支持sha256,sha1,MD5。 接口介绍 sha256 - 创建一个SHA256哈希对象 参数原型:hash_obj uhashlib.sha256([bytes]) …

220v插座led指示灯维修

由于220v是交流电,有反向电压的情况,而led反向通电的时候电阻无穷大,所以分压也无穷大,220v一导通就击穿,即使加了很大的电阻也没用,串联电阻只能作用于二极管正向的时候。 目前有两种方案: 方…

UE5 新特性 Nanite 开启

啥也不说,只能说,真的牛,在自己的项目上,从10几20的帧数,直接彪到了70 适用场景: 大场景,三角面足够多 在Project Setting里面 将这几个勾未true 勾上这个,放入场景即可

Hadoop知识点全面总结

文章目录 什么是HadoopHadoop发行版介绍Hadoop版本演变历史Hadoop3.x的细节优化Hadoop三大核心组件介绍HDFS体系结构NameNode介绍总结 SecondaryNameNode介绍DataNode介绍DataNode总结 MapReduce介绍分布式计算介绍MapReduce原理剖析MapReduce之Map阶段MapReduce之Reduce阶段 实…

Rust编程基础之条件表达式和循环

1.if表达式 if 表达式允许根据条件执行不同的代码分支, 以下代码是一个典型的使用if表达式的例子: fn main() {let number 3; ​if number < 5 {println!("condition was true");} else {println!("condition was false");} } 所有的 if 表达式都以…

【C++杂货铺】再谈哈希算法:位图 | 布隆过滤器 | 哈希切分

文章目录 一、位图1.1 一道面试题1.2 位图的概念1.3 位图的模拟实现1.4 位图的应用1.4.1 给定100亿个整数&#xff0c;设计算法找到只出现一次的整数1.4.2 给两个文件&#xff0c;分别有100亿个整数&#xff0c;我们只有1G内存&#xff0c;如何找到两个文件交集&#xff1f;1.4…

RabbitMQ 消息应答与发布

目录 一、消息应答 1、自动应答&#xff08;默认&#xff09; 2、手动消息应答的方法 ​编辑 3、消息重新入队 4、手动应答案列与效果演示 二、RabbitMQ持久化 1、队列持久化 2、消息持久化 三、不公平分发&#xff08;能者多劳&#xff0c;弱者少劳&#xff09; 1、…

设计模式之命令模式

定义 命令(Command)模式&#xff1a;将请求封装成对象&#xff0c;以便使用不同的请求、日志、队列等来参数化其他对象&#xff0c;命令模式也支持撤销操作。 命令模式是对命令的封装&#xff0c;把发出命令的责任和执行命令的责任分割开&#xff0c;委派给不同的对象。 类图和…

企业级低代码平台需具备的关键能力解析

低代码是数字化转型浪潮下的产物&#xff0c;国内外已经生产出了很多成熟的产品。目的是让企业以更低的成本、更快的周期、更易操作的方式完成企业数字化布局&#xff0c;以实现内部的高效工作。 一、什么是“企业级”低代码&#xff1f; 首先&#xff0c;我们先回答什么是“…

番外---10.1 gcc+make调试程序

######### step0&#xff1a;理解程序调试&#xff1b; &#xff08;原始程序文件--->目标文件---->可执行文件&#xff1b;&#xff09; step1&#xff1a;掌握使用gcc的调试方法&#xff1b; step2&#xff1a;掌握使用make编译方法&#xff1b; ######### step0&…

0002Java安卓程序设计-基于Uniapp+springboot菜谱美食饮食健康管理App

文章目录 开发环境 《[含文档PPT源码等]精品基于Uniappspringboot饮食健康管理App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功 编程技术交流、源码分享、模板分享、网课教程 &#x1f427;裙&#xff1a;776871563 功能介绍&#xff…

TypeScript学习Ts的类型声明,关于类

TypeScript是什么&#xff1f; 以JavaScript为基础构建的语言一个JavaScript的超集可以在任何支持JavaScript的平台上执行TypeScript扩展了JavaScript并添加了类型TS不能被JS解析器直接执行 TypeScript开发环境搭建 下载Node.js安装Node.js使用npm全局安装TypeScript&#x…

进阶JAVA篇-深入了解 List 系列集合

目录 1.0 List 类的说明 1.1 List 类的常用方法 1.2 List 集合的遍历方式 2.0 ArrayList 集合的底层原理 2.1 从 ArrayList 集合的底层原理来了解具有该特性的原因&#xff1a; 2.2 ArrayList 集合的优缺点 3.0 LinkedList 集合的底层原理 3.1 从 LinkedList 集合的底层原理来了…

Elasticsearch 8.X 如何生成 TB 级的测试数据 ?

1、实战问题 我只想插入大量的测试数据&#xff0c;不是想测试性能&#xff0c;有没有自动办法生成TB级别的测试数据&#xff1f;有工具&#xff1f;还是说有测试数据集之类的东西&#xff1f;——问题来源于 Elasticsearch 中文社区https://elasticsearch.cn/question/13129 2…