聚类方法(Clustering)

文章目录

    • 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=1mxkixkjp)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=kmaxxkixkj


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

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=[(xixj)TS1(xixj)]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=1m(xkixˉi)2k=1m(xkjxˉj)2]1/2k=1m(xkixˉi)(xkjxˉ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=1mxki2k=1mxkj2]1/2k=1mxkixkj

在这里插入图片描述

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

1.2 类、簇

  • 聚类得到的类或簇,本质是样本的子集
  • 如果假定一个样本只能属于一个类,或类的交集为空集,称为硬聚类(hard clustering)
  • 如果一个样本可以属于多个类,或类的交集不为空集,称为软聚类(soft clustering)
类、簇定义
dij≤Td_{ij} \le TdijT ,最常用,且能推出下面的
1nG−1∑xj∈Gdij≤T\frac{1}{n_G-1}\sum\limits_{x_j \in G}d_{ij} \le TnG11xjGdijT
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(nG1)1xiGxjGdijT,dijV

类的特征:

  • 类的均值(中心):xˉG=1nG∑i=1nGxi\bar x_G = \frac{1}{n_G}\sum\limits_{i=1}^{n_G}x_ixˉG=nG1i=1nGxi
  • 类的直径:DG=max⁡xi,xj∈GdijD_G = \max\limits_{x_i,x_j \in G} d_{ij}DG=xi,xjGmaxdij
  • 类的样本散布矩阵: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=1nG(xixˉG)(xixˉ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=m11AG=m11i=1nG(xixˉG)(xixˉ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{dijxiGp,xjGq}

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

  • 中心距离:Dpq=dxˉpxˉqD_{pq} = d_{\bar x_p\bar x_q}Dpq=dxˉpxˉ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=npnq1xiGpxjGqdij

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)=xixj2
  • 损失函数:样本与其类属的中心的距离总和,
    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=1kC(i)=lxixˉl2
  • 本质:求解最优化问题
    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=CargminW(C)=Cargminl=1kC(i)=lxixˉl2

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)

官方代码示例

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三十岁以前不必在乎的29件事

【放弃】把握的反面就是放弃,选择了一个机会,就等于放弃了其他所有的可能。当新的机会摆在面前的时候,敢于放弃已经获得的一切,这不是功亏一篑,这不是半途而废,这是为了谋求更大的发展空间;或者…

python写名片管理系统_Python实现名片管理系统

本文实例为大家分享了Python实现名片管理系统的具体代码,供大家参考,具体内容如下 目标 综合应用已经学习过的知识点: 变量 流程控制 函数 模块 系统需求 1. 程序启动,显示名片管理系统欢迎界面,并显示功能菜单2 用户用…

程序员面试金典 - 面试题 17.24. 最大子矩阵(转成一维最大子序和 DP)

文章目录1. 题目2. 解题2.1 前缀和(超时)2.2 动态规划1. 题目 给定一个正整数和负整数组成的 N M 矩阵,编写代码找出元素总和最大的子矩阵。 返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号&…

解决mysql表被crash的一次维护始末

有客户反馈BOSS系统无法查询到6月28日以后的话单纪录,查询数据库后发现在执行对原始话单表执行查询时候偶尔出现 Table ***** is marked as crashed and should be repaired. 确定计费无误后决定在下班后执行对表的修复…

ICLR盲审阶段就被评审赞不绝口的论文:会是Transformer架构的一大创新吗?

编|杜伟、陈萍源|机器之心首次!无残差连接或归一化层,也能成功训练深度transformer。尽管取得了很多显著的成就,但训练深度神经网络(DNN)的实践进展在很大程度上独立于理论依据。大多数成功的现…

python自带的shell、其性能优于ipython_python3.4 shell

实验1 目的和要求(1) (2) (3) (4) (5) (6) (7) 开始 python 编程 了解什么是 python? 了解 python 的特性 学习下载和安装 python 学习执行 python ...... (2) 了解 python 的特性 (3) 学习下载和安装 python (4) 学习执行 python 命令和脚本文件的方法 (5) 学习 python 语音的…

程序员面试金典 - 面试题 08.13. 堆箱子(DP)

1. 题目 堆箱子。给你一堆n个箱子,箱子宽 wi、深 di、高 hi。 箱子不能翻转,将箱子堆起来时,下面箱子的宽度、高度和深度必须大于上面的箱子。 实现一种方法,搭出最高的一堆箱子。箱堆的高度为每个箱子高度的总和。 输入使用数组…

一篇文章带你了解国企程序员(超详细)

源|Hollis、国企程序锅最近互联网大厂裁员不断,今天为大家带来了一篇超详细国企程序员攻略。文章目录入职国企心得体会一、入职前二、入职后三、工作开发内容四、钱总结:北京户口相关问题一、北京户口咋获得?二、北京户口有啥用&a…

Delphi作为客户端调用.Net写的WCF服务端?

这方面的文章太少了,查了半天也只看到一两篇,关键点 1.wcf的Binding要配成 basicHttpBinding,否则Delphi无法通过WebService的方式调用服务 2.Delphi IDE中的导入WSDL和安装目录下的wsdlimp.exe都无法正确识别WCF消息,需要到网上下…

html表单代码例子_关于React的这些细节,你知道吗?-表单

在 React 里,HTML 表单元素的工作方式和其他的 DOM 元素有些不同,这是因为表单元素通常会保持一些内部的 state。例如这个纯 HTML 表单只接受一个名称:此表单具有默认的 HTML 表单行为,即在用户提交表单后浏览到新页面。如果你在 …

程序员面试金典 - 面试题 17.23. 最大黑方阵(DP)

1. 题目 给定一个方阵,其中每个单元(像素)非黑即白。 设计一个算法,找出 4 条边皆为黑色像素的最大子方阵。 返回一个数组 [r, c, size] ,其中 r, c 分别代表子方阵左上角的行号和列号,size 是子方阵的边长。 若有多个满足条件的…

js的oop方式和this指针问题

js的oop其实很简单,function本身就充当了类和构造函数的角色。然后通过传给构造函数的参数,完成类属性的赋值,从而实际化不同的对象。可是,js的oop也有很让人头疼的地方,其中之一就是this的指向。在js中,普…

史诗级学术骗局!一博士狂编 200 多篇论文,被揭发后畏罪自杀....

源|募格学术一博士狂编200多篇论文,被揭发后畏罪自杀,可他造成的撤稿影响直至今日还在继续,更有人称其的造假为科学史上最大的学术骗局之一。狂编200多篇论文发表,这个博士有点狠在著名学术打假网站 Retraction Watch …

docker安装_Docker安装

简介:Docker是一个供开发人员和系统管理员通过容器的方式构建、运行和共享应用程序的平台,通过容器的方式部署应用(打包成标准化单元,类似于一个集装箱),具有安全、灵活、轻量、松耦合、可移植、可扩展等特点。概念:仓…

LeetCode 1139. 最大的以 1 为边界的正方形(DP)

1. 题目 给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量。如果不存在,则返回 0。 示例 1: 输入:grid [[1,1,1],[1,0,1],[1,1,1]] 输出&…

大幅超越DALL·E 2和Imagen,斯坦福发布RA-CM3模型,融合检索与生成

文|QvQ最近,DALL-E和CM3等模型在多模态任务尤其是图文理解上表现出色。然而,这些模型似乎需要将所有学到的知识存储都存储在模型参数中,这就不得不需要越来越大的模型和训练数据来获取更多的知识,俨然将bigger and bet…

什么是域名服务器(DNS)

问题:什么是域名服务器?域名服务器是什么意思? 域名服务器即DNS,全称是Domain Name Server,一种程序,它保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。…

python判断正负的函数_Python |在计算操作的函数内将负数转换为正数?

我一直在寻找将负数转换为正数,我发现了一些东西,但没有成功.. 这是一个来自在线Python页面的练习,我正在学习Python。 我希望你明白这一点。 这是去洛杉矶旅行,我用功能计算钱,但现在有一个问题,我“从洛杉…

LeetCode 1325. 删除给定值的叶子节点(递归)

1. 题目 给你一棵以 root 为根的二叉树和一个整数 target ,请你删除所有值为 target 的 叶子节点 。 注意,一旦删除值为 target 的叶子节点,它的父节点就可能变成叶子节点; 如果新叶子节点的值恰好也是 target ,那么…

[翻译] python Tutorial 之一

声明:本文做为IronPython-2.0 B3的Tutorial 中文译文,内容全部来自其英文原文,其中本人认为存在疑问的或翻译不当之处会用原文中的内容加以标记,且本文内容完全用于研 究和学习IronPython 之用,限于本人英文翻译功底有…