常见的无监督学习中最有名的是聚类(clustering)方法。(其他还有密度估计,异常检测)
聚类试图将数据划分成若干不相交的子集,每个子集称为“簇”(cluster),其对应的标签需要人工标记。
聚类既可以单独分析数据的内部分布结构,也可以作为分类的前驱。比如商家有一大批用户数据,可以通过聚类,将用于划分成不同的类型,再机遇这些类训练分类模型。
性能度量也指”有效性指标(validity index)“.用性能度量来评估聚类效果,也可通过性能度量优化聚类过程。
对数据集 D = { x 1 , x 2 , . . . . , x m x_1,x_2,....,x_m x1,x2,....,xm},假定通过聚类给出的簇划分为C={ C 1 , C 2 , . . . C k C_1,C_2,...C_k C1,C2,...Ck},参考模型划分的簇 C ∗ C^* C∗={ C 1 ∗ , C 2 ∗ , . . . . , C s ∗ C_1^*,C_2^*,....,C_s^* C1∗,C2∗,....,Cs∗},相应的,令 λ \lambda λ和 λ ∗ \lambda^* λ∗分别表示C和 C ∗ C^* C∗的簇标记。
定义:
a = ∣ S S ∣ , S S = ( x i , x j ) , λ i = λ j , λ i ∗ = λ j ∗ , i < j a = |SS|, SS =(x_i,x_j) , \lambda_i = \lambda_j,\lambda^*_i = \lambda^*_j ,i
b = ∣ S D ∣ , S D = ( x i , x j ) , λ i = λ j , λ i ∗ ≠ λ j ∗ , i < j b = |SD|,SD =(x_i,x_j) , \lambda_i = \lambda_j,\lambda^*_i \neq \lambda^*_j ,i
c = ∣ D S ∣ , D S = ( x i , x j ) , λ i ≠ λ j , λ i ∗ = λ j ∗ , i < j c= |DS|,DS =(x_i,x_j) , \lambda_i \neq \lambda_j,\lambda^*_i = \lambda^*_j,i
d = ∣ D D ∣ , D D = ( x i , x j ) , λ i ≠ λ j , λ i ∗ ≠ λ j ∗ , i < j d = |DD|,DD =(x_i,x_j) , \lambda_i \neq \lambda_j,\lambda^*_i \neq\lambda^*_j,i
对数据x两辆配对,显然a+b+c+d = m*(m-1)/2
常用性能度量外部指标
对函数 d i s t ( , ) dist( ,) dist(,) 要满足非负,同零,对称,三角不等式。
给定样本 x i = ( x i 1 , x i 2 , . . . . . . , x i n ) x_i=(x_{i1},x_{i2},......,x_{in}) xi=(xi1,xi2,......,xin)和 x j = ( x j 1 , x j 2 , . . . . . . , x j n ) x_j=(x_{j1},x_{j2},......,x_{jn}) xj=(xj1,xj2,......,xjn)
闵可夫斯基距离:
d i s t m k ( x i , x j ) = ( ∑ u = 1 n ∣ x i u − x j u ∣ p ) 1 p dist_{mk}(x_i,x_j) = (\sum_{u=1}^n |x_{iu}-x_{ju}|^p)^{\frac{1}{p}} distmk(xi,xj)=(u=1∑n∣xiu−xju∣p)p1
当p = 2,是欧式距离
当p = 1,是曼哈顿距离
原型聚类:算法对原型进行初始化,然后对原型进行迭代更新。
给定样本集
K-means
——————————————————————————————————
输入:样本集合D = { x 1 , x 2 , . . . . . x m x_1,x_2,.....x_m x1,x2,.....xm}
聚类簇数k
过程:
1.从D中随机选择k个样本作为初始均值向量{ μ 1 , μ 2 , . . . . . . , μ k \mu_1,\mu_2,......,\mu_k μ1,μ2,......,μk}
2.DO WHILE
3. 令 C i = ∅ \quad令C_i = \emptyset 令Ci=∅(1<=i<=k)
4. \quad FOR j = 1,2,3,…m
5. \qquad 计算样本 x j x_j xj与各均值向量 μ i \mu_i μi的距离 d i j = ∣ x j − μ i ∣ 2 ; d_{ij} = |x_j-\mu_i|_2; dij=∣xj−μi∣2;
6. \qquad 根据距离最近的均值向量确定 x j x_j xj的簇标记: λ j = a r g m i n i d j i ; \lambda_j = argmin_id_{ji}; λj=argminidji;
7. \qquad 将样本 x j x_j xj划入对应的簇 C λ j = C λ j ∪ x j C_{\lambda_j}=C_{\lambda_j}\cup x_j Cλj=Cλj∪xj
8. \quad END
9. \quad FOR i = 1,2,3,…k,
10. \qquad 计算新均值向量: μ i ′ = 1 ∣ C i ∣ ∑ x ∈ C i x \mu_i^{'} = \frac{1}{|C_i|}\sum_{x\in C_i}x μi′=∣Ci∣1∑x∈Cix
11. \qquad IF μ i ′ ≠ μ i \mu_i^{'}\neq \mu_i μi′=μi then
12. \qquad 将向量值 μ i \mu_i μi更新为 μ i ′ \mu_i^{'} μi′
13. \qquad END if
14. \quad END for
15.UNTIL 当前向量均值均未更新
输出:簇划分 C C C={ C 2 , C 2 , . . . C k C_2,C_2,...C_k C2,C2,...Ck}
——————————————————————————————————
与k均值算法类似,学习向量量化(Learning Vector Quantization)LVQ假设样本带有标记
LVQ的目标是学得一组n维原型向量{ p 1 , p 2 , . . . p q p_1,p_2,...p_q p1,p2,...pq}
——————————————————————————————————
输入:样本集D ={ ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . . . . , ( x m , y m ) (x_1,y_1), (x_2,y_2),......,(x_m,y_m) (x1,y1),(x2,y2),......,(xm,ym)} (y是样本x的类别标记)
\qquad 原型个数q,各原型的类别标记是{ t 1 , t 2 . . . . t q t_1,t_2....t_q t1,t2....tq}
\qquad 学习率 η ∈ ( 0 , 1 ) \eta \in (0,1) η∈(0,1)
过程:
1.初始化一组原型向量{ p 1 , p 2 , . . . p q p_1,p_2,...p_q p1,p2,...pq}
2.DO WHILE
3. \quad 从样本集D中随机选取样本 ( x j , y j ) (x_j,y_j) (xj,yj)
4. \quad 计算样本 x j x_j xj和 p i p_i pi(1<=i<=q)的距离 d i j = ∣ ∣ x j − p i ∣ ∣ 2 d_{ij} = ||x_j-p_i||_2 dij=∣∣xj−pi∣∣2
5. \quad 找出与 x j x_j xj距离最近的原型向量 p i ∗ , i ∗ = a r g m i n i d i j p_{i*},i^*=argmin_id_{ij} pi∗,i∗=argminidij
6. \quad IF y j = t i ∗ y_j = t_{i*} yj=ti∗ then
7. \qquad p ′ = p i ∗ + η ( x j − p i ∗ ) p^{'} = p_{i*}+\eta(x_j-p_{i*}) p′=pi∗+η(xj−pi∗)
8. \quad else
9. \qquad p ′ = p i ∗ − η ( x j − p i ∗ ) p^{'} = p_{i*}-\eta(x_j-p_{i*}) p′=pi∗−η(xj−pi∗)
10. \quad END IF
11. \quad 将向量 p i ∗ p_{i*} pi∗更新为 p ′ p^{'} p′
12.UNTIL 满足停止条件
——————————————————————————————————
需要预备知识EM算法和高斯分布、拉格朗日乘子,暂时跳过,周六周日集中解决
预备知识:多元高斯分布,对n维样本空间 χ \chi χ中的随机变量x,如果x服从高斯分布,其概率密度函数为:
p ( x ) = 1 ( 2 π ) n / 2 ∣ ∑ ∣ p(x) = \frac{1}{(2\pi)^{n/2}|\sum|} p(x)=(2π)n/2∣∑∣1
密度聚类也称为“基于密度的聚类(density-based clustering)“,此类算法假设聚类结构能通过样本分布的紧密程度确定,通常情况下,密度聚类算法从样本密度的角度来考察样本的可连接性,并且基于可连接样本不断扩展聚类簇与获得最终的聚类效果。
DBSCAN
它基于一组邻域参数来刻画样本分布的紧密程度,给定数据集合D={x1,x2,…,xm},
定义下面几个概念
核心对象
出发寻找的所有样本组成的集合X满足连接性和最大性。DBSCAN先选任一个核心对象为种子。
DBSCAN algorithm
—————————————————————————————————
输入:样本集D = { x 1 , x 2 , . . . . . , x m x_1,x_2,.....,x_m x1,x2,.....,xm}
\qquad 邻域参数 ( ϵ , M i n P t s \epsilon,MinPts ϵ,MinPts)
过程:
1.初始化核心对象集合 Ω = ∅ \Omega = \emptyset Ω=∅
2.FOR j = 1,2,…m
3. \quad 确定样本 x j x_j xj的 ϵ \epsilon ϵ邻域 N ( x j ) N(x_j) N(xj)
4. \quad IF |N( x j x_j xj| >=MinPts THEN
5. \qquad 将x加入到核心对象集合 Ω = Ω ∪ x j \Omega =\Omega \cup x_j Ω=Ω∪xj
6. \quad END IF
7.END FOR
8.初始化聚类簇数 k = 0;
9.初始化未访问样本集合 Γ = D \Gamma = D Γ=D
10.WHILE Ω ≠ ∅ \Omega\neq\emptyset Ω=∅
11. \quad 记录当前未访问样本集合
12. \quad 随机选取一个核心对象core ∈ Ω \in \Omega ∈Ω,初始化队列Q
13. \quad 将core从 Γ \Gamma Γ中去除
14. \quad WHILE Q ≠ ∅ Q\neq\empty Q=∅
15. \qquad 取出队头q
16. \qquad IF ∣ N ( q ) ∣ > = M i n P t s |N(q)|>=MinPts ∣N(q)∣>=MinPts THEN
17. \qquad
—————————————————————————————————
[1]周志华.机器学习第九章聚类