聚类
1. 什么是聚类⁉️
➡️ 聚类就是把相似的物品分到一组。例如苹果,橙子属于水果类,猫,狗属于动物类,聚类把具有相似属性的物品分到同一组。
☕常见的两种监督问题
- 有监督问题:有标签学习,通过已知输入输出的训练样本进行训练,从而得到一个最优的模型,并将该模型应用在新的数据上,映射为输出结果。
- 无监督问题:无标签学习,对没有标记的训练样本(即不知道当前输入数据对应的输出)进行学习,以发现训练样本集中的结构性知识。通过对无标记的学习来揭示数据的内在性质和潜在规律,为进一步的数据分析提供基础。
➡️ 聚类是一个典型的无监督的问题
➡️ 聚类算法应用的难点:难以评估、难以调参
接下来介绍常见的两种基于原型的聚类方法, K − M E A N S K-MEANS K−MEANS聚类算法, D B S C A N DBSCAN DBSCAN聚类算法
2. K − M E A N S K-MEANS K−MEANS聚类
2.1 基本概念📚️
先来看一下百度对 k − m e a n s k-means k−means的定义
k k k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是,预将数据分为K组,则随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。
百度的这个定义介绍的挺详细,接下来对其中的一些概念进行更细致的介绍
k − m e a n s k-means k−means算法也叫 k k k均值算法。这里的k指的是要将数据划分为几个簇(也就是几堆)。这里的均值指的是每个聚类中心(质心)都是由各个维度求均值来确定的。
-
簇的个数: K K K的值
-
质心(聚类中心):有几个簇就有几个质心,即向量(在实际计算中数据以向量的形式表示)各维求平均
计算质心
在一个二维平面中,一簇数据点的质心的横坐标就是这一簇数据点的横坐标的均值,质心的纵坐标就是这一簇数据点的纵坐标的均值,同理可推广至高维空间。
-
距离的度量:常用欧几里得距离和余弦相似度,需要先对数据进行标准化操作,原本的数据范围可能非常大,数据间距离也很大,标准化即将数据映射到一个较小的范围内,方便操作。
一般情况下,在欧式空间中采用的是欧式距离,在处理文档中采用的是余弦相似度函数,有时候也采用曼哈顿距离作为度量
-
欧几里得距离
d ( x , y ) = ( x 1 − y 1 ) 2 + ( x 2 − y 2 ) 2 + ⋯ + ( x n − y n ) 2 = ∑ i = 1 n ( x i − y i ) 2 \mathrm{d}(\mathrm{x}, \mathrm{y})=\sqrt{\left(\mathrm{x}_{1}-\mathrm{y}_{1}\right)^{2}+\left(\mathrm{x}_{2}-\mathrm{y}_{2}\right)^{2}+\cdots+\left(\mathrm{x}_{\mathrm{n}}-\mathrm{y}_{\mathrm{n}}\right)^{2}}=\sqrt{\sum_{\mathrm{i}=1}^{\mathrm{n}}\left(\mathrm{x}_{\mathrm{i}}-\mathrm{y}_{\mathrm{i}}\right)^{2}} d(x,y)=(x1−y1)2+(x2−y2)2+⋯+(xn−yn)2=∑i=1n(xi−yi)2
-
余弦相似度
给定两个属性向量,A和B,其余弦相似性 θ 由点积和向量长度给出,如下所示
cos ( θ ) = A ⋅ B ∥ A ∥ ∥ B ∥ = ∑ i = 1 H A i × B i ∑ i = 1 n ( A i ) 2 × ∑ i = 1 n ( B i ) 2 \cos (\theta)=\frac{\mathrm{A} \cdot \mathrm{B}}{\|\mathrm{A}\|\|\mathrm{B}\|}=\frac{\sum_{\mathrm{i}=1}^{\mathrm{H}} \mathrm{A}_{\mathrm{i}} \times \mathrm{B}_{\mathrm{i}}}{\sqrt{\sum_{\mathrm{i}=1}^{\mathrm{n}}\left(\mathrm{A}_{\mathrm{i}}\right)^{2}} \times \sqrt{\sum_{\mathrm{i}=1}^{\mathrm{n}}\left(\mathrm{B}_{\mathrm{i}}\right)^{2}}} cos(θ)=∥A∥∥B∥A⋅B=∑i=1n(Ai)2×∑i=1n(Bi)2∑i=1HAi×Bi
给出的相似性范围从-1到1:-1意味着两个向量指向的方向正好截然相反,1表示它们的指向是完全相同的,0通常表示它们之间是独立的,而在这之间的值则表示中间的相似性或相异性。
-
曼哈顿距离
d ( i , j ) = ∣ x i − x j ∣ + ∣ y i − y j ∣ \mathrm{d}(\mathrm{i}, \mathrm{j})=|\mathrm{xi}-\mathrm{xj}|+|\mathrm{yi}-\mathrm{yj}| d(i,j)=∣xi−xj∣+∣yi−yj∣
-
-
优化的目标: m i n ∑ i = 1 k ∑ x ∈ C i d i s t ( c i , x ) 2 min \sum\limits_{i=1}^{k} \sum\limits_{x \in C_i} dist(c_i,x)^2 mini=1∑kx∈Ci∑dist(ci,x)2
2.2 基本流程⏳️
通过上面这张图中的实际例子来感受一下 k − m e a n s k-means k−means聚类的基本流程
(a)加载数据,这里用绿色的点表示
(b)随机生成两个初始的聚类中心(红色× 和 蓝色×)
(c)计算所有点与这两个聚类中心的距离(欧几里得距离),如果离红色聚类中心近则将其该数据点归为红色类,否则为蓝色类
(d)重新计算聚类中心,每一个聚类中心所归属的点x轴、y轴求平均,获得新的聚类中心
(e)重复(c)
(f)重复(d)
(g)聚类中心基本不发生变化,退出循环
2.3 优缺点🛡️
-
优点👍️
- 简单、快速、适合常规数据集
-
缺点👎️
-
k值难以确定,不同的k会有不同的结果
-
复杂度与样本呈线性关系,因为每一次更新都需要计算所有点与聚类中心的距离
-
很难发现任意形状的簇
-
每一次运行结果可能不相同,需要多次实验取平均,尤其是复杂数据集,例如以下两张图
-
2.4 可视化展示
这里介绍一个可视化展示 k − m e a n s k-means k−means的网站,通过这种方式可以更加直观理解算法,网址为:https://www.naftaliharris.com/blog/visualizing-k-means-clustering/
3. D B S C A N DBSCAN DBSCAN 聚类
3.1 基本概念📚️
同样的先来看一下定义
D B S C A N DBSCAN DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法。与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在噪声的空间数据库中发现任意形状的聚类。
这里着重解释以下什么是基于密度,这里的密度指的是在半径r的圆中点的个数
接下来介绍几个核心概念,方便了解算法流程
-
核心对象:若某个点的密度达到算法设定的阈值则其为核心点(即r邻域内点的输入不小于 m i n P t s minPts minPts)
-
∈ − \in- ∈−邻域的距离阈值:设定的半径 r r r
-
直接密度可达:若某点 p p p在点 q q q的 r r r邻域内,且 q q q是核心点,则 p − q p-q p−q直接密度可达
即 q q q是核心点且点 p p p在以点 q q q为圆心半径为 r r r的圆内
-
密度可达:若有一个点的序列 q 0 , q 1 、 ⋯ q k q_0,q_1、\cdots q_k q0,q1、⋯qk,对任意的 q i − q i − 1 q_i-q_{i-1} qi−qi−1是直接密度可达的,则称 q 0 q_0 q0到 q k q_k qk密度可达,这里实际上是直接密度可达的“传播”。类似于传销,每个点都可以发展下线,下线也可以发展下线。
-
密度相连:若从某核心点 p p p出发,点 p p p和点 k k k都是密度可达的,则称点 q q q和点 k k k是密度相连的。
-
边界点:属于某一个类的非核心点,不能发展下线了
-
直接密度可达:若某点 p p p在点 q q q的 r r r邻域内,且 q q q是核心点则 p − q p-q p−q直接密度可达。
-
噪声点:不属于任何一个类簇的点,从任何一个核心点出发都是密度不可达的。
上面纯理论的介绍可能比较抽象,接下来通过图直观了解
其中
- A A A(红色):核心对象
- B , C B,C B,C(黄色):边界点
- N N N(蓝色):离群点
在实际应用中离群点不可以随意抛弃,在缺陷检测中,缺陷和故障就属于离群点。
3.2 基本流程⏳️
➡️ 工作流程
用通俗的话讲此算法的工作流程和传销很类似,传销头目 1 1 1可以发展下线,下线也可以发展下线,直到发展不了下线了,这时第一个簇的所有点被分出来了。接着传销头目 2 2 2也重复传销头目 1 1 1的操作,于是第二个簇也全部分出来,以此类推,所有的簇都可以分出来。
伪代码是对算法相对规范的描述,此算法的伪代码比较好理解,这里不赘述了。
算法伪代码如下:
- 参数 D D D:输入数据集
- 参数 ∈ \in ∈ : 指定半径
- M i n P t s MinPts MinPts:密度阈值
➡️ 参数选择
-
半径 ∈ \in ∈ :可以根据 K K K距离来设定,找突变点
K K K距离:给定数据集 P = p ( i ) ; i = 0 , 1 , ⋯ n P={p(i);i=0,1,\cdots n} P=p(i);i=0,1,⋯n,计算点 p ( i ) p(i) p(i)到集合 D D D的子集 S S S中所有点之间的距离,距离按照从小到大的顺序排序, d ( k ) d(k) d(k)就被成为 k − 距离 k-距离 k−距离
突变点即为 k k k距离突然发生较大变化的点
-
M i n P t s MinPts MinPts: k − 距离 k-距离 k−距离中 k k k的值,一般取的小一些,多次尝试
3.3 优缺点🛡️
- 优点👍️
- 不需要指定簇的个数
- 可以发现任意形状的簇
- 擅长找到离群点(检测任务)
- 只需要确定两个参数
- 缺点👎️
- 高维数据有些困难(可以做降维)
- 参数的值难以选择(参数对结果的影响非常大)
- s k l e a r n sklearn sklearn中效率很慢(数据削减策略)
3.4 可视化展示
同样的 D B S C A N DBSCAN DBSCAN的可视化网站如下:https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/
很明显这是同一个人开发的 K − M E A N S K-MEANS K−MEANS和 D B S C A N DBSCAN DBSCAN可视化网站
参考博客:https://blog.csdn.net/weixin_43283397/article/details/105241340