机器学习算法系列(5):聚类的概念与模型

一.聚类的简介


(一)引言

聚类属于无监督学习,对大量未标注的数据集,按照数据内在相似性将数据集划分为多个类别,使类别内的数据相似度较大而类别间的数据相似度较小。

给定一个有N个对象的数据集,构造数据的K个簇,K≤N,同时满足,每个簇至少包含一个对象,每一个对象属于且仅属于一个簇,将满足上述条件的K个簇称作一个合理划分。它的主要思想是对于给定的类别数目K,首先给出初始划分,通过迭代改变样本和簇的隶属关系,使得每一次改进之后的划分方案都较前一次好。

(二)分类

  1. 基于分层的聚类
    对给定的数据集进行逐层聚类,直到满足某种条件为止。自下而上聚类时,初始将每个数据记录都组成一个单独的组,接下来的迭代中将相邻近的组合并成一个组,直到所有的记录组成一个分组或者某个条件满足为止。自上而下的聚类则是将数据集逐渐分解成不同的簇类。

  2. 基于划分的聚类

    将数据集构造成K个分组,每个分组就代表一个聚类,K<N,而且这K个分组满足下列条件:①每一个分组至少包含一个数据记录;②每一个数据记录属于且仅属于一个分组(在模糊聚类算法中该点可以放宽条件)

  3. 基于密度的聚类
    在基于密度的聚类中不需要用到各式各样的距离度量,使用密度的概念进行聚类,可以避免基于距离的聚类算法只能发现“类圆形”的聚类的缺点。

    只要一个区域的点的密度大于某一个阈值,就要把它加到与之相邻近的聚类中去。

  4. 基于网格的聚类
    将数据空间划分成有限个单位的网格结构,所有处理都是以单个的单元为对象的。处理速度会很快。

  5. 基于模型的聚类
    给每一个聚类假定一个模型,去寻找能够很好地满足这个模型的数据集。一个模型可能是数据点在空间中的密度分布函数。

(三)相似度、距离计算方法

  1. 闵可夫斯基距离系列

    该部分在KNN处已经讲述过

    https://blog.csdn.net/kodoshinichi/article/details/106819524

  2. 杰卡德相似系数(Jaccard)
    J ( A , B ) = A B / ( A B ) J(A,B)=|A∩B|/(|A∪B|)

  3. 余弦相似度(cosine similarity)
    给定两个同维度的相量x,y
    c o s ( θ ) = x T y / ( x y ) cos(θ)=x^Ty/(|x|·|y|)

  4. 皮尔森相似系数(pearson)

    对两个随机变量X和Y(皮尔森相似系数和概率论中的相关系数的定义是一致的)
    ρ X , Y = c o v ( X , Y ) / ( σ x σ y ) = E ( ( X μ x ) ( Y μ y ) ) / ( σ x σ y ) ρ_X,_Y = cov(X,Y)/(σ_xσ_y)=E((X-μ_x)(Y-μ_y))/(σ_xσ_y)

    • 余弦相似度与皮尔森系数之间的关系:相关系数是将两个向量平移到原点后得到的夹角余弦值。
      在这里插入图片描述

二.基于划分的聚类模型——KMeans算法


(一)原理思想

对N维欧式空间中的点进行聚类,通过迭代,每次确定K个类别中心,将各个节点归属到与之距离最近的中心点所在的cluster,然后将类别中心更新为属于各个cluster得到所有样本的均值,进行反复迭代,直至类别中心不再发生变化或变化小于某个阈值。

(二)基本假设

KMeans模型基于这样一个假设:对于每一个cluster,我们可以选出一个中心点,使得该cluster中的所有点到该中心点的距离小于其他cluster的中心的距离。

并不能保证所有数据点都能满足这样的约束,但是这已经是最好的结果了,有些误差是因为问题本身的不可分性造成的。

(三)算法步骤

假定输入的样本为S=x1,x2,…xn

  1. 选择初始的K个类别中心,(会根据问题有针对性地采用启发式算法)大多数情况下采用随机选取的方法,较多时候我们通过多次选出初始值跑K-Means来解决其达不到最优解的结果。

  2. 对于每一个样本xi,将其标记为距离类别中心最近的类别,即
    l a b e l i = a r g m i n ( 1 j k ) x i μ j label_i = arg min(1≤j≤k)||x_i-μ_j||

  3. 将每个类别中心更新为隶属于该类别的所有样本的均值
    μ j = 1 / c j ( i c j ) x i μ_j = 1/|c_j|∑(i∈c_j)x_i

  4. 重复前两步骤,直到类别中心的变化小于某个阈值或者达到最大迭代次数

(四)理论依据

在这里插入图片描述

上述分析中固定μj的值,进行的分析与操作就相当于算法中对所有数据向量的划分,划分到距离自己最近的簇类中心所对应的簇类中。

固定rij的值,通过求导获得uj的优化解,就相当于对簇类中心向量的更新,将划分在该簇类中的所有向量的均值作为新的簇类中心

因为每一次迭代的取值更新都有梯度求导得到数学论证,所以可以说每一次迭代都是取到损失函数J的最小值,因此J只会不断地减小,最终达到局部最优解或全局最优解。(很大程度上依赖于k值和初始中心向量)

(五)评价

  1. 优点:
    • 聚类问题的经典算法,简单快速
    • 处理大数据集也具有一定的伸缩性和高效率
    • 簇近似为高斯分布的时候效果较好
  2. 缺点:
    • 簇的均值有定义才能使用
    • 需要事先确定k值,且算法对k敏感
    • 不能发现非凸形状的簇或者大小差别较大的簇
    • 对噪声和孤立点敏感(均值的特性)
      在实践中常常把均值换成中位数指标,对应的算法就称作K-mediods聚类

三.基于密度的聚类模型——DBSCAN


(一)DBSCAN算法之前需要了解的概念

  1. 对象的ε邻域:给定对象在半径ε内的区域

  2. 核心对象:对于给定的数目m,如果一个对象的ε-邻域内至少包含了m个对象,则称这个对象为核心对象

  3. 直接密度可达:对于一个对象集合D中的两个数据对象p和q,如果p在q的ε-邻域内,而且q是一个核心对象,就说对象p从对象q出发时直接密度可达。

    如下图,设邻域半径为1,m为5,则q是一个核心对象(因为q的1邻域半径内含有大于或等于m个数据对象点)且p在q的邻域半径内,所以可以说p从q出发时直接密度可达(注意是有方向性的)

在这里插入图片描述

  1. 密度可达:存在一个数据对象链p1,p2,…pn,p1=q,pn=p,对于pi∈D(1≤i≤n),pi+1是从pi出发关于ε和m直接密度可达的,则对象p是从对象q和m密度可达的。
    在这里插入图片描述

  2. 密度相连:对象集合D中存在一个对象O,使得对p和q是从O关于ε和m密度可达的,那么对象p和q就是关于ε和m密度相连的

    理解:p和q关于O密度相连,即从o到p关于ε密度可达,从o到q关于ε密度可达。
    在这里插入图片描述

  3. (基于密度的)簇:最大的密度相连对象的集合

  4. 噪声:不包含在任何簇中的对象称为噪声

(二)DBSCAN的原理思想

只要样本点的密度大于某一阈值,就可以将这个样本添加到最近的簇中。这类算法可以在含有噪声点的数据集中找到任何形状的聚类。

(三)DBSCAN的算法步骤

在这里插入图片描述

  1. 首先随机选择数据集中的某个数据对象点A作为算法实施的切入点,设定合适的ε和m值;若A点是核心点,则创建A作为核心对象的新簇,簇内的其他点暂时标记为边缘点;如果A不是核心点,则暂且将A标记为边缘点。
  2. 在标记了的边缘点中选取一个重复上述步骤,寻找并合并和新对象且与核心对象直接密度可达的对象。反复递归这一步,直到没有新的点可以更新簇,则算法结束。
  3. 如果还有数据对象点未处理,则再次产生一个新的类别来重新启动这个算法过程,直到遍历完所有的数据点。最终数据对象点被划分成三类——边缘点、核心点和噪声点。

(四)评价

  1. 优点
    • 无需确定聚类的个数
    • 可以发现任意形状的簇类
    • 对噪声具有鲁棒性
    • 只有两个参数,且对数据输入的顺序不敏感
  2. 缺点
    • 边界点的划分具有一定的模糊性
    • 若密度差异过大,数据集无法使用DBSCAN算法
    • 数据集与数据规模不确定的情况下很难确定参数的值

四.参考文档


wiki百科

不知名pdf文档

该文档为算法面试整理所用

猜你喜欢

转载自blog.csdn.net/kodoshinichi/article/details/107234538
今日推荐