文章目录

  • 1. 聚类基本概念
    • 1.1 相似度、距离
    • 1.2 类、簇
    • 1.3 类之间的距离
  • 2. 层次聚类
  • 3. K均值聚类
    • 3.1 模型
    • 3.2 策略
    • 3.3 算法
    • 3.4 算法特性
  • 4. sklearn.cluster
    • 4.1 sklearn.cluster.KMeans k均值聚类
    • 4.2 Hierarchical clustering 层次聚类
  • 聚类:依据样本特征的相似度或距离,将其归并到若干个“类”或“簇”的数据分析问题

  • 聚类目的:通过得到的类或簇来发现数据的特点或对数据进行处理,在数据挖掘、模式识别等领域有着广泛的应用

  • 聚类 属于无监督学习,因为只是根据样本的相似度或距离将其进行归类,而类或簇事先并不知道

1. 聚类基本概念

1.1 相似度、距离

  • 有多种相似度或距离的定义
  • 相似度直接影响聚类的结果,其选择很关键

闵可夫斯基距离 :dij=(∑k=1m∣xki−xkj∣p)1pd_{ij} = \bigg(\sum\limits_{k=1}^m |x_{ki} - x_{kj}|^p \bigg)^{\frac{1}{p}}dij​=(k=1∑m​∣xki​−xkj​∣p)p1​ , 距离越大,相似度越小
p=1p=1p=1, 曼哈顿距离
p=2p=2p=2, 欧式距离
p=∞p=\inftyp=∞, 切比雪夫距离,dij=max⁡k∣xki−xkj∣d_{ij} = \max\limits_k |x_{ki} - x_{kj}|dij​=kmax​∣xki​−xkj​∣


马哈拉诺比斯距离: 考虑各个分量(特征)之间的相关性,与各个分量的尺度无关,距离越大,相似度越小

dij=[(xi−xj)TS−1(xi−xj)]1/2,S为样本协方差矩阵d_{ij}=[(x_i-x_j)^TS^{-1}(x_i-x_j)]^{1/2}, \quad S 为样本协方差矩阵dij​=[(xi​−xj​)TS−1(xi​−xj​)]1/2,S为样本协方差矩阵
马氏距离是欧氏距离的推广。


相关系数:其绝对值越接近1,越相似;越接近0,越不相似
rij=∑k=1m(xki−xˉi)(xkj−xˉj)[∑k=1m(xki−xˉi)2∑k=1m(xkj−xˉj)2]1/2r_{ij}=\frac{\sum\limits_{k=1}^m(x_{ki }- \bar x_i)(x_{kj}- \bar x_j)}{\bigg[\sum\limits_{k=1}^m(x_{ki }- \bar x_i)^2\sum\limits_{k=1}^m(x_{kj}- \bar x_j)^2 \bigg]^{1/2}}rij​=[k=1∑m​(xki​−xˉi​)2k=1∑m​(xkj​−xˉj​)2]1/2k=1∑m​(xki​−xˉi​)(xkj​−xˉj​)​


夹角余弦: 夹角余弦越接近于1,表示样本越相似;越接近于0,表示样本越不相似
sij=∑k=1mxkixkj[∑k=1mxki2∑k=1mxkj2]1/2s_{ij} = \frac{\sum\limits_{k=1}^m x_{ki}x_{kj}}{\bigg[ \sum\limits_{k=1}^m x_{ki}^2 \sum\limits_{k=1}^m x_{kj}^2\bigg]^{1/2}}sij​=[k=1∑m​xki2​k=1∑m​xkj2​]1/2k=1∑m​xki​xkj​​

  • 从距离的角度看,A和B比A和C更相似
  • 从相关系数的角度看,A和C比A和B更相似
  • 进行聚类时,选择适合距离或相似度非常重要

1.2 类、簇

  • 聚类得到的类或簇,本质是样本的子集
  • 如果假定一个样本只能属于一个类,或类的交集为空集,称为硬聚类(hard clustering)
  • 如果一个样本可以属于多个类,或类的交集不为空集,称为软聚类(soft clustering)
类、簇定义
dij≤Td_{ij} \le Tdij​≤T ,最常用,且能推出下面的
1nG−1∑xj∈Gdij≤T\frac{1}{n_G-1}\sum\limits_{x_j \in G}d_{ij} \le TnG​−11​xj​∈G∑​dij​≤T
1nG(nG−1)∑xi∈G∑xj∈Gdij≤T,dij≤V\frac{1}{n_G(n_G-1)}\sum\limits_{x_i \in G}\sum\limits_{x_j \in G}d_{ij} \le T ,\quad d_{ij} \le VnG​(nG​−1)1​xi​∈G∑​xj​∈G∑​dij​≤T,dij​≤V

类的特征:

  • 类的均值(中心):xˉG=1nG∑i=1nGxi\bar x_G = \frac{1}{n_G}\sum\limits_{i=1}^{n_G}x_ixˉG​=nG​1​i=1∑nG​​xi​
  • 类的直径:DG=max⁡xi,xj∈GdijD_G = \max\limits_{x_i,x_j \in G} d_{ij}DG​=xi​,xj​∈Gmax​dij​
  • 类的样本散布矩阵:AG=∑i=1nG(xi−xˉG)(xi−xˉG)TA_G=\sum\limits_{i=1}^{n_G}(x_i-\bar x_G)(x_i-\bar x_G)^TAG​=i=1∑nG​​(xi​−xˉG​)(xi​−xˉG​)T
  • 类的样本协方差矩阵:SG=1m−1AG=1m−1∑i=1nG(xi−xˉG)(xi−xˉG)T,m样本维数S_G=\frac{1}{m-1}A_G=\frac{1}{m-1}\sum\limits_{i=1}^{n_G}(x_i-\bar x_G)(x_i-\bar x_G)^T, m样本维数SG​=m−11​AG​=m−11​i=1∑nG​​(xi​−xˉG​)(xi​−xˉG​)T,m样本维数

1.3 类之间的距离

  • 最短距离或单连接:Dpq=min⁡{dij∣xi∈Gp,xj∈Gq}D_{pq} = \min \{d_{ij}|x_i \in G_p,x_j \in G_q\}Dpq​=min{dij​∣xi​∈Gp​,xj​∈Gq​}

  • 最长距离或完全连接:Dpq=max⁡{dij∣xi∈Gp,xj∈Gq}D_{pq} = \max \{d_{ij}|x_i \in G_p,x_j \in G_q\}Dpq​=max{dij​∣xi​∈Gp​,xj​∈Gq​}

  • 中心距离:Dpq=dxˉpxˉqD_{pq} = d_{\bar x_p\bar x_q}Dpq​=dxˉp​xˉq​​

  • 平均距离:Dpq=1npnq∑xi∈Gp∑xj∈GqdijD_{pq} = \frac{1}{n_p n_q}\sum\limits_{x_i \in G_p}\sum\limits_{x_j \in G_q}d_{ij}Dpq​=np​nq​1​xi​∈Gp​∑​xj​∈Gq​∑​dij​

2. 层次聚类

  • 层次聚类 假设类别之间 存在层次结构,将样本聚到层次化的类中
  • 层次聚类:有聚合(agglomerative)或自下而上(bottom-up)聚类、分裂(divisive)或自上而下(top-down)聚类 两种方法
  • 每个样本只属于 一个类,所以层次聚类属于 硬聚类

聚合聚类:

  • 将每个样本 各自分到一个类
  • 之后将相距最近的两类合并,建立一个新的类
  • 重复上一步直到满足停止条件;得到层次化的类别

分裂聚类:

  • 将所有样本分到一个类
  • 之后将已有类中相距最远的样本分到两个新的类
  • 重复上一步直到满足停止条件;得到层次化的类别。

聚合聚类的具体过程如下:

  • 对给定的样本集合,开始将每个样本分到一个类
  • 按照一定规则,例如 类间距离最小,将 最 满足规则条件的两个类进行合并
  • 反复上一步,每次减少一个类,直到满足停止条件,如 所有样本聚为一类

聚合聚类需要预先确定三要素:

  • (1)距离或相似度(闵可夫斯基距离、马哈拉诺比斯距离、相关系数、夹角余弦)
  • (2)合并规则(类间距离最小,可以是 最短距离、最长距离、中心距离、平均距离)
  • (3)停止条件(类的个数达到阈值(极端情况类的个数是1)、类的直径超过阈值)

3. K均值聚类

k均值 聚类:是基于样本集合划分的聚类算法

  • 将样本集合划分为 k 个子集,构成 k 个类
  • 将 n 个样本分到 k 个类中,每个样本到其所属类的中心距离最小
  • 每个样本只能属于一个类,是硬聚类

3.1 模型

n 个样本 划分成 k 个类,类之间的交集为空(硬聚类)

3.2 策略

策略:通过损失函数的最小化 选取 最优的划分 或 函数 C∗C^*C∗

  • 样本距离:欧氏距离,d(xi,xj)=∣∣xi−xj∣∣2d(x_i,x_j)=||x_i-x_j||^2d(xi​,xj​)=∣∣xi​−xj​∣∣2
  • 损失函数:样本与其类属的中心的距离总和,
    W(C)=∑l=1k∑C(i)=l∣∣xi−xˉl∣∣2W(C) = \sum\limits_{l=1}^k\sum\limits_{C(i)=l} ||x_i-\bar x_l||^2W(C)=l=1∑k​C(i)=l∑​∣∣xi​−xˉl​∣∣2
  • 本质:求解最优化问题
    C∗=arg min⁡CW(C)=arg min⁡C∑l=1k∑C(i)=l∣∣xi−xˉl∣∣2C^* = \argmin\limits_C W(C) = \argmin\limits_C \sum\limits_{l=1}^k\sum\limits_{C(i)=l} ||x_i-\bar x_l||^2C∗=Cargmin​W(C)=Cargmin​l=1∑k​C(i)=l∑​∣∣xi​−xˉl​∣∣2

n 个样本 划分成 k 个类,组合数是指数级的,其最优解求解是 NP 困难问题,常用迭代求解

3.3 算法

k均值聚类 的算法是迭代的过程,每次迭代包括两个步骤

  • 首先随机选择 k 个类的中心(选 k 个样本),将其余样本逐个指派到与其最近的中心的类中,得到一个聚类结果
  • 然后更新每个类的样本的均值,作为类的新的中心
  • 重复以上步骤,直到收敛

3.4 算法特性

1. 总体特点

  • 基于划分的聚类方法
  • 类别数 k 事先指定
  • 欧氏距离平方表示样本之间的距离
  • 以中心或样本的 均值 表示类别
  • 以 样本 和 其所属类的中心 之间的 距离的总和 为最优化目标函数
  • 得到的类别是平坦的、非层次化的
  • 是迭代算法,不能 保证得到全局最优

2. 收敛性

  • k均值 聚类属于启发式方法,不能 保证收敛到全局最优
  • 初始中心的选择 会 直接影响聚类结果
  • 类中心在聚类的过程中会发生移动,但是往往不会移动太大,因为在每一步,样本被分到与其最近的中心的类中

3. 初始类的选择

  • 选择不同初始中心,会得到不同的聚类结果
  • 初始中心的选择,比如 可以用层次聚类对样本进行聚类,得到k个类时停止。然后从每个类中选取一个与中心距离最近的点

4. 类别数k的选择

  • k 值需要预先指定,而在实际应用中最优k值是不知道的
  • 解决方法:尝试不同的k值,检验聚类的质量,推测最优的k值
  • 聚类结果的质量:可以用类的平均直径来衡量
  • 一般地,类别数变小时,平均直径会增加;类别数变大超过某个值以后,平均直径会不变;而这个值正是最优的k值
  • 可以采用二分查找,快速找最优的k值

4. sklearn.cluster

sklearn.cluster 官网介绍了10种聚类算法。

4.1 sklearn.cluster.KMeans k均值聚类

sklearn.cluster.KMeans 官网参数介绍

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')

主要参数:

  • n_clusters, default=8
    类的个数,即k值

  • init:{‘k-means++’, ‘random’}
    初始中心选择,默认选项更好

  • n_init, default=10
    多次初始化,然后聚类,最后取最好的聚类结果

  • max_iter, default=300
    单次聚类的最大迭代次数

  • tol, default=1e-4
    迭代停止精度

  • precompute_distances:‘auto’ or bool, default=’auto’
    预先计算距离

  • algorithm:{“auto”, “full”, “elkan”}, default=”auto”
    迭代算法.
    The classical EM-style algorithm is “full”.
    The “elkan” variation is more efficient by using the triangle inequality, but currently doesn’t support sparse data.
    “auto” chooses “elkan” for dense data and “full” for sparse data.


代码示例:

from sklearn.cluster import KMeans
import numpy as np
# 书上例题
X = np.array([[0, 2], [0, 0], [1, 0], [5, 0], [5, 2]])
kms = KMeans(n_clusters=2).fit(X)
print(kms.labels_)
print(kms.cluster_centers_)

运行结果:

[0 0 0 1 1]
[[0.33333333 0.66666667][5.         1.        ]]

4.2 Hierarchical clustering 层次聚类

sklearn.cluster.AgglomerativeClustering

class sklearn.cluster.AgglomerativeClustering(n_clusters=2, affinity='euclidean',
memory=None, connectivity=None, compute_full_tree='auto', linkage='ward',
distance_threshold=None)

官方代码示例

聚类方法(Clustering)相关推荐

  1. 深度聚类方法之对比聚类(Contrastive Clustering,CC)

    深度聚类方法之对比聚类(Contrastive Clustering,CC) 1.参考文献 <Contrastive Clustering> 2.深度聚类方法 深度聚类方法大致分为以下几类 ...

  2. 用聚类方法结合卷积网络,实现无监督端到端图像分类

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 图像分类是根据图像的语义信息将不同类别图像区分开来,是计算机视觉中 ...

  3. 综述:激光雷达全景分割的传统点云聚类方法的技术总结

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨paopaoslam 来源丨泡泡机器人SLAM 标题:A Technical Survey an ...

  4. 谱聚类 Spectral Clustering

    谱聚类 Spectral Clustering sklearn.cluster.SpectralClustering 谱聚类(Spectral Clustering, SC), 是一种基于图论的聚类方 ...

  5. 聚类算法是什么?聚类(clustering)有哪些常用的评估方法?评估方法的公示是什么?轮廓系数(Silhouette Coefficient)、平方根标准误差、R方、ARI分别是什么?

    聚类(clustering)算法是一种无监督方法,无因变量或者目标变量: 核心就一句话: 物以类聚,人以群分 企业在进行客户分析时,往往希望通过了解不同的客户具有什么不同的特征来实现以下三种目的: 精 ...

  6. 面向单细胞RNA-seq数据插补及聚类方法研究

    许俊林博士生答辩公告 浏览次数:175日期:2021-09-06编辑:研究生秘书 学位论文简介 单细胞RNA测序 (single-cell RNA-sequencing, scRNA-seq) 技术可 ...

  7. 从对比学习(Contrastive Learning)到对比聚类(Contrastive Clustering)

    从对比学习(Contrastive Learning)到对比聚类(Contrastive Clustering) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailug ...

  8. 【数据挖掘】基于密度的聚类方法 - DBSCAN 方法 ( K-Means 方法缺陷 | 基于密度聚类原理及概念 | ε-邻域 | 核心对象 | 直接密度可达 | 密度可达 | 密度连接 )

    文章目录 I . K-Means 算法在实际应用中的缺陷 II . K-Means 初始中心点选择不恰当 III . K-Means 优点 与 弊端 IV . 基于密度的聚类方法 V . 基于密度的聚 ...

  9. 【数据挖掘】聚类算法 简介 ( 基于划分的聚类方法 | 基于层次的聚类方法 | 基于密度的聚类方法 | 基于方格的聚类方法 | 基于模型的聚类方法 )

    文章目录 I . 聚类主要算法 II . 基于划分的聚类方法 III . 基于层次的聚类方法 IV . 聚合层次聚类 图示 V . 划分层次聚类 图示 VI . 基于层次的聚类方法 切割点选取 VII ...

最新文章

  1. 如何像用MNIST一样来用ImageNet?这里有一份加速TensorFlow分布式训练的梯度压缩指南
  2. 分割2021PanopticFCN
  3. python写传奇脚本,Python趣味打怪:60秒学会一个例子,147段简单代码助你从入门到大师 | 中文资源...
  4. Thinkphp5内核大型程序员交流博客系统源码
  5. 2018.12.17-dtoj-1170-最长公共子串
  6. OSI/RM体系结构
  7. 鹅厂员工平均月薪7万刷屏!公司每天赚9.5亿,养5.46万人
  8. 线性代数 : 矩阵消元
  9. 肝了 10 万字 ,Go 语言保姆级编程教程2021最新版(建议收藏)
  10. 双极结型三极管的结构、特性曲线、参数、lceda仿真
  11. 图片中不规则区域的点击
  12. 蓝鲸智云平台部署[6.0.5]
  13. 芯片设计五部曲之一 | 声光魔法师——模拟IC
  14. 国内外IoT系统介绍
  15. Ubuntu安装ROS详细教程
  16. 在Surface Pro 4上安装Bliss OS
  17. 隔离网络那点事(物理隔离网络)
  18. VLC media player ActiveX控件制作
  19. 八种基本数据类型各自所占空间大小
  20. 医疗企业机构汇报没不安PPT模板

热门文章

  1. Hive安装报错:Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient的解决办法
  2. php 扩展 返回字符串,基于PHP7的PHP扩展开发之四(字符串的处理)
  3. C++中int *p[4]和 int (*q)[4]的区别
  4. C++远征之封装篇——类和封装、实例化和对象成员访问
  5. Thinkphp带表情的评论回复实例
  6. 【HNOI2013】数列
  7. Python学习之==第三方模块的安装、模块导入
  8. 【转】java单例模式的实现
  9. 阿里巴巴后台的使用体验
  10. 一个C程序的编译过程(Linux环境下Gcc)