聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个“簇”,通过这样的划分,每个簇可能对应于一些潜在的概念(类别),这些概念对聚类算法而言事先是未知的,聚类过程仅能自动形成簇结构,簇所对应的概念语义需由使用者来把握和命名。
聚类既能作为一个单独过程,用于寻找数据内在的分布结构,也可作为分类等其他学习任务的前驱过程。例如,在一些商业应用中需对新用户的类型进行判别,但定义“用户类别”对商家来说却可能不太容易,此时往往可先对用户数据进行聚类,根据聚类结果将每个簇定义为一个类,然后再基于这些类训练分类模型,用于判别新用户的类型。
对聚类结果来说,通过某种性能度量可以评估其好坏,同时也可以直接将其作为聚类过程的优化目标,从而更好地得到符合要求的聚类结果,最后希望聚类结果的“簇内相似度”高且“簇间相似度”低。
外部指标是将聚类结果与某个专家给定的或者公认的参考模型进行比较,衡量两者之间的一致性。常见的外部指标有:
内部指标是直接考察聚类结果本身,不需要任何参考模型。常见的内部指标有:
这里不仅仅是对于聚类问题,对于整个机器学习领域,列出一些常用距离计算的方法。
欧式距离是空间中两个点之间的直线距离,计算公式如下:
d ( x , y ) = ∑ i = 1 n ( x i − y i ) 2 d(x,y) = \sqrt {\sum\limits_{i = 1}^n {{{({x_i} - {y_i})}^2}} } d(x,y)=i=1∑n(xi−yi)2
欧式距离在机器学习中有很多作用和应用场景,例如:
曼哈顿距离是两个点在坐标系上的绝对轴距总和,也就是沿着坐标轴的水平和垂直方向的距离之和,计算公式如下:
d ( x , y ) = ∑ i = 1 n ∣ x i − y i ∣ d(x,y) = \sum\limits_{i = 1}^n {\left| {{x_i} - {y_i}} \right|} d(x,y)=i=1∑n∣xi−yi∣
曼哈顿距离在机器学习中也有很多作用和应用场景,例如:
切比雪夫距离是一种度量两个点之间的距离的方法,它是两个点在各个坐标轴上的差值的最大值,计算公式如下:
d ( x , y ) = max ( ∣ x 1 − x 2 ∣ , ∣ y 1 − y 2 ∣ ) d(x,y) = \max (\left| {{x_1} - {x_2}} \right|,\left| {{y_1} - {y_2}} \right|) d(x,y)=max(∣x1−x2∣,∣y1−y2∣)
切比雪夫距离在机器学习中也有一些作用和应用场景,例如:
闵可夫斯基距离是一组距离的定义,是对多个距离度量公式的概括性的表述,其中 p p p 是一个变参数。当 p = 1 p=1 p=1 时,就是曼哈顿距离;当 p = 2 p=2 p=2 时,就是欧式距离;当 $p \to \infty $时,就是切比雪夫距离。计算公式如下:
d ( x , y ) = ( ∑ i = 1 n ∣ x i − y i ∣ p ) 1 p d(x,y) = {\left( {\sum\limits_{i = 1}^n {{{\left| {{x_i} - {y_i}} \right|}^p}} } \right)^{\frac{1}{p}}} d(x,y)=(i=1∑n∣xi−yi∣p)p1
闵可夫斯基距离在机器学习中也有很多作用和应用场景,例如:
标准化的欧几里得距离是一种对欧几里得距离的改进方法,它的目的是消除不同维度之间的量纲和分布的影响,使得距离度量更加合理和准确,计算公式如下:
d ( x , y ) = ∑ i = 1 n ( x i − y i s i ) 2 d(x,y) = \sqrt {{{\sum\limits_{i = 1}^n {\left( {\frac{{{x_i} - {y_i}}}{{{s_i}}}} \right)} }^2}} d(x,y)=i=1∑n(sixi−yi)2
标准化的欧几里得距离在机器学习中有一些作用和应用场景,例如:
马氏距离是一种基于数据分布的距离度量方法,它考虑了数据的协方差矩阵,使得不同维度之间的相关性和尺度差异得到调整。若协方差矩阵为单位矩阵,那么马氏距离就简化为欧几里得距离。若协方差矩阵为对角阵,则其转为标准化的欧几里得距离。计算公式如下:
d ( x , y ) = ( x − y ) T S − 1 ( x − y ) d(x,y) = \sqrt {{{\left( {x - y} \right)}^T}{S^{ - 1}}(x - y)} d(x,y)=(x−y)TS−1(x−y)
马氏距离在机器学习中有一些作用和应用场景,例如:
兰氏距离是一种加权的曼哈顿距离,它对于接近于0的值的变化非常敏感,因此可以用来处理稀疏数据。计算公式如下:
d ( x , y ) = ∑ i = 1 n ∣ x i − y i ∣ ∣ x i ∣ + ∣ y i ∣ d(x,y) = \sum\limits_{i = 1}^n {\frac{{\left| {{x_i} - {y_i}} \right|}}{{\left| {{x_i}} \right| + \left| {{y_i}} \right|}}} d(x,y)=i=1∑n∣xi∣+∣yi∣∣xi−yi∣
兰氏距离在机器学习中有一些作用和应用场景,例如:
余弦距离是一种基于向量夹角的距离度量方法,它反映了两个向量的方向上的相似性,而不考虑它们的长度或大小。计算公式如下:
d ( x , y ) = x ⋅ y ∣ x ∣ ⋅ ∣ y ∣ d(x,y) = \frac{{x \cdot y}}{{\left| x \right| \cdot \left| y \right|}} d(x,y)=∣x∣⋅∣y∣x⋅y
余弦距离在机器学习中有一些作用和应用场景,例如:
汉明距离是一种用于度量两个等长字符串之间的差异的方法,它表示将其中一个字符串变为另一个字符串所需要的最小替换次数。计算方式如下:
d ( x , y ) = ∑ i = 1 n I ( x i ≠ y i ) d(x,y) = \sum\limits_{i = 1}^n {I({x_i} \ne {y_i})} d(x,y)=i=1∑nI(xi=yi)
其中 x x x 和 y y y 是两个 n n n 位的字符串, I ( x i ≠ y i ) I({x_i} \ne {y_i}) I(xi=yi) 是一个指示函数,当 x i x_i xi 和 y i y_i yi 不相等时为 1,否则为 0。
汉明距离在机器学习中有一些作用和应用场景,例如:
编辑距离是一种用于度量两个字符串之间的差异的方法,它表示将其中一个字符串变为另一个字符串所需要的最少操作数,其中操作包括插入、删除和替换。计算公式如下:
E D x , y ( i , j ) = { max ( i , j ) , min ( i , j ) = 0 min ( E D x , y ( i − 1 , j ) + I ( i , j ) , E D x , y ( i , j − 1 ) + I ( i , j ) , E D x , y ( i − 1 , j ) + I ( i , j ) ) , min ( i , j ) ≠ 0 E{D_{x,y}}(i,j) = \begin{cases} \max (i,j) & ,\min (i,j) = 0 \\ \min (E{D_{x,y}}(i - 1,j) + I(i,j),E{D_{x,y}}(i,j - 1) + I(i,j),E{D_{x,y}}(i - 1,j) + I(i,j)) & ,\min (i,j) \ne 0 \\ \end{cases} EDx,y(i,j)={max(i,j)min(EDx,y(i−1,j)+I(i,j),EDx,y(i,j−1)+I(i,j),EDx,y(i−1,j)+I(i,j)),min(i,j)=0,min(i,j)=0
编辑距离在机器学习中有一些作用和应用场景,例如:
原型聚类亦称“基于原型的聚类”,此类算法假设聚类结构能通过一组原型刻画,在现实聚类任务中极为常用。通常情形下,算法先对原型进行初始化,然后对原型进行迭代更新求解。
给定样本集 D = { x 1 , x 2 , . . . , x m } D = \{ {x_1},{x_2},...,{x_m}\} D={x1,x2,...,xm},“ k k k均值”算法针对聚类所得簇划分 C = { C 1 , C 2 , . . . , C k } C = \{ {C_1},{C_2},...,{C_k}\} C={C1,C2,...,Ck}最小化平方误差
E = ∑ i = 1 k ∑ x ∈ C i ∥ x − μ i ∥ 2 2 E = \sum\limits_{i = 1}^k {\sum\limits_{x \in {C_i}} {\left\| {x - {\mu _i}} \right\|_2^2} } E=i=1∑kx∈Ci∑∥x−μi∥22
其中 μ i = 1 ∣ C i ∣ ∑ x ∈ C i x {\mu _i} = \frac{1}{{\left| {{C_i}} \right|}}\sum\limits_{x \in {C_i}} x μi=∣Ci∣1x∈Ci∑x是簇 C i C_i Ci的均值向量,上述式子在一定程度上刻画了簇内样本围绕簇均值向量的紧密程度, E E E值越小则簇内样本相似度越高,同时 k k k均值算法采用了贪心策略,通过迭代优化来近似求解。
学习向量量化(LVQ)是一种用于模式分类的有监督的学习算法,也是一种原型聚类算法。它的基本思想是通过对原型向量进行迭代更新,使得同类样本的原型向量靠近,异类样本的原型向量远离。
学习向量量化的过程可以分为以下几个步骤:
学习向量量化与k均值算法的异同如下:
与 k k k均值、LVQ用原型向量来刻画聚类结构不同,高斯混合聚类采用概率模型来表达聚类原型。高斯混合聚类的目标是找到一组高斯分布的参数,使得样本数据能够用这些分布的线性组合来近似表示,高斯混合聚类的过程可以概括为以下几个步骤:
密度聚类亦称“基于密度的聚类”,此类算法假设聚类结构通过样本分别的紧密程度确定。通常情况下,密度聚类算法从样本密度的角度来考察样本之间的可连接性,并基于可连接样本不断扩展聚类簇以获得最终的聚类结果。
DBSCAN是一种著名的密度聚类算法,它基于一组“领域”参数 ( ε , M i n P t s ) (\varepsilon ,MinPts) (ε,MinPts)来刻画样本分布的紧密程度,给定数据集 D = { x 1 , x 2 , . . . , x m } D = \{ {x_1},{x_2},...,{x_m}\} D={x1,x2,...,xm},定义下面这几个概念:
DBSCAN的目标是根据点之间的密度相似性,将数据划分为不同的簇,并能够识别出噪声点。,DBSCAN的过程可以概括为以下几个步骤:
层次聚类试图在不同层次对数据集进行划分,从而形成树形的聚类结构,数据集的划分可采用“自底向上”的聚合策略,也可采用“自顶向下”的分拆策略。AGNES是一种采用自底向上聚合策略的层次聚类算法,它先将数据集中的每个样本看作一个初始聚类簇,然后在算法运行的每一步中找出距离最近的两个聚类簇进行合并,该过程不断重复,直到达到预设的聚类簇个数,所以关键在于如何计算聚类簇之间的距离。
AGNES算法需要指定一个合并簇的准则,即如何计算簇之间的距离。常用的有以下几种方法: