【机器学习】聚类算法详细介绍(理论+图解)


🌠 『精品学习专栏导航帖』



image-20210629190626766

 
简 介:下面是我在学习时候的记录并加上自己的理解。本文意在记录自己近期学习过程中的所学所得,如有错误,欢迎大家指正。
 
关键词:Python、机器学习

一、聚类算法的定义

像一些经典的算法比如随机森林、支持向量机这些算法我们都知道,他们都是基于对数据标签进行学习,但是往往有的时候我们获得的数据是没有标签的,只有特征列数据等,这个时候我们就不能够使用之前的算法进行建模,我们需要采用一种新的方式进行区分样本。

在生活中,可以采用人工的方式进行将数据分类,利用人的经验分析数据的结构然后将其区分,但是这样往往会花费大量的人力物力,需要较多的人力资源,而且还需要专业的人员有着大量的经验才可以完美实现分类。

所以就产生了聚类相关的算法,例如高斯混合聚类、密度聚类、K-Means聚类等。它们都是通过对无标记训练样本的学习来解释数据的内在性质和规律。

聚类的本质其实就是数据集合的划分,就是如何将我们的数据清楚的划分到几个有区分的类别中,有的时候也将这个类别成为簇。因为聚类不像有监督学习,可以有一定的参考指标,它没有统一的划分标准,完全是按照算法的定义来进行划分数据。

二、常见的聚类算法

  • 层次聚类:它的原理就是尝试以一种树状结构进行分割或者合并每个数据簇,一般有“自底向上”,就是首先将每个数据样本看成一个簇,然后计算簇间距离,然后不断地进行合并簇,最终生成几个大的数据簇,第二种就是“自上向下”,首先将所有数据看成一个数据簇,然后不断地进行分割,达到预期地要求,常见有AGNES算法。
  • 原型聚类:常见算法有K-Means、LVQ、高斯混合聚类等,他们地原理都是首先在数据样本中找到一系列具有代表性地点,然后以它为中心进行扩展,不过不同的算法实现不太一样,有时候它也叫做基于质心的聚类。
  • 概率分布聚类:它的原理就是假设每个簇内的样本数据符合某一种数据分布,然后遍历每个样本判断符合每一个簇的概率有多大,常见的就是高斯混合分布,他就是假设每个簇符合多元正态分布。
  • 密度聚类:它是通过样本的结构与数据空间紧密程度进行计算的,根据空间中的样本密集程度进行划分簇。常见的算法有DBSCAN、Mean-Shift、OPTICS等。

三、评估指标

对于有监督学习中的分类可以将预测值和实际的分类进行对比获得模型预测的准确度,对于回归可以采用MSE均方误差进行模型好坏的衡量,但是对于聚类这种无监督学习没有标签的怎么进行衡量呢?

首先我们聚类的目的就是将相似的数据分类到一起,而关联较小的数据样本分隔开,所以很明显就是我们想要我们分类后的簇内的数据尽可能相似,不同簇内的数据尽可能地有较大区别,从空间上来讲,就是簇内聚合度高,簇间的距离相对较远。

对于这种情况,一般是有两种评估方式,第一种就是外部指标:外部指标就是值参考外界给的数据进行参考,比如说找到专业人员根据数据进行分析给出大体的聚类情况,然后对比模型的聚类情况与人工给出的进行对比。该方式过于依赖人工给定的结果。

那么另外一种方式就是内部指标:它可以从模型的角度进行出发,根据一些簇间或者簇内距离这些进行定义相关的数学评估指标。

下面介绍几种常见的簇划分距离定义:

1.该公式用于计算每个簇内的样本平均距离,那么为什么前面会有一个2/C*(C+1)呢,是因为在求和的过程中要求每个数据间的距离之和,那么就是有 n ( n − 1 ) 2 \frac{n(n-1)}{2} 2n(n1) 中组合情况,所有要除以相应的个数。
a v g ( C ) = 2 C ∗ ( C + 1 ) ∗ ∑ 1 ≤ i < j ≤ C d i s t ( x i , x j ) avg(C)=\frac{2}{C*(C+1)}*\sum_{1\leq i<j \leq C}dist(x_i,x_j) avg(C)=C(C+1)21i<jCdist(xi,xj)
2.该公式是用来计算簇内之间的最远距离
d i a m ( C ) = m a x 1 ≤ i < j ≤ C d i s t ( x i , x j ) diam(C)=max_{1\leq i<j\leq C}dist(x_i,x_j) diam(C)=max1i<jCdist(xi,xj)

3.该公式是用于计算不同簇间的最近距离
d m i n ( C i , C j ) = m i n x i ∈ C i , x j ∈ C j d i s t ( x i , x j ) d_{min}(C_i,C_j)=min_{x_i\in C_i,x_j\in C_j}dist(x_i,x_j) dmin(Ci,Cj)=minxiCi,xjCjdist(xi,xj)
4.该公式用来计算每个簇中心点之间的距离
d c e n ( C i , C j ) = d i s t ( μ i , μ j ) d_{cen}(C_i,C_j)=dist(\mu_i,\mu_j) dcen(Ci,Cj)=dist(μi,μj)
常用的内部性能度量指标:

  • DB指数:

D B I = 1 k ∑ i = 1 k m a x j ≠ i ( a v g ( C i ) + a v g ( C j ) d c e n ( C i , C j ) ) DBI=\frac{1}{k}\sum_{i=1}^kmax_{j\neq i}(\frac{avg(C_i)+avg(C_j)}{d_{cen}(C_i,C_j)}) DBI=k1i=1kmaxj=i(dcen(Ci,Cj)avg(Ci)+avg(Cj))

这个公式首先看max部分,分子是两个簇内的平均距离之和,分母是两个簇间的距离之和,可想而知我们希望分子小分母大,所以最后的指标就是DBI越小,聚类效果越好。他就是取针对每个簇该值最大的,然后取平均值。为什么取最大,因为我们希望的指标是越小越好,所以我们肯定是要看大的值的。

  • Dunn指数:

D I = m i n 1 ≤ i ≤ k { m i n j ≠ j ( d m i n ( C i , C j ) m a x 1 ≤ l ≤ k d i a m ( C l ) ) } DI=min_{1\leq i \leq k}\{min_{j\neq j}(\frac{d_{min}(C_i,C_j)}{max_{1\leq l \leq k}diam(Cl)})\} DI=min1ik{minj=j(max1lkdiam(Cl)dmin(Ci,Cj))}

显然这个参数我们希望越大越好,首先看内部的min,分子是两个簇间的最短距离,分母是k个簇中最远的距离,我们希望是分子大,分母小,因为我们要它最终越大越好,所以最终的好坏我们要参考所有的最小值进行度量。

举个例子,你是一名老师,你想看一下你的教学质量,那么你是看差学生的成绩呢?还是好学生的成绩呢?肯定是坏学生的,你比如我们设定阈值为70分为界限,如果看好学生的话,他肯定是过了这个线的,但是坏学生就不一定了,但是如果你看坏学生,如果他们都过了,那么好学生也一定会过。

距离的度量方式:

常见的就是闵可夫斯基距离
d i s t ( x i , x j ) = ( ∑ u = 1 n ∣ x i u − x j u ∣ p ) 1 p dist(x_i,x_j)=(\sum_{u=1}^n|x_{iu}-x_{ju}|^p)^\frac{1}{p} dist(xi,xj)=(u=1nxiuxjup)p1
其实这就是p范数,如果当p=2时,就是我们非常熟悉的欧式距离(两点间距离公式),如果p=1,就是曼哈顿距离即绝对值距离,和MAE那个差不多。

写在最后

​         大家好,我是阿光,觉得文章还不错的话,记得“一键三连”哦!!!

以上是我在读这本书的时候的记录并加上自己的理解。本文意在记录自己近期学习过程中的所学所得,如有错误,欢迎大家指正。

image-20210629204336524

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海洋 之心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值