聚类算法

匿名 (未验证) 提交于 2019-12-03 00:08:02

聚类

  • 无监督学习,标记信息未知,通过对无标记训练样本的学习来揭示数据的内在性质及规律
  • 聚类将数据集中的样本划分为若干个不相交的子集(簇)
  • 潜在概念(类别)
  • 可作为单独过程,寻找分布结构,也可作为分类等其他学习任务的前驱过程

性能度量

  • 簇内相似度高,簇间相似度低
  • 一类是与某个参考模型进行比较,外部指标
    • a=|SS|,在C中属于相同簇在C*中也属于相同簇的样本对
    • b=|SD|,在C中属于相同簇在C*中不属于形同簇的样本对
    • c=|DS|,在C中不属于,C*中属于
    • d=|DD|,在C中不属于,在C*中不属于
    • Jaccard系数 JC=aa+b+cJC=\frac{a}{a+b+c}
    • FM指数 FMI=aa+baa+cFMI=\sqrt{\frac{a}{a+b}\frac{a}{a+c}}
    • RAND指数, RI=2(a+b)m(m1)RI=\frac{2(a+b)}{m(m-1)}
    • 上述度量越大越好
  • 第二类是直接考察聚类结果,内部指标
    • dmin(Ci,cj), Ci和Cj间最近样本距离
    • dcen(Ci,Cj),Ci和Cj中心点距离
    • DB指数,越小越好
    • DBI=1ki=1kmaxji(avg(Ci)+avg(Cj)dcen(ui,uj))DBI=\frac1k\sum_{i=1}^{k}\max_{j\neq i}(\frac{avg(C_i)+avg(C_j)}{d_{cen}(u_i,u_j)})
    • 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)})}

距离度量

闵科夫斯基距离,有序属性

  • dismk(xi,xj)=(u=1nxiuxjup)1pdis_{mk}(x_i,x_j)=(\sum_{u=1}^{n}|x_{iu}-x_{ju}|^p)^{\frac1p}
    • p=2 欧式距离,p=1 曼哈顿距离
      无序属性, {飞机,火车,轮船}
  • VDM距离

原型聚类

假设聚类结构能通过一组原型刻画,常用。算法先对原型进行初始化,然后对原型进行迭代更新求解,采用不同的原型、不同的求解方式,产生不同的聚类结果。

k均值算法
  • 最小化平方误差
  • E=i=1kxCixui22E=\sum^{k}_{i=1}\sum_{x\subseteq C_i}||x-u_i||_2^2
  • NP难问题,采用贪心策略通过迭代优化来近似求解。
  • local minimun, 高度依赖初始中心
  1. 随机选择k个样本作为初始均值向量。
  2. 计算样本与各均值的距离,根据最近的均值向量,将当前样本归入该簇
  3. 对于每个簇,重新计算向量均值
  4. 重复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个原型向量,每个代表一个聚类簇

  • 假设数据样本带有类别标记,这些监督信息来辅助聚类
  1. 通过监督信息来初始化一组原型向量,给定最大迭代次数,学习率
  2. 选取样本,找出最近原型向量p_i,根据两者是否标记一致来更新原型向量
  3. 一致则向当前样本x靠拢p=pi+η(xjpi)p^、=p_i+\eta(x_j-p_i),不一致则远离x,p=piη(xjpi)p^、=p_i-\eta(x_j-p_i)
  4. 重复2,3直到迭代次数满或者,不再更新、
  5. 对所有,根据距学习得到的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
  • 自底向上
  1. 每个样本看做初始聚类簇,
  2. 每一步找出两个相同的聚类簇进行合并,
  3. 直至达到预设的聚类簇个数
  • 单链接,使用簇间最小距离,
  • 全连接,使用簇间最大距离
  • 均链接,使用簇间平均距离
DIANA 自顶向下
tips
  • 聚类继承通过对多个聚类学习器进行集成,有效降低聚类假设与真实聚类结构不符,聚类过程中的随机性等因素带来的影响。
  • 异常检测场借助聚类或距离进行计算。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!