《机器学习》阅读心得——九、聚类

9.1 聚类任务

  在“无监督学习”中,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的分析提供基础。这种学习任务中应用最广的是“聚类”。
  聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个“簇”。通过这样的划分,每个簇可能对应于一些潜在的概念(类别)。聚类算法对这些概念是未知的,聚类仅能自动形成簇结构,簇所对应的概念需要由使用者来把握。聚类既能作为一个单独过程,用于找寻数据内在的分布结构,也可作为分类等其他学习任务的前驱过程。
  下文讨论聚类的两个基本问题:性能度量和距离计算。

9.2 性能度量

  聚类性能指标也称为“有效性指标”。直观上,好的聚类结果应当是同一簇的样本尽可能彼此相似,不同簇的样本尽可能不同。即,聚类结果的“簇内相似度”高且“簇间相似度”低。聚类性能指标有两类,一类是将聚类结果与某个“参考模型”进行比较,称为“外部指标”,一类是直接考察聚类结果而不利用任何参考模型,称为“内部指标”。
  对数据集 D={x1,x2,...,xm} ,假定通过聚类给出的簇划分为 C={C1,C2,..,Ck} ,参考模型给出的簇划分为 C={C1,C2,...,Cs} 。相应的,令 λ λ 分别表示 C C对应的簇标记向量。我们将样本两两配对考虑,定义

a=|SS|,SS={(xi,xj)|λi=λj,λi=λj,i<j}b=|SD|,SD={(xi,xj)|λi=λj,λiλj,i<j}c=|DS|,DS={(xi,xj)|λiλj,λi=λj,i<j}d=|DD|,DD={(xi,xj)|λiλj,λiλj,i<j}(9.1)(9.2)(9.3)(9.4)

  由于每个样本对仅能出现在一个集合中,因此有 a+b+c+d=m(m1)/2 成立。有以上各式可导出以下几个指标
  1、Jaccard系数(简称JC)
JC=aa+b+c(9.5)

  2、FM指数(简称FMI)
FMI=aa+baa+c(9.6)

  3、Rand指数(简称RI)
RI=2(a+d)m(m1)(9.7)

上述性能度量的结果值均在[0,1]区间,值越大越好。
  考虑聚类结果的簇划分 C={C1,C2,...,Ck} ,定义
avg(C)diam(C)dmin(Ci,Cj)dcen(Ci,Cj)====2|C|(|C|1)1i<j|C|dist(xi,yi)max1i<j|C|dist(xi,xj)minxiCi,xjCjdist(xi,xj)dist(μi,μj)(9.8)(9.9)(9.10)(9.11)

其中, dist(,) 用于计算两个样本之间的距离; μ 代表簇C的中心点。显然有 avg(C) 对应于簇C内样本间的平均距离, diam(C) 对应于簇C内样本的最远距离, dmin(Ci,Cj) 对应于簇 Ci 与簇 Cj 最近样本间的距离, dcen(Ci,Cj) 对应于簇 Ci 与簇 Cj 中心点间的距离。基于式(9.8-9.11)可得到以下性能度量内部指数
  1、DB指数(简称DBI)
DBI=1ki=1kmaxj1(avg(Ci)+avg(Cj)dcen(μi,μj)(9.12)

  2、Dunn指数(简称DI)
DI=min1ik{minji(dmin(Ci,Cj)max1lkdiam(Cl))}(9.13)

显然,DBI的值越小越好,DI的值越大越好

9.3 距离计算

  对函数 dist(,) ,若它是一个距离度量,则应当满足非负性、对称性、同一性、直递性(三角形,两边之和大于第三边)等性质。给定样本 xi=(xi1,xi2,...,xin) 与样本 xj=(xj1,xj2,..,xjn) ,最常用的是“闵可夫斯基距离”,即

distmk(xi,xj)=(μ=1n|xiuxju|p)1p(9.14)

  p=2时,闵可夫斯基距离即欧氏距离
disted(xi,xj)=||xixj||2=μ=1n|xiuxju|2(9.15)

  p=1时,闵可夫斯基距离即曼哈顿距离
distman(xi,xj)=||xixj||1=u=1n|xiuxju|(9.16)

  在讨论距离计算时,重要的是属性上是否定义了“序”关系。能够直接计算距离的是有序属性,不能直接计算距离的是无序属性。闵可夫斯基距离可用于计算有序属性。
  对无序属性可采用VDM,令 mu,a 表示在属性 u 上取值为a的样本数,mu,a,i表示在第i个样本簇中在属性u上取值为a的样本数,k为样本簇数,则属性u上两个离散值a与b之间的VDM距离为
VDMp(a,b)=i=1k|mu,a,imu,amu,b,imu,b|(9.17)

  将闵可夫斯基距离和VDM距离结合可处理混合属性。假定有 nc 个有序属性, nnc 个无序属性,不失一般性,令有序属性排列在无序属性之前,则
MinkovDMp(xi,xj)=(u=1nc|xiuxju|p+u=nc+1nVDMp(xiu,xju))1p(9.18)

  通常我们是基于某种形式的距离来定义“相似度度量”,距离越大,相似度越小。但相似度度量的距离不一定满足距离度量的所有性质,比如直递性。这样的距离称为“非度量距离”。

9.4 原型聚类

  原型聚类也被称为“基于原型的聚类”,这一类算法假设聚类结构能通过一组原型刻画,在现实聚类任务中很常用。通常,算法先对原型进行初始化,然后对原型进行迭代更新求解。下面是几种比较著名的原型聚类算法

9.4.1 k均值算法

  给定样本集 D={x1,x2,...,xm} ,“k均值”(k-means)算法针对聚类所得簇划分 C={C1,C2,...,Ck} 最小化平方误差

E=i=1kxCi||xμi||22(9.19)

其中 μi=1|Ci|xCix 是簇 Ci 的均值向量。上式在一定程度上刻画了簇内样本围绕簇均值向量的紧密程度,E值越小则簇内样本相似度越高。找到上式的最优解需要考察样本集D的所有可能的簇划分,这是一个NP难问题。因此,k均值算法采用了贪心策略,通过迭代优化来近似求解。在迭代过程中,若迭代更新后聚类结果保持不变,则返回结果。

9.4.2 学习向量量化

  与k均值算法类似,“学习向量量化”(Learning Vector Quantization)也是试图找到一组原型向量来刻画聚类结构。但与一般聚类算法不同,LVQ假设数据样本带有类别标记,学习过程利用这些监督信息来辅助聚类。
  给定样本集 D={(x1,y1),(x2,y2),...,(xn,yn)} ,每个样本 xj 是由n个属性描述的特征向量 (xj1,xj2,...,xjn) .LVQ的目标是学得一组n维原型向量 {p1,p2,...,pq} ,每个原型向量代表一个聚类簇,簇标记 tiy
  在学的一组原型向量 {p1,p2,..,pq} 后,即可实现对样本空间的簇划分。对任意样本x,它将被划入与其距离最近的原型向量多代表的簇中。换言之,每个原型向量 pi 定义了与之相应的一个区域 Ri ,该区域中每个样本与 pi 的距离不大于它与其他原型向量 pi 的距离。即

Ri={xχ|||xpi||2||xpi||2,ii(9.20)

由此形成了对样本空间 χ 的簇划分 {R1,R2,...,Rq} ,该划分通常称为“Voronoi”剖分。

9.4.3 高斯混合聚类

  与K均值、LVQ用原型向量来刻画聚类结构不同,高斯混合(Mixture of Gaussian)聚类采用概率模型来表达聚类原型。多元高斯分布的定义是,对n维样本空间 χ 中的随机向量x,若x服从高斯分布,其概率分布密度函数为

p(x)=1(2π)n2||12e12(xμ)T1(xμ)(9.21)

其中 μ 是n维均值向量, n×n 的协方差矩阵。由上式可以看出,高斯分布完全由均值向量 μ 和协方差矩阵 这两个参数确定。下文中将高斯分布的概率密度函数记为 p(x|μ,)
  我们可定义高斯混合分布
pm(x)=i=1kαip(x|μi,i)(9.22)

该分布由k个高斯混合分布组成,每个混合成分对应一个高斯分布。从原型聚类的角度看,高斯混合聚类是采用概率模型(高斯分布)对原型进行刻画,簇划分则由原型对应后验概率确定。

9.5 密度聚类

  密度聚类也被称为“基于密度的聚类”,这类算法假定聚类结构能通过样本分布的紧密程度确定。通常情况下,密度聚类算法从样本密度的角度来考察样本之间的可连接性,并基于可连接样本不断扩展聚类簇以获得最终的聚类结果。
  DBSCAN是一种著名的密度聚类算法,它基于一组“领域”参数来刻画样本分布的紧密程度。给定数据集 D={x1,x2,..,xn} ,该算法给出了以下概念:
  1. ε 邻域:对 xjD ,其 ε 邻域包含样本集D中与 xj 的距离不大于 ε 的样本,即 Nε(xj)={xiD|dist(xi,xj)ε} ;
  2. 核心对象:若 xj ε 邻域至少包含MinPts个样本,即 |Nε(xj)|MinPts ,则 xj 是一个核心对象;
  3. 密度直达:若 xj 位于 xi ε 邻域中,且 xi 是核心对象,则称 xj xi 密度直达;
  4. 密度可达:对 xi xj ,若存在样本序列 p1,p2,..,pn ,其中 p1=xi,pn=xj pi+1 pi 密度直达,则称 xj xi 密度可达。
  5. 密度相连:对 xi xj ,若存在 xk 使得 xi xj 均由 xk 密度可达,则称 xi xj 密度相连。




        图1 DBSCAN定义的基本概念(MinPts=3): 实线是 ε 邻域,m和o是核心对象,p/q由m密度直达,s由o密度可达,s与r密度相连。
  基于这些概念,DBSCAN将簇定义为:由密度可达关系导出的最大的密度相连样本集合。在计算时,该算法随机选取数据集中的一个核心对象,生成聚类簇后,将簇中包含的核心对象从数据集中去除,再从更新后的数据集中随机选取一个核心对象来生成聚类簇,直到没有可用的核心对象。

9.6 层次聚类

  层次聚类试图在不同层次对数据集进行划分,从而形成树形的聚类结构。数据集的划分可使用“自底向上”的聚合策略,也可以采用“自顶向下”的分拆策略。
  AGNES是一种采用自底向上的聚合策略的层次聚类算法。它先将数据集中的每个样本都看做一个初始聚类簇,然后再算法运行的每一步中找出距离最近的两个聚类簇进行合并,该过程不断重复,直至达到预设的聚类簇个数。当聚类簇距离由最小距离/最大距离/平均距离计算时,AGNES算法被相应的称为“单连接”、“全连接”或“均连接”。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kmeans聚类算法是一种无监督学习算法,用于将数据集划分为不同的簇。它是一个迭代算法,通过计算每个数据点与簇中心的距离,将数据点分配到最近的簇中心。然后,根据分配的数据点更新簇中心。重复这个过程,直到簇中心不再变化或达到预设的迭代次数。 下面是一个使用Python实现Kmeans聚类算法的示例: ``` python import numpy as np import matplotlib.pyplot as plt # 生成随机数据 np.random.seed(0) X = np.random.randn(100, 2) # 初始化K个簇中心 K = 3 centers = X[np.random.choice(len(X), K, replace=False)] # 迭代聚类 for i in range(10): # 计算每个数据点最近的簇中心 distances = np.linalg.norm(X[:, np.newaxis, :] - centers, axis=2) labels = np.argmin(distances, axis=1) # 更新簇中心 for k in range(K): centers[k] = np.mean(X[labels == k], axis=0) # 可视化聚类结果 colors = ['r', 'g', 'b'] for k in range(K): plt.scatter(X[labels == k, 0], X[labels == k, 1], c=colors[k]) plt.scatter(centers[:, 0], centers[:, 1], marker='*', s=200, c='#050505') plt.show() ``` 在这个例子中,我们生成了一个随机数据集,然后初始化了3个簇中心。然后,我们执行10次迭代,计算每个数据点最近的簇中心,并根据分配的数据点更新簇中心。最后,我们可视化聚类结果,其中每个簇用不同的颜色表示,簇中心用星号表示。 Kmeans聚类算法是一种简单有效的聚类算法,但它有一些缺点。例如,它需要预先指定簇的数量K,这可能不是很容易确定。此外,它对初始簇中心的选择很敏感,可能会导致陷入局部最优解。因此,在实际应用中,需要对它进行改进,例如Kmeans++算法和层次聚类算法等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值