聚类讲的比较简单...怎么感觉老师不怎么待见unsupervised learning捏?...
---------------笔记开始---------------------
1. 一般概念
1)分类与聚类(分类标识)
评测纯度。我们有测试集 {xi}
,这样定义纯度为 pk=mkNk≤1,∀k.
2) 输入
- 特征向量的表示: {xi,1≤i≤N},xi∈Rp
- 。
- 相似矩阵的表示: S={sij,1≤i,j≤N} ,其中相似度的计算可以是 sij=(xi−x¯,xj−x¯)
- 的内积。显然,向量表示很容易可以计算相似度表示。
- 距离矩阵的表示(不相似度):
D={d(i,j),1≤i,j≤N}
,其中距离可以用二阶范数定义,比如
d(i,j)=∥xi−xj∥2
- 。
3) 输出: {ck}
,对应K个聚类。这里还分为:
- 非层次的
- 层次的(类似于树结构)
2. K-means方法(非层次聚类)
(注意不要和KNN搞混了,都是K开头的...)
1) K-means方法(特征表示)
输入: {xi,1≤i≤N}
,K——聚类的个数。
算法:
初始化,随机选定类中心 {ck}
.
- (i)根据 {ck}
- 到距离最近的类。
- (ii)修改
{ck}
,使得
c′(k)=mean(xi|xi∈Ck)
- 。重复上面两步。
2) K-medoids方法(相似度表示)
输入:s,k
初始化。然后根据 argmincks(xi,ck)
分配 xi ,再按照 argmaxck∑x∈Cks(xi,ck)确定新的中心。
3) 模糊的K-means方法
输入: {xi,1≤i≤N}
,K
初始化。
- (i) ∀xi
- (需要归一化分配权重)。
- (ii)
∀ck
,利用
ck
中的
xi
- 进行加权平均。
重复上述两步。
4) 谱聚类(向量表示)
输入: {xi,1≤i≤N}
,K
然后对原始数据做转换,形成新的数据集 {zi,1≤i≤N}
,然后再做K-means聚类。
其中转换的步骤如下:
- (i) 计算相似矩阵S
- (ii) 计算L=D-S,其中 D=⎡⎣⎢⎢D1⋱DN⎤⎦⎥⎥
- 。
- (iii)计算L最小的K个特征值对应的特征向量
- (iv)让U=
(u1,⋯,uk)
,则
zi
- 是U的第i行,这样就从p维降到了K维。
- (v)对Z进行K-means聚类。
3. 层次聚类
1) 自底向上的方法(聚合)
初始:每个 xi
都为一类
而后对于最相似的两类,合并到一类。对于类的最相似,可以定义为距离最近的类。而对于距离,则可以定义为三者之一:
- (i) dAB=mind(i,j),i∈A,j∈B
- ,称之为单连。
- (ii) dAB=maxd(i,j),i∈A,j∈B
- ,称之为全连。
- (iii)
dAB=∑d(i,j)∥A∥∥B∥
- .
2) 自顶向下的方法(分裂)
初始:所有的x作为一类。选用一种非层次的方法进行聚类,递归使用。
例子:二分法。
初始: G={xi}
, H=∅。而后选择离G最远的一个点g。
修改 G′=G∖g
, H=H⋃g。重复步骤,选择离H近的离G远的逐渐加入H。
直到分不动了,彻底分为两类。