机器学习——聚类算法(clustering)

1、什么是聚类?

通俗地讲,聚类就是将不带任何标签的数据分成不同的组,是一种典型的无监督机器学习算法,聚类的难点:难以评估和调参。用两张图来理解分类和聚类的区别:
分类:
机器学习——聚类算法(clustering)_第1张图片
聚类:
机器学习——聚类算法(clustering)_第2张图片

2、K-means聚类

k-means算法是经典的聚类算法之一,在不带标签的多维数据集中寻找确定数量的簇。以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。
几个重要的基本概念:

  • K值:需要得到的簇的个数,需要人为指定K值
  • 簇中心点:各个簇的中心,属于该簇的所有数据点坐标的算术平均值
  • 点到簇中心的距离:常用欧式距离和余弦相似度进行计算(先标准化)
  • 优化目标: min ⁡ ∑ i = 1 K ∑ x ∈ C i d i s t ( C i , x ) 2 \min\displaystyle\sum_{i=1}^K\sum_{x\in C_i}dist(C_i,x)^2 mini=1KxCidist(Ci,x)2

K-means算法:期望最大化
期望最大化(expectation-maximization)成为E-M算法,核心步骤如下:
(1)任意选择k个对象作为初始的簇中心
(2)重复以下步骤直至收敛

  • a.期望步骤(E-step):将点分配至离其距离最近的簇中心点
  • b.最大化步骤(M-step):将簇中心点设置为改簇中所有点坐标的均值

K-means聚类的优缺点
优点:简单快速,适合常规数据集
缺点:
①初始随机选择的K个簇中心点对聚类影响大,可能不会达到最优全局解
②K值必须事先确定,无法从数据中自动学习到簇的数量
③K-means算法只能确定线形聚类边界,当簇中心点呈现非线性的复杂形状事,算法会失效
机器学习——聚类算法(clustering)_第3张图片
④当数据量较大时,K-means算法会很慢,因为每次迭代都必须对所有数据点进行计算

K-means算法可视化网站:https://www.naftaliharris.com/blog/visualizing-k-means-clustering/

3、DBSCAN聚类算法

DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种很典型的密度聚类算法。算法假定类别可以通过样本分布的紧密程度决定,同一类别的样本,他们之间是紧密相连的,也就是说,在该类别任意样本周围不远处一定有同类别的样本存在。

定义:由密度可达关系导出的最大密度相连的样本集合,即为我们最终聚类的一个类别,或者说一个簇。

假设样本集是 D = ( x 1 , x 2 , ⋯   , x m ) , D=(x_1,x_2,\cdots,x_m), D=(x1,x2,,xm),参数( ϵ \epsilon ϵ, MinPts)用来描述邻域的样本分布紧密程度。其中, ϵ \epsilon ϵ描述了某一样本的邻域距离阈值,MinPts描述了某一样本的距离为 ϵ \epsilon ϵ的邻域中样本个数的阈值。
几个重要的基本概念:

  • ϵ \epsilon ϵ-领域:对于 x j ∈ D x_j\in D xjD,其 ϵ \epsilon ϵ-邻域包含样本集 D D D中与 x j x_j xj的距离不大于 ϵ \epsilon ϵ的子样本集。用集合算法表示为 N ϵ ( x j ) = { x i ∈ D ∣ d i s t a n c e ( x i , x j ) ≤ ϵ } N_{\epsilon}(x_j)=\lbrace x_i \in D|distance(x_i,x_j)\leq\epsilon\rbrace Nϵ(xj)={xiDdistance(xi,xj)ϵ},这个子样本集的样本个数记为 ∣ N ϵ ( x j ) ∣ |N_{\epsilon}(x_j)| Nϵ(xj)
  • 核心对象:对于任意的 x j ∈ D x_j\in D xjD,如果 ∣ N ϵ ( x j ) ∣ ≥ |N_{\epsilon}(x_j)|\geq Nϵ(xj)MinPts,则 x j x_j xj是核心对象
  • 密度直达:如果 x i ∈ N ϵ ( x j ) x_i\in N_{\epsilon}(x_j) xiNϵ(xj),且 x j x_j xj是核心对象,则称 x i x_i xi x j x_j xj密度直达。但不能说 x j x_j xj x i x_i xi密度直达,因为 x i x_i xi不一定是核心对象
  • 密度可达:对于 x i , x j x_i,x_j xi,xj,如果存在样本序列 p 1 , p 2 , ⋯   , p T p_1,p_2,\cdots,p_T p1,p2,,pT,满足 p 1 = x i , p T = x j p_1=x_i,p_T=x_j p1=xi,pT=xj,且 p t + 1 p_{t+1} pt+1 p t p_t pt密度直达,则称 x j x_j xj x i x_i xi密度可达。密度可达具有传递性,其中序列中的传递样本 p 1 , p 2 , ⋯   , p T − 1 p_1,p_2,\cdots,p_{T-1} p1,p2,,pT1均为核心对象
  • 密度相连:对于 x i , x j x_i,x_j xi,xj,如果存在核心对象 x k x_k xk,使得 x i x_i xi x j x_j xj均由 x k x_k xk密度可达,则称 x i x_i xi x j x_j xj密度相连
  • 边界点:属于某个类的非核心对象
  • 噪声点:不属于任何一个类簇的点,从任何一个核心对象出发都是密度不可达的

DBSCAN聚类思想
任意选择一个没有类别的核心对象作为种子,然后找到所有这个核心对象能够密度可达的样本集合,即为一个聚类簇。接着继续选择另一个没有类别的核心对象去寻找密度可达的样本集合,这样就得到另一个聚类簇。一直运行到所有核心对象都有类别为止。

DBSCAN聚类思想存在的问题:
某些样本可能到两个核心对象的距离都小于 ϵ \epsilon ϵ,但是这两个核心对象由于不是密度直达,又不属于同一个聚类簇,那么如何界定这个样本的类别呢?一般来说,此时DBSCAN采用先来后到,先进行聚类的类别簇会标记这个样本为它的类别,也就是说DBSCAN的算法不是完全稳定的算法。

DBSCAN聚类算法的优缺点
优点:
①可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集
②可以在聚类的同时发现异常点,对数据集中的异常点不敏感
③聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响。
④无需指定簇的数量
缺点:
①如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合
②调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值 ϵ \epsilon ϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响

参数选择的建议:

  • ϵ \epsilon ϵ:采用K距离来设定,找突变点
    K距离为,给定数据集 P = { p ( i ) ; i = 0 , 1 , ⋯   , n } P=\lbrace p(i);i=0,1,\cdots,n\rbrace 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) d(K)被称为K-距离
  • MinPts:选用K-距离中K的值,一般取小一些,多次尝试

DBSCAN聚类可视化网址:https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/

参考链接:https://www.cnblogs.com/pinard/p/6208966.html

你可能感兴趣的:(机器学习)