Bootstrap

One PUNCH Man——聚类

聚类介绍

在"无监督学习" (unsupervised learning) 中,训练样本的标记信息是未知的。目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础。此类学习任务中研究最多、应用最广的是"聚类" (clustering).

性能度量

暂不介绍,概念太多,比较简单。和变量显著性检验有写类似。

距离计算

给定样本 x = ( x 1 , x 2 , . . . , x n ) x=(x_1,x_2,...,x_n) x=(x1,x2,...,xn)和样本 y = ( y 1 , y 2 , . . . , y n ) y=(y_1,y_2,...,y_n) y=(y1,y2,...,yn),最常用的闵可夫斯基距离公式如下:
d i s t m k ( x , y ) = ( ∑ i = 1 n ∣ x i − y i ∣ p ) 1 p dist_{mk}(x,y)=(\sum_{i=1}^{n}|x_i-y_i|^p)^{\frac{1}{p}} distmk(x,y)=(i=1nxiyip)p1

p = 2 p=2 p=2时,该公式变成欧式距离:

d i s t e d ( x , y ) = ∑ i = 1 n ∣ x i − y i ∣ 2 dist_{ed}(x,y)=\sqrt{\sum_{i=1}^{n}|x_i-y_i|^2} disted(x,y)=i=1nxiyi2

p = 1 p=1 p=1时,该公式又变成曼哈顿距离:

d i s t m a n ( x , y ) = ∑ i = 1 n ∣ x i − y i ∣ dist_{man}(x,y)=\sum_{i=1}^{n}|x_i-y_i| distman(x,y)=i=1nxiyi

我们常将属性划分为"连续属性" (continuous attribute)和"离散属性" (categorical attribute)。一般来说连续属性,是可以通过其属性值计算距离的,比如1距离2比1距离3近。而离散属性,一般很难直观的看出距离,比如{飞机,轮船,火车},这三者之间的距离就无法在属性值(可能用1,2,3来分别表示)来计算,对无序属性,可以通过VDM来计算,但在这里不做介绍,只提到该概念即可。

k-means

简单说一下k均值算法,很简单。(以下均假设样本是二维的,实际上可能更多维,选取二维样本方便叙述)
输入:
样本集合 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . . , ( x m , y m ) } D=\{(x_1,y_1),(x_2,y_2),....,(x_m,y_m)\} D={(x1,y1),(x2,y2),....,(xm,ym)}
聚类簇数: k k k(也就是说样本被分为k个类)
样本距离度量方式
过程:

  1. 随机选取 k k k个样本点,作为初始质心
  2. 计算未选中的 m − k m-k mk个点分别到这 k k k个质心的距离,并将其划分到距离最近的簇中。
  3. 重新计算 k k k个簇的新质心,比如求簇的中点。
  4. 重复上述2和3过程,直到质心变化很小或者不变化。
  5. 输出 k k k个质心。

k = 2 k=2 k=2的一个划分过程如下图所示:
在这里插入图片描述

学习向量量化

与k 均值算法类似,“学习向量量化”(LVQ)也是试图找到一组原型向量来刻画聚类结构, 但与一般聚类算法不同的是, LVQ 假设数据样本带有类别标记,学习过程利用样本的这些监督信息来辅助聚类。
输入:
样本集合 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . . , ( x m , y m ) } D=\{(x_1,y_1),(x_2,y_2),....,(x_m,y_m)\} D={(x1,y1),(x2,y2),....,(xm,ym)}
原型向量个数 q q q,各原型向量预设的类别标记: { t 1 , t 2 , . . . , t q } \{t_1,t_2,...,t_q\} {t1,t2,...,tq}
学习率 η \eta η
样本距离度量方式
过程:

  1. 初始化 q q q个原型向量 { p 1 , p 2 , . . . , p q } \{p_1,p_2,...,p_q\} {p1,p2,...,pq}
  2. 计算样本点 ( x i , y i ) (x_i,y_i) (xi,yi) q q q个原型向量 p j p_j pj的距离,取距离最近的原型向量 p j p_j pj并与样本点 ( x i , y i ) (x_i,y_i) (xi,yi)做出以下判断:
    i f : if: if: y i = t j y_i=t_j yi=tj //这里 t j t_j tj p j p_j pj对应的原型向量类别标记
    t h e n : then: then: p j = p j + η ( x i − p j ) p_j=p_j+\eta (x_i-p_j) pj=pj+η(xipj)
    e l s e : else: else: p j = p j − η ( x i − p j ) p_j=p_j-\eta (x_i-p_j) pj=pjη(xipj)
  3. 重复上述步骤,直到满足停止条件。
  4. 输出 q q q个原型向量 { p 1 , p 2 , . . . , p q } \{p_1,p_2,...,p_q\} {p1,p2,...,pq}

高斯混合聚类

高斯混合聚类采用概率模型来表达聚类原型。有兴趣可以了解以下,在此不做赘述。

DBSCAN密度聚类

DBSCAN是一种基于密度的聚类算法,这类密度聚类算法一般假定类别可以通过样本分布的紧密程度决定。同一类别的样本,他们之间的紧密相连的,也就是说,在该类别任意样本周围不远处一定有同类别的样本存在。
通过将紧密相连的样本划为一类,这样就得到了一个聚类类别。通过将所有各组紧密相连的样本划为各个不同的类别,则我们就得到了最终的所有聚类类别结果。
DBSCAN是基于一组邻域来描述样本集的紧密程度的,参数 ( ϵ , M i n P t s ) (\epsilon, MinPts) (ϵ,MinPts)用来描述邻域的样本分布紧密程度。其中,ϵ描述了某一样本的邻域距离阈值,MinPts描述了某一样本的距离为ϵ的邻域中样本个数的阈值。
假设我的样本集是 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . . , ( x m , y m ) } D=\{(x_1,y_1),(x_2,y_2),....,(x_m,y_m)\} D={(x1,y1),(x2,y2),....,(xm,ym)},则DBSCAN具体的密度描述定义如下:

  • ϵ \epsilon ϵ-邻域:对于任意样本 ( x i , y i ) (x_i,y_i) (xi,yi),其 ϵ \epsilon ϵ-邻域包含样本集D中与 ( x i , y i ) (x_i,y_i) (xi,yi)的距离不大于 ϵ \epsilon ϵ的子样本集,即存在一个区别于 ( x i , y i ) (x_i,y_i) (xi,yi)的样本点 ( x j , y j ) (x_j,y_j) (xj,yj),使得他们之间的距离小于 ϵ \epsilon ϵ,记为: N ϵ ( ( x j , y j ) ) = { x i ∈ D ∣ d i s t a n c e ( ( x i , y i ) , ( x j , y j ) ) ≤ ϵ } N_{\epsilon}((x_j,y_j))=\{x_i∈D|distance ((x_i,y_i),(x_j,y_j))≤ \epsilon\} Nϵ((xj,yj))={xiDdistance((xi,yi),(xj,yj))ϵ},其满足该条件的样本个数为 N ϵ ( ( x j , y j ) ) N_{\epsilon}((x_j,y_j)) Nϵ((xj,yj))
  • 核心对象:对于任一样本 ( x j , y j ) ∈ D (x_j,y_j)∈D (xj,yj)D,如果其ϵ-邻域对应的 N ϵ ( ( x j , y j ) ) N_{\epsilon}((x_j,y_j)) Nϵ((xj,yj))至少包含 M i n P t s MinPts MinPts个样本,即如果 ∣ N ϵ ( ( x j , y j ) ) ∣ ≥ M i n P t s |N_{\epsilon}((x_j,y_j))|≥MinPts Nϵ((xj,yj))MinPts,则 ( x j , y j ) (x_j,y_j) (xj,yj)是核心对象。
  • 密度直达:如果 ( x j , y j ) (x_j,y_j) (xj,yj)位于 ( x i , y i ) (x_i,y_i) (xi,yi)的ϵ-邻域中, ( x i , y i ) (x_i,y_i) (xi,yi)核心对象,则称 ( x j , y j ) (x_j,y_j) (xj,yj) ( x i , y i ) (x_i,y_i) (xi,yi)密度直达。注意反之不一定成立,除非且 ( x j , y j ) (x_j,y_j) (xj,yj)也是核心对象。
  • 密度可达:如果 ( x j , y j ) (x_j,y_j) (xj,yj)位于 ( x i , y i ) (x_i,y_i) (xi,yi)的ϵ-邻域中,如果 ( x k , y k ) (x_k,y_k) (xk,yk)位于 ( x j , y j ) (x_j,y_j) (xj,yj)的ϵ-邻域中,且个样本点 ( x j , y j ) (x_j,y_j) (xj,yj) ( x i , y i ) (x_i,y_i) (xi,yi)都是核心对象(最后一个样本点不用是核心对象),则称 ( x k , y k ) (x_k,y_k) (xk,yk) ( x i , y i ) (x_i,y_i) (xi,yi)密度可达。同样密度可达也不是对称的,反之可能不成立。
  • 密度相连,如果 ( x j , y j ) (x_j,y_j) (xj,yj)对于 ( x i , y i ) (x_i,y_i) (xi,yi)密度可达,如果 ( x k , y k ) (x_k,y_k) (xk,yk)对于 ( x i , y i ) (x_i,y_i) (xi,yi)密度可达,且 ( x i , y i ) (x_i,y_i) (xi,yi)是核心对象,则称 ( x j , y j ) (x_j,y_j) (xj,yj) ( x k , y k ) (x_k,y_k) (xk,yk)密度相连,这可以是对称的。

在这里插入图片描述
DBSCAN的聚类定义很简单:由密度可达关系导出的最大密度相连的样本集合,即为我们最终聚类的一个类别,或者说一个簇。

输入:
样本集合 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . . , ( x m , y m ) } D=\{(x_1,y_1),(x_2,y_2),....,(x_m,y_m)\} D={(x1,y1),(x2,y2),....,(xm,ym)}
邻域参数 ( ϵ , M i n P t s ) (\epsilon,MinPts) (ϵ,MinPts)
样本距离度量方式
过程:

  1. 对于每一个样本点,找到其所有的核心对象,把所有核心对象的集合称为 Ω \Omega Ω
  2. 随机选取 Ω \Omega Ω里的一个核心对象 ( x i , y i ) (x_i,y_i) (xi,yi),加入到簇 C i C_i Ci中。
  3. 找到簇 C i C_i Ci未使用过的核心对象,找到其领域内的其他样本 ( x j , y j ) (x_j,y_j) (xj,yj),如果有样本是核心样本,则把 Ω \Omega Ω里的该样本去掉 ( x j , y j ) (x_j,y_j) (xj,yj)。把样本 ( x j , y j ) (x_j,y_j) (xj,yj)加入到该簇 C i C_i Ci中。
  4. 重复步骤3直到簇 C i C_i Ci里没有未使用过的核心对象。
  5. 重复步骤234,直到核心对象集合为空。
  6. 输出得到的簇 { C 1 , C 2 , . . . . } \{C_1,C_2,....\} {C1,C2,....} (未包括在簇里的点就是噪声点)

在这里插入图片描述

层次聚类

AGNES 是一种采用自底向上聚合策略的层次聚类算法.它先将数据集中的每个样本看作一个初始聚类簇,然后在算法运行的每一步中找出距离最近的两个粟类簇进行合并,该过程不断重复,直至达到预设的聚类簇个数。这里的关键是如何计算聚类簇之间的距离。每个簇是一个样本集合,因此,只需采用关于集合的某种距离即可。
下面介绍一下豪斯多夫距离:

  1. 最小距离: 取两个簇最近的两个向量计算其距离。
  2. 最大距离:取两个簇最远的两个向量计算其距离。
  3. 平均距离:取两个簇所有向量之间的距离,计算其平均值。

输入:
假设样本集合 D = { x 1 , x 2 , . . . . , x m } D=\{x_1,x_2,....,x_m\} D={x1,x2,....,xm},其中 x x x都是向量表示。
聚类簇数 k k k
距离度量函数。
过程:

  1. 把每个样本定义为一个簇,最终有m个簇。
  2. 计算每个簇之间的距离,找出距离最短的那两个簇,合并为一个簇。
  3. 重复上述步骤2的过程,直到簇的数量为k。

如果k=1,计算步骤如下图所示:
在这里插入图片描述

;