机器学习中的聚类算法概述

概述

聚类(cluster)与分类(class)问题不同,聚类是属于无监督学习模型,而分类属于有监督学习。聚类使用一些算法把样本分为N个群落,群落内部相似度较高,群落之间相似度较低。在机器学习中,通常采用“距离”来度量样本间的相似度,距离越小,相似度越高;距离越大,相似度越低。

相似度度量方式

欧氏距离

相似度使用欧氏距离来进行度量. 坐标轴上两点x_1, x_2之间的欧式距离可以表示为:

|x_1-x_2| = \sqrt{(x_1-x_2)^2}

平面坐标中两点$(x_1, y_1), (x_2, y_2)$欧式距离可表示为:

|(x_1,y_1)-(x_2, y_2)| = \sqrt{(x_1-x_2)^2+(y_1-y_2)^2}

三维坐标系中$(x_1, y_1, z_1), (x_2, y_2, z_2)$欧式距离可表示为:

|(x_1, y_1, z_1),(x_2, y_2, z_2)| = \sqrt{(x_1-x_2)^2+(y_1-y_2)^2+(z_1-z_2)^2}

曼哈顿距离

二维平面两点$a(x_1, y_1)$与$b(x_2, y_2)$两点间的曼哈顿距离为:


d(a, b) = |x_1 - x_2| + |y_1 - y_2|

推广到N维空间,$x(x_1, x_2, ..., x_n)$与$y(y_1, y_2, ..., y_n)$之间的曼哈顿距离为:


d(x,y) = |x_1 - y_1| + |x_2 - y_2| + ... + |x_n - y_n| = \sum_{i=1}^n|x_i - y_i|

在上图中,绿色线条表示的为欧式距离,红色线条表示的为曼哈顿距离,黄色线条和蓝色线条表示的为曼哈顿距离的等价长度。

 

闵可夫斯基距离

闵可夫斯基距离(Minkowski distance)又称闵氏距离,其定义为:


D(x, y) = (\sum_{i=1}^n |x_i - y_i|^p)^{\frac{1}{p}}

  • 当$p=1$时,即为曼哈顿距离
  • 当$p=2$时,即为欧式距离
  • 当$p \rightarrow \infty$时,即为切比雪夫距离

可见,曼哈顿距离、欧氏距离、切比雪夫距离都是闵可夫斯基的特殊形式。

距离的性质

如果$dist(x,y)$度量标准为一个距离,它应该满足以下几个条件:

  • 非负性:距离一般不能为负,即 $dist(x, y) >= 0$
  • 同一性:$dist(x_i, y_i) = 0$,当且仅当$x_i = y_i$
  • 对称性:$dist(x_i, y_i) = dist(y_i, x_i)$
  • 直递性:$dist(x_i, x_j) <= dist(x_i, x_k) + dist(x_k, x_j)$

聚类算法的划分

原型聚类

原型聚类也称“基于原型的聚类”(prototype-based clustering),此类算法假设聚类结构能通过一组原型刻画,在现实聚类任务中极为常用. 通常情况下,算法先对原型进行初始化,然后对原型进行迭代更新求解. 采用不同的原型表示、不同的求解方式,将产生不同的算法. 最著名的原型聚类算法有K-Means。

密度聚类

密度聚类也称“基于密度的聚类”(density-based clustering),此类算法假定聚类结构能通过样本分布的紧密程度确定. 通常情况下,密度聚类算法从样本密度的角度来考察样本之间的可连接性,并基于可连接样本不断扩展聚类簇以获得最终的聚类结果. 著名的密度聚类算法有DBSCAN。

层次聚类

层次聚类(hierarchical clustering)试图在不同层次对数据集进行划分,从而形成树形的聚类结构。 数据集的划分可以采用“自底向上”或“自顶向下”的策略. 常用的层次聚类有凝聚层次算法等。

 

聚类的评价指标

理想的聚类可以用四个字概况:内密外疏,即同一聚类内部足够紧密,聚类之间足够疏远. 学科中使用“轮廓系数”来进行度量,见下图:

假设我们已经通过一定算法,将待分类数据进行了聚类,对于簇中的每个样本,分别计算它们的轮廓系数。对于其中的一个点 i 来说:

​a(i) = average(i向量到所有它属于的簇中其它点的距离) ​

b(i) = min (i向量到各个非本身所在簇的所有点的平均距离)

那么 i 向量轮廓系数就为:

S(i)=\frac{b(i)-a(i)}{max(b(i), a(i))}

由公式可以得出:

(1)当$b(i)>>a(i)$时,$S(i)$越接近于1,这种情况聚类效果最好;

(2)当$b(i)<<a(i)$时,$S(i)$越接近于-1,这种情况聚类效果最差;

(3)当$b(i)=a(i)$时,$S(i)$的值为0,这种情况分类出现了重叠.

import sklearn.metrics as sm
score = sm.silhouette_score(x, # 样本
                            pred_y, # 标签
                            sample_size=len(x), # 样本数量
                            metric="euclidean")  # 欧式距离度量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值