文章目录

  • 什么是聚类
  • 聚类与SVM算法的区别是什么
  • 聚类算法的重要知识点
  • 常见聚类算法
    • K-Means聚类
    • 层次聚类 (Hierarchical Clustering)
    • DBSCAN聚类
    • 基于密度的HDBSCAN
  • 聚类的评价方式
    • 欧几里得距离
    • 曼哈顿距离
    • 余弦距离
    • 轮廓系数
    • Calinski-Harabasz系数

什么是聚类

在前面的章节,介绍了机器学习中的第一个分类算法SVM,除此以外,如果你有关注过机器学习或者数据挖掘方面的知识,那么应该也听说过聚类。

作为机器学习中的一种重要算法,聚类也是一种无监督学习方法,它的目的是将数据分成若干组,使得每组数据之间相似度尽量大,不同组之间相似度尽量小。

聚类与SVM算法的区别是什么

由于同样是分类算法,所以我们不得不好奇聚类和SVM的具体区别是什么,以及面对怎样的问题时我们应该使用SVM,什么时候可以考虑使用聚类算法。

一个比较粗浅的区别大致是这样的:

聚类是一种 无监督学习 算法,它可以将数据自动分组,而不需要事先知道数据的标签。它通常用于对数据进行探索性分析,发现数据中的隐藏模式。

SVM 是一种 监督学习算法,它需要事先知道数据的标签。它的目的是找到一个超平面,使得不同类别的数据尽可能地分开,并且同一类别的数据尽可能地靠近。

当数据中存在明显的类别划分时,我们应该优先考虑 SVM 算法。而当数据中存在隐藏的类别划分时,我们应该优先考虑聚类。总之,聚类是对数据进行探索性分析的工具,SVM是在已知类别的情况下建立分类模型的工具。

聚类算法的重要知识点

在这一章节里我们将回顾一下关于聚类的重要知识点。我们要知道常见的聚类算法有哪些,比如:

K-means、层次聚类、密度聚类、基于模型的聚类等。

对于数据的分类依据或者说标准有哪些,比如:

距离度量、轮廓系数、Calinski-Harabasz指数等。

以及,由于该算法是无监督学习,所以为了得到一个较为理想的结果,我们可能要事先以及事后做一些处理和评判,比如:

如何选择聚类的数量、如何评估聚类的质量、如何处理离群值等。

以及,最后的可视化,是采用二维图像,还是三维,数据如何显示给目标用户或人群。

现在,我们来依次说明常见的聚类算法

常见聚类算法

K-Means聚类

K-Means是最常用的聚类算法之一,它的基本思想是对于给定的数据集,选择K个初始质心,然后将所有数据分配到距离它最近的质心所属的簇。然后重新计算每个簇的质心,重复这个过程直到簇的划分不再发生变化。

K-Means的目标函数为:

J(c1,c2,…,ck)=∑i=1k∑xj∈ci∣∣xj−μi∣∣2J(c_1,c_2,…,c_k) = \sum_{i=1}^k \sum_{x_j \in c_i} ||x_j-\mu_i||^2 J(c1​,c2​,…,ck​)=i=1∑k​xj​∈ci​∑​∣∣xj​−μi​∣∣2

其中 cic_ici​ 是第 i 个簇,μi\mu_iμi​ 是第 i 个簇的质心,xjx_jxj​ 是第 j 个样本。

K-Means聚类算法的工作原理是将数据集划分为K个簇。

算法的基本步骤如下:

  1. 随机选取K个初始质心(也叫中心点)。

  2. 对于每个数据样本,计算它与每个质心的距离,并将其分配到距离最近的质心所属的簇。

  3. 重新计算每个簇的质心。重复步骤2和3直到簇的划分不再发生变化。其中,K是用户输入的聚类数量, 收敛条件可以是最大迭代次数, 或者簇的划分不再发生变化。

初始化质心可以使用随机选取K个点, 或者手动指定。距离度量可以使用欧几里得距离, 曼哈顿距离等。分配样本到簇的过程中, 可以使用 for 循环来遍历每个样本, 找出距离它最近的质心。

重新计算质心可以使用平均值来计算新的质心坐标。

层次聚类 (Hierarchical Clustering)

层次聚类算法通过不断合并或分裂簇来划分数据集,最后形成一棵树状的层次结构。常用的层次聚类算法有凝聚层次聚类和分裂层次聚类。

凝聚层次聚类算法从单个样本开始,不断将距离最近的两个簇合并直到形成最终的簇。而分裂层次聚类算法则是从所有样本构成的一个大簇开始,不断将簇分裂直到形成最终的簇。

这种算法可以通过两种方式来实现:

  1. 分层聚类(agglomerative)方法:从每一个数据点开始,不断地将最相近的簇合并,直到所有点都被分到一个簇里。

  2. 递归分裂聚类(divisive)方法:从所有数据点开始,不断地将数据点分裂成越来越小的簇,直到每一个簇只包含一个数据点。

层次聚类的优点是可以很直观地展示数据聚类的过程和结果,并且能够处理大量数据。缺点是由于簇之间距离的定义可能不同,导致不同的算法结果不同,且计算量较大。

需要注意的是层次聚类会对数据点的顺序敏感,并且不能处理不连续的簇。

DBSCAN聚类

DBSCAN (Density-Based Spatial Clustering of Applications with Noise) 是一种基于密度的聚类算法。它可以将数据点分为若干个簇,并且不需要事先知道簇的个数。

主要思想是,如果一个数据点周围有很多其他数据点,那么它们应该属于同一个簇。而如果一个数据点周围没有很多其他数据点,那么它们应该属于不同的簇。

DBSCAN 算法主要有两个参数:半径 ϵ\epsilonϵ 和最小样本数量 minPtsminPtsminPts。半径 ϵ\epsilonϵ 指定了一个数据点周围的范围,最小样本数量 minPtsminPtsminPts 指定了在这个范围内最少需要有多少个数据点才能认为这个数据点是一个核心点。

DBSCAN 算法的流程如下:

  1. 从每个数据点开始,找到所有在半径 ϵ\epsilonϵ 内的数据点,如果找到的数据点的数量大于 minPtsminPtsminPts,则这个数据点是一个核心点。

  2. 对于每个核心点,找到它周围所有的核心点,并将它们划分到同一个簇中。

  3. 对于每个非核心点,如果它距离至少一个核心点不超过 ϵ\epsilonϵ,那么它就划分到对应的簇中。

DBSCAN 的优点是能够发现任意形状的簇,不需要事先知道簇的个数,并且对于噪声数据也能很好的处理。缺点是参数 ϵ\epsilonϵ 和 minPtsminPtsminPts 比较难调整,并且对于高维数据效果不佳。需要注意的是 DBSCAN 不能处理不连续的簇,对于这种情况需要使用其他聚类算法如基于密度的聚类算法 HDBSCAN.

基于密度的HDBSCAN

HDBSCAN (Hierarchical Density-Based Spatial Clustering of Applications with Noise) 是一种基于密度的层次聚类算法,是对DBSCAN算法的扩展。

在DBSCAN算法中,聚类的结果是以密度为基础的,但是它需要手动调整参数,而且对于不同密度的簇难以处理。而HDBSCAN算法则通过计算簇的密度来确定簇的边界,并且使用层次聚类方法来组合不同密度的簇。

基本算法流程如下:

  1. 从数据点中选取密度最大的点作为核心点。

  2. 对于核心点所在的密度相连簇进行聚类,得到若干个子簇。

  3. 对于每个子簇,判断是否符合簇的条件(即密度是否足够大),如果符合条件则继续聚类,否则当前簇结束。

HDBSCAN算法的优点是不需要手动调整参数,能够处理不同密度的簇,并且能够识别噪声点。

聚类的评价方式

就像其他所有机器学习算法中一样,聚类也有评价函数或者损失函数,用来衡量算法收敛效果,由于在这类评价函数在聚类中扮演及其重要的角色,所以我们不得不在这个部分再多花点时间来了解关于聚类算法中极为重要的一部分。

一般来说,聚类的评价是用来度量样本间的相似性。常用的距离度量有欧几里得距离、曼哈顿距离、余弦距离等。例如,

欧几里得距离

欧几里得距离(Euclidean distance)是一种距离度量,它用来度量两个样本之间的相似性。欧几里得距离是根据两个样本在所有特征上的差值的平方和来计算的。公式为:
d(x,y)=∑i=1n(xi−yi)2d(x, y) = \sqrt{\sum_{i=1}^n (x_i - y_i)^2} d(x,y)=i=1∑n​(xi​−yi​)2​

其中 xxx 和 yyy 分别表示两个样本,xix_ixi​ 和 yiy_iyi​ 分别表示两个样本在第 iii 个特征上的值。欧几里得距离是常用的距离度量之一,因为它简单易用,并且对于数值型数据有很好的效果。

曼哈顿距离

曼哈顿距离(Manhattan distance)是另一种常用的距离度量。与欧几里得距离不同,曼哈顿距离是根据两个样本在所有特征上的差值的绝对值之和来计算的。公式为:

d(x,y)=∑i=1n∣xi−yi∣d(x, y) = \sum_{i=1}^n |x_i - y_i| d(x,y)=i=1∑n​∣xi​−yi​∣

其中 xxx 和 yyy 分别表示两个样本,xix_ixi​ 和 yiy_iyi​ 分别表示两个样本在第 iii 个特征上的值。

曼哈顿距离通常用于数值型数据之间的距离计算,特别是当数据维度很高时,曼哈顿距离比欧几里得距离更具优势。

曼哈顿距离也常用于在空间中计算两个点之间的距离,在某些论文或者书籍中,它又称为L1距离,因为它的定义是两点之间所有维度上的绝对值差之和。

所以,在二维平面上,两点 (x1, y1) 和 (x2, y2) 之间的曼哈顿距离定义为:

d=∣x1−x2∣+∣y1−y2∣d = |x1 - x2| + |y1 - y2| d=∣x1−x2∣+∣y1−y2∣

在多维空间中,两个点 x=(x1,x2,...,xn)x = (x_1, x_2, ..., x_n)x=(x1​,x2​,...,xn​) 和 y=(y1,y2,...,yn)y = (y_1, y_2, ..., y_n)y=(y1​,y2​,...,yn​) 之间的曼哈顿距离定义为:

d=∑i=1n∣xi−yi∣d = \sum_{i=1}^{n} |x_i - y_i| d=i=1∑n​∣xi​−yi​∣

曼哈顿距离是一种常用的距离度量方式,它能够应用在各种各样的场景中。在聚类分析中,曼哈顿距离可以用来计算类簇中各个样本之间的相似程度。

在聚类中,曼哈顿距离可以用来计算类簇中各个样本之间的相似程度。同时它也是一种常用的距离度量方式,它能够应用在各种各样的场景中,如机器学习中的KNN算法。

余弦距离

余弦距离是一种常用的距离度量,它表示两个向量之间的余弦相似度。它是通过计算两个向量的夹角余弦值来衡量他们之间相似程度的。

公式为:
cos(theta)=(A∗B)/(∣∣A∣∣∗∣∣B∣∣)cos(theta) = (A * B) / (||A|| * ||B||) cos(theta)=(A∗B)/(∣∣A∣∣∗∣∣B∣∣)

其中 A,B 是两个向量,||A||,||B||表示向量A,B的模长。

余弦距离实际上就是1减去余弦相似度,即

d(A,B)=1−cos(θ)d(A,B) = 1 - cos(\theta) d(A,B)=1−cos(θ)

余弦距离在聚类算法中常用于文本数据的聚类,因为它可以很好的衡量文本之间的相似性。除此以外,我们还可以采用其他方式评价聚类的好坏,例如

轮廓系数

轮廓系数(Silhouette coefficient)是用来评估聚类结果的一种度量方法。它衡量了每个样本在所在簇内与其他样本的相似度与所在簇与其他簇的差异度之间的比值。通俗来说,轮廓系数越大,说明样本聚在一起的程度越高,聚类效果越好。

计算公式为:

⁡s(i)=b(i)−a(i)max⁡(a(i),b(i))s(i) = \frac{b(i) - a(i)}{\max(a(i), b(i))} s(i)=max(a(i),b(i))b(i)−a(i)​

其中,a(i)a(i)a(i)表示样本 iii 到其所在簇中其它样本的平均距离,b(i)b(i)b(i)表示样本 iii 到其最近的其它簇中所有样本的平均距离。

轮廓系数的值在-1到1之间,其中-1表示样本被错误聚类,1表示样本被完美聚类。一般来说,轮廓系数越接近1,聚类效果越好。

Calinski-Harabasz系数

Calinski-Harabasz系数是一种常用的聚类评估指标,它用来评估聚类结果的优良程度。

它的计算公式是:

CH=Bt(k−1)WtCH = \frac{B_t}{(k-1)W_t} CH=(k−1)Wt​Bt​​

其中 k 是类别数量,n 是样本数量,BtB_tBt​表示类内平方和,WtW_tWt​表示类间平方和。类内平方和表示每个类内样本与类中心的距离平方和,类间平方和表示所有类中心与总体中心的距离平方和。

Calinski-Harabasz系数越大,表明聚类结果越优秀。一般来说,值在40-50之间的聚类结果较好。

OK,那么关于聚类的基本知识点就到这里,下一篇文章中我们来看看一个简单的 K-Means 是如何实现的。

机器学习知识总结 —— 17.什么是聚类相关推荐

  1. 白话机器学习算法理论+实战之EM聚类

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,比如我之前写过的一篇十大机器学习算法的小总结,在这简单的先捋一捋, 常见的机器学习算法: 监督学习算法:逻辑 ...

  2. 《机器学习思维导图》,一图掌握机器学习知识要点

    来源:专知本文附长图,建议阅读5分钟一图掌握机器学习知识要点. mindmap of Machine Learning 基本上是总结李宏毅老师的ML课 原图及相关资料见链接: https://gith ...

  3. 机器学习知识体系(强烈推荐)

    机器学习知识体系(强烈推荐) 随着2016年Alpha Go在围棋击败李世石,2017年初卡内基梅隆大学人工智能系统Libratus在长达20天的鏖战中,打败4名世界顶级德州扑克玩家,这标志着人工智能 ...

  4. 机器学习知识总结系列- 知识图谱(0-0)

    文章目录 目录 机器学习知识图谱 目录 本系列的文章只是根据个人的习惯进行总结,可能结构与一些书籍上不太一样,开始的内容比较简单,会随着后续的深入,不断丰富和更新图谱,同时也期待有相同兴趣的朋友一起给 ...

  5. 人工智能(10)---机器学习知识体系篇(初级篇,中级篇,高级篇)

    机器学习知识体系篇(初级篇,中级篇,高级篇) 下面是自己总结一套人工智能机器学习整个知识体系,一起学习,有总结不到位的希望大家给出纠正! 一 人工智能基础语法篇 二 人工智能中级篇 三 人工智能高级篇

  6. 【福利】【送书第四弹】机器学习知识体系

    [福利][两周年庆典,送书第四弹] 本次赠送6本(以下两本随机赠送) 开奖方式:1024人或3天自动开奖 点击下方小程序 推荐理由: 本书是一本优秀的数据科学入门教材,由资深数据科学家撰写,不仅全面. ...

  7. 数据分析实战:python热门音乐分析 附代码+数据 +论文(PCA 主成分分析,sklearn 机器学习,pytorch 神经网络,k-means 聚类,Librosa 音频处理,midi 音序)

    项目概述: 本选取了抖音当下最热门的 400 首音乐,通过一系列方法提取每首歌的波形特征,再经过降维以及机器学习等手段,进行无监督学习对音乐数据进行聚类的同时训练并使用监督学习分类器进行音乐流派分类, ...

  8. 机器学习之无监督学习-K均值聚类算法

    机器学习之无监督学习-K均值聚类算法 对于无监督学习,有两类重要的应用,一个是聚类,一个是降维.我们今天主要学习聚类中的K均值聚类. 我们先看看下图,图a为原始的数据点,我们想要对图a的数据点进行分类 ...

  9. Java多线程相关知识【17】--设计模式--上下文模式(Context)

    文章目录 Java多线程相关知识[17]--设计模式--上下文模式(Context) 1. 问题的引入 2. 解决方法 1. 解决理论 2. 实操代码 上下文数据保存 上文 下文 调度者 测试上下文 ...

最新文章

  1. Fedora 24 Alpha带着Gnome 3.20姗姗来迟
  2. mysql启动和关闭外键约束的方法
  3. input标签内容改变的触发事件
  4. Numpy.argsort()(Python)
  5. 新建maven项目更改 web版本
  6. 动手实现深度学习pytroch版
  7. Windows上搭建EMQTT服务器
  8. 使用Forge,WildFly Swarm和Arquillian开发微服务
  9. RFC 8998: ShangMi (SM) Cipher Suites for TLS 1.3
  10. python urllib.parse_Python3 urllib.parse 常用函数示例
  11. 三级数据库知识点总结
  12. 【ATSC】美国地面数字电视广播从ATSC 1.0向ATSC 3.0标准的过渡
  13. WSUS服务器点击报告报错解决办法
  14. OSChina 周一乱弹 —— 原来我的名字还有这么美的一个故事
  15. 使用Git Bash的scp复制文件到Linux
  16. Vulnhub——JANGOW: 1.0.1
  17. (三)音视频:解析H264 SPS 更进一步理解H264
  18. Java scanner输入多个数字其总和和平均数,每输入一个canner输入多个数字其总和和平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出结果
  19. K8S集群应用市场安装部署:第一篇
  20. 详解申请微信h5支付方法,开通微信h5网页支付接口(转)

热门文章

  1. ABLIC推出业界超小型(*1)车载用高侧开关S-19682/3系列 具摄像头/天线连接诊断功能
  2. 阴阳师官网导航栏 html+css
  3. Microsoft Office Professional Plus 2010 赖皮弹窗
  4. 儿童语言发育迟缓分类中C群d是指,(S—S法)语言发育迟缓检查(CRRC版)
  5. 英雄联盟阿卡丽操作技巧
  6. 2016年readme.html病毒,尼姆达Readme.exe(Nimda)病毒详情及防治
  7. 抖音直播提升人气,如何让抖音直播间人多
  8. 三菱FX3U与台达变频器通讯 采用485方式,modbus RTU协议,对台达变频器频率设定
  9. ASP.NET 学习方法推荐(图)(引自传播智客)
  10. JSP贸易管理系统myeclipse开发mysql数据库struts编程java语言