聚类
- 无监督学习,标记信息未知,通过对无标记训练样本的学习来揭示数据的内在性质及规律
- 聚类将数据集中的样本划分为若干个不相交的子集(簇)
- 潜在概念(类别)
- 可作为单独过程,寻找分布结构,也可作为分类等其他学习任务的前驱过程
性能度量
- 簇内相似度高,簇间相似度低
- 一类是与某个参考模型进行比较,外部指标
- a=|SS|,在C中属于相同簇在C*中也属于相同簇的样本对
- b=|SD|,在C中属于相同簇在C*中不属于形同簇的样本对
- c=|DS|,在C中不属于,C*中属于
- d=|DD|,在C中不属于,在C*中不属于
- Jaccard系数 J C = a a + b + c JC=\frac{a}{a+b+c} JC=a+b+ca
- FM指数 F M I = a a + b a a + c FMI=\sqrt{\frac{a}{a+b}\frac{a}{a+c}} FMI=a+baa+ca
- RAND指数, R I = 2 ( a + b ) m ( m − 1 ) RI=\frac{2(a+b)}{m(m-1)} RI=m(m−1)2(a+b)
- 上述度量越大越好
- 第二类是直接考察聚类结果,内部指标
- avg© 平均距离,
- diam©, 直径,簇内最远距离
- dmin(Ci,cj), Ci和Cj间最近样本距离
- dcen(Ci,Cj),Ci和Cj中心点距离
- DB指数,越小越好
- D B I = 1 k ∑ i = 1 k max j ≠ i ( a v g ( C i ) + a v g ( C j ) d c e n ( u i , u j ) ) DBI=\frac1k\sum_{i=1}^{k}\max_{j\neq i}(\frac{avg(C_i)+avg(C_j)}{d_{cen}(u_i,u_j)}) DBI=k1i=1∑kj̸=imax(dcen(ui,uj)avg(Ci)+avg(Cj))
- Dunn指数,值越大越好。
- $$DI=\min_{1\leq i\leq k}{\min_{j\neq i}(\frac{d_{min}(C_i,C_j)}{max_{1\leq l \leq k}diam(C_l)})}
距离度量
闵科夫斯基距离,有序属性
-
d
i
s
m
k
(
x
i
,
x
j
)
=
(
∑
u
=
1
n
∣
x
i
u
−
x
j
u
∣
p
)
1
p
dis_{mk}(x_i,x_j)=(\sum_{u=1}^{n}|x_{iu}-x_{ju}|^p)^{\frac1p}
dismk(xi,xj)=(u=1∑n∣xiu−xju∣p)p1
- p=2 欧式距离,p=1 曼哈顿距离
无序属性, {飞机,火车,轮船}
- p=2 欧式距离,p=1 曼哈顿距离
- VDM距离
原型聚类
假设聚类结构能通过一组原型刻画,常用。算法先对原型进行初始化,然后对原型进行迭代更新求解,采用不同的原型、不同的求解方式,产生不同的聚类结果。
k均值算法
- 最小化平方误差
- E = ∑ i = 1 k ∑ x ⊆ C i ∣ ∣ x − u i ∣ ∣ 2 2 E=\sum^{k}_{i=1}\sum_{x\subseteq C_i}||x-u_i||_2^2 E=i=1∑kx⊆Ci∑∣∣x−ui∣∣22
- NP难问题,采用贪心策略通过迭代优化来近似求解。
- local minimun, 高度依赖初始中心
- 随机选择k个样本作为初始均值向量。
- 计算样本与各均值的距离,根据最近的均值向量,将当前样本归入该簇
- 对于每个簇,重新计算向量均值
- 重复2,3直到均值向量不再更新。
class sklearn.cluster.KMeans(n_clusters=8, init=’k-means++’, n_init=10, max_iter=300,
tol=0.0001, precompute_distances=’auto’, verbose=0, random_state=None, copy_x=True, n_jobs=None, algorithm=’auto’)
- init
- ‘k-means++’,default,确保初始中心距离尽量远,kmeans随机选取
- ‘random’
- an ndarray
- n_int
算法运行的次数- 10,default
- max_iter
每一次运行的最大迭代次数- 300,default
- tol
收敛的容忍度- 1e-4,default
- precomputer_distance
- 提前计算距离,更快但是消耗更多内存
- ‘auto’,n_sample*n_clusters >12 million时不计算。
- ‘True’,'False
- random—state
- None
- int ,RandomState instance
- algorithm
- ‘auto’,defalut, choose elkan for dense data and full for sparse data
- ‘full’,正常的迭代算法
- ‘elkan’ ,更有效率,使用三角不等式,不支持系数数据
mini-batch
- 相比kmeans来减少计算复杂度,目标函数是一样的
- 在每次迭代选择子集,结果比k-means差一点
学习向量量化 LVQ Learning Vector Quantization
学得一组n维q个原型向量,每个代表一个聚类簇
- 假设数据样本带有类别标记,这些监督信息来辅助聚类
- 通过监督信息来初始化一组原型向量,给定最大迭代次数,学习率
- 选取样本,找出最近原型向量p_i,根据两者是否标记一致来更新原型向量
- 一致则向当前样本x靠拢 p 、 = p i + η ( x j − p i ) p^、=p_i+\eta(x_j-p_i) p、=pi+η(xj−pi),不一致则远离x, p 、 = p i − η ( x j − p i ) p^、=p_i-\eta(x_j-p_i) p、=pi−η(xj−pi)
- 重复2,3直到迭代次数满或者,不再更新、
- 对所有,根据距学习得到的q个原型向量的距离,划分簇
- 对于3,更新的是最近的原型,可更新多个原型向量来提高收敛速度
高斯混合聚类
- 用概率模型表示聚类,得到某个点属于某个类的概率
密度聚类
基于密度的聚类,聚类结构能通过样本分布的紧密程度确定。
DBSCAN
- ‘领域’来刻画样本分布的紧密程度,
- 由密度可达关系到处的最大密度相连样本集合。
class sklearn.cluster.DBSCAN(eps=0.5, min_samples=5, metric=’euclidean’, metric_params=None,
algorithm=’auto’, leaf_size=30, p=None, n_jobs=None)
- eps
- 两个样本作为邻居的最大距离 (important)
- min_samples
- 作为核心节点,所需的邻居节点的最小数目
- metric
- algorithm
- 用于计算节点距离的方法
- ‘auto’
- ‘ball_tree’
- ‘kd_tree’
- ‘brute’
- leaf_size
- pass to BallTree or KDtree
- 30,default
- p
- 闵可夫斯基距离中的p
层次聚类
在不同层次进行聚类,形成树形的聚类结构。
AGNES
- 自底向上
- 每个样本看做初始聚类簇,
- 每一步找出两个相同的聚类簇进行合并,
- 直至达到预设的聚类簇个数
- 单链接,使用簇间最小距离,
- 全连接,使用簇间最大距离
- 均链接,使用簇间平均距离
DIANA 自顶向下
tips
- 聚类继承通过对多个聚类学习器进行集成,有效降低聚类假设与真实聚类结构不符,聚类过程中的随机性等因素带来的影响。
- 异常检测场借助聚类或距离进行计算。