聚类分析 Cluster Analysis


肝到爆炸呜呜呜

一、什么是聚类分析

关键词

1️⃣ 簇 Cluster:数据对象的集合,相同簇中的数据彼此相似,不同簇中的数据彼此相异。

2️⃣ 聚类分析 Cluster analysis:根据数据特征找到数据中的相似性,并将相似的数据聚集(分组)到一个簇中。

3️⃣ 无监督学习 Unsupervised learning:并没有为数据给出预先定义好的类别


好啦,我们现在有了理论储备啦!就让我们一起走进聚类分析吧~

聚类分析在我们的生活中并不陌生,甚至是随处可见的:比如商场的促销活动呀,城市规划的地块评估呀,生物学中基因的分组呀,GIS中的空间模式分布评估呀,还有各种标签tag什么的。在数据挖掘领域中,聚类分析常常用于:

  • 作为一个深入了解数据分布的独立工具(As a stand-along tool to get insight into data distribution)
  • 作为其他算法的预处理过程(As a preprocessing step for other algorithms)

这样一个依托于无监督的分组方法,结果可是随心所欲千奇百怪的哦,比如在动漫角色特征聚类里,有的聚类方法把灰毛的伊蕾娜分到了白毛组,有的聚类方法则是分到了银发组。

为了避免这种情况,我们需要设定指标去评估一个聚类方法的好坏,让不同的聚类结果之间有了可比性,就能知道哪些是好孩子啦。

一种好的聚类方法可以生成好质量的簇,而这些簇满足:

  • 簇内相似性高
  • 簇间相似性低

可以理解为,不同学校的小孩子之间应该接触的少,一个学校的小孩子之间应该接触的多。

在这基础上,聚类结果的具体质量应该取决于相似度度量算法,以及它的实现。如果一个聚类还能挖掘一些或者全部的隐藏模式,我们也可以认为它是一个高质量的聚类方法。

The quality of clustering result depends on both the similarity measure used by the method and its implementation.

The quality of a clustering method is also measured by its ability to discover some or all of the hidden patterns.

通常,数据科学家们使用相异度/相似度矩阵 Dissimilarity/Similarity metric来对不同数据特征之间的相似度进行度量,一般是通过距离公式进行,数据iii和jjj之间的距离可以记作d(i,j)d(i,j)d(i,j)。

当然,不同数据类型之间,比如连续数据、布尔型数据、分类数据、语义数据、序数数据,他们所运用的距离度量方法也是不同的。对于距离度量方法的权重分配,也是由数据语义和应用所决定的。

Weights may be assigned to different variables based on applications and data semantics.

相似性度量只是最基本的,下表给出了聚类的一些其他需求:

需求 解释
Scalability 可扩展的
Ability to deal with different types of attributes 能够处理不同属性
Ability to handle dynamic data 能处理动态数据
Discovery of clusters with arbitrary shape 发现任意形状的簇
Minimal requirements for domain knowledge to determine input parameters 对确定输入参数的领域知识的最低要求
Able to deal with noise and outliers 能处理噪声和离群数据
Insensitive to order of input records 对于输入数据顺序的不敏感性
High dimensionality 高维特性
Incorporation of user-specified constraints 合并用户指定的约束条件
Interpretability and usability 可解释性和可应用性

除却聚类方法的评估外,我们也可以基于簇的属性进行评估哦,那么一个普通的簇有什么属性呢?

质心 Centroid

一般是一个簇的中间,可以写作:
C=∑iN(ti)NC=\frac{\sum_i^N(t_i)}{N} C=N∑iN​(ti​)​
半径 Radius

簇中点到簇质心的距离的平均(点与中心),写作:
R=∑iN(ti−c)2NR=\sqrt{\frac{\sum_i^N(t_i-c)^2}{N}} R=N∑iN​(ti​−c)2​​
直径 Diameter

簇中所有点之间的平均距离的平方根(点与点),写作:
D=∑iN∑jN(ti−tj)2N(N−1)D=\sqrt{\frac{\sum_i^N\sum_j^N(t_i-t_j)^2}{N(N-1)}} D=N(N−1)∑iN​∑jN​(ti​−tj​)2​​


二、聚类分析中的数据类型

好了,上一节我们知道了什么是簇,什么是聚类,以及如何评价一个聚类方法的好坏,下面我们就要进一步了解聚类分析是如何运作的。数据挖掘是以数据为主导,以数据为驱动的,抛开具体数据空谈算法是不合理的。所以,我们需要来看看聚类分析中的输入数据究竟都什么牛马。

关键字

1️⃣ 数据矩阵 Data matrix:数据矩阵就是把数据堆叠在一起形成的二维表啦,每一行是一个记录record,每一列是一个属性class, feature, attribute... etc.,可以写作如下形式:
[x11⋯x1n⋮⋮xm1⋯xmn]\begin{bmatrix} x_{11}&\cdots & x_{1n}\\ \vdots & &\vdots \\ x_{m1} & \cdots & x_{mn} \end{bmatrix} ⎣⎢⎡​x11​⋮xm1​​⋯⋯​x1n​⋮xmn​​⎦⎥⎤​
2️⃣ 相异矩阵 Dissimilarity matrix:用于衡量各个数据之间的相异程度,等于1−相似度1-相似度1−相似度,所以元素自己和自己之间的相异度是0啦:
[0⋮0d(n,1)⋯0]\begin{bmatrix} 0& & \\ \vdots &0 & \\ d(n,1) & \cdots & 0 \end{bmatrix} ⎣⎢⎡​0⋮d(n,1)​0⋯​0​⎦⎥⎤​


从上文聚类好坏的讨论中,我们提到不同数据之间的相似性需要采用不同的距离度量方式,在聚类分析中,常见的数据源大致可分为六种:

类型 解释
Interval-scaled variables 数值变量
Binary variables 二值数据
Nominal variables 名义数据
Ordinal variables 顺序数据
Ration-scaled variables 比率尺度数据
Variables of mixed type 混合数据

1️⃣ 数值变量

我们对这类数据的处理是需要先进行标准化将其进行区间缩放的,标准化方法称为z得分(z-score)法:
zif=xif−mfsfz_{if}=\frac{x_{if}-m_f}{s_f} zif​=sf​xif​−mf​​
其中,
mf=x1f+x2f+...+xnfnm_f=\frac{x_{1f}+x_{2f}+...+x_{nf}}{n} mf​=nx1f​+x2f​+...+xnf​​
也就是数据集中fff属性的平均值;
sf=∑∣xif−mf∣ns_f=\frac{\sum|x_{if}-m_f|}{n} sf​=n∑∣xif​−mf​∣​
也就是采用绝对值替代开平方算法的标准差,z-score与标准差标准化的区别就在于使用了绝对值。使用平均绝对偏差,要比使用标准差更加稳健。

Using mean absolute deviation is more robust than using standard deviation.

好啦,标准化完后,我们就可以用距离度量公式计算相似性啦,距离度量公式有很多,例如欧氏距离、马氏距离、切比雪夫距离、曼哈顿距离、闵可夫斯基距离、汉明距离、余弦距离等等,这里我们介绍闵可夫斯基距离。
d(i,j)=q∑∣xin−xjn∣d(i,j)=^q\sqrt{\sum{|x_{in}-x_{jn}|}} d(i,j)=q∑∣xin​−xjn​∣​
当qqq取1,就成了曼哈顿距离,当qqq取2,就成了欧氏距离。


2️⃣ 二值变量

对于一个二值数据表,我们可以写作:

其中,数据之间的对称性度量表示为:
d(i,j)=b+ca+b+c+dd(i,j)=\frac{b+c}{a+b+c+d} d(i,j)=a+b+c+db+c​
不对称性度量表示为:
d(i,j)=b+ca+b+cd(i,j)=\frac{b+c}{a+b+c} d(i,j)=a+b+cb+c​
在不对称矩阵中,我们需要注意的是后面那个不对称性度量。


3️⃣ 名义数据

这类数据呢,一般来说不具备可比性。比如小明小红小芳,红黄蓝什么的。

目前主流的处理方法有两种:

第一种,简单匹配。
d(i,j)=p−mpd(i,j)=\frac{p-m}{p} d(i,j)=pp−m​
其中,ppp表示总的名义数据数量,mmm表示两个数据匹配到的数据次数。

第二种,构建one-hot编码。

第一种方法常在简单处理中使用,而第二种一般多见于机器学习和深度学习。


4️⃣ 序数数据

这类数据相较于名义数据,虽然还是属于定性数据范畴但是带上了可比性哦。比如:大中小,优良差什么的。

对其的处理分为三步:

第一步,将其按照大小排列,用大小次序代替数据值。
rif∈{1,...,Mf}r_{if}\in\{1,...,M_f\} rif​∈{1,...,Mf​}
第二步,将数据的范围缩放到[0,1][0,1][0,1]区间:
zif=rif−1Mf−1z_{if}=\frac{r_if-1}{M_f-1} zif​=Mf​−1ri​f−1​
第三步,通过数值的方式,对数据的不相似性进行计算。


5️⃣ 比率数据

比率数据是一个非线性的尺度,一般不同比率之间的差距是指数倍的。对其进行的处理分为三步:

首先先取对数,使其区间缩放:
yif=log(xif)y_{if}=log(x_{if}) yif​=log(xif​)
接着,假设他们是一个连续数据,并将他们的秩作为定序数据

最后,在利用处理区间缩放数据的方式对其进行计算。


6️⃣ 混合数据

一种常用的权衡多种属性距离的公式如下所示:
d(i,j)=∑f=1pσij(f)dij(f)∑f=1pσij(f)d(i,j)=\frac{\sum^p_{f=1}\sigma^{(f)}_{ij}d^{(f)}_{ij}}{\sum^p_{f=1}\sigma^{(f)}_{ij}} d(i,j)=∑f=1p​σij(f)​∑f=1p​σij(f)​dij(f)​​
其中,σij(f)\sigma^{(f)}_{ij}σij(f)​是一个二值量,当两个数据同时具有属性列fff时,这个值取到111,否则,在任意数据缺失该属性列,或者当fff是一个非对称属性,且xif=xjf=0x_{if}=x_{jf}=0xif​=xjf​=0时取到000。ddd的计算则是根据属性类型,应用各自的公式。


好了,说完了每种类型以及距离度量后,我们来做个小练习吧!

这样一组数据中,Test-1是分类数据,Test-2是定序数据,Test-3则是比率数据。

我们现在要计算整张表的数据相异度矩阵。

根据混合数据计算公式,我们需要分别对不同种的属性计算距离。

首先是对Test-1的分类数据,我们采用简单匹配规则进行计算,得到的相异矩阵为:
[0101100110]\begin{bmatrix} 0& & & &\\ 1&0&&&\\ 1&1&0&\\ 0&1&1&0 \end{bmatrix} ⎣⎢⎢⎡​0110​011​01​0​⎦⎥⎥⎤​
对于Test-2的定序数据,我们需要先转换成rank值,然后进行区间缩放,最后距离公式进行计算,这里我们选用的是曼哈顿距离

原始数据 Rank值 缩放值
excellent 3 1
fair 1 0
good 2 0.5
excellent 3 1

计算的结果为:

d(1,0) 1
d(2,0) 0.5
d(2,1) 0.5
d(3,0) 0
d(3,1) 1
d(3,2) 0.5

[0100.50.50010.50]\begin{bmatrix} 0& & & &\\ 1&0&&&\\ 0.5&0.5&0&\\ 0&1&0.5&0 \end{bmatrix} ⎣⎢⎢⎡​010.50​00.51​00.5​0​⎦⎥⎥⎤​

对于Test-3,我们先对取对数,然后将对数视作数值型数据进行规范化后,再计算距离。

规范化公式为:
y=x−minmax−miny=\frac{x-min}{max-min} y=max−minx−min​

原始数据 对数 缩放值
445 2.65 0.75
22 1.34 0
164 2.21 0.5
1210 3.08 1

于是T3最终的结果为:
[00.7500.250.500.2510.50]\begin{bmatrix} 0& & & &\\ 0.75&0&&&\\ 0.25&0.5&0&\\ 0.25&1&0.5&0 \end{bmatrix} ⎣⎢⎢⎡​00.750.250.25​00.51​00.5​0​⎦⎥⎥⎤​
综合三个属性列,计算结果为:
d(i,j)=d1(i,j)+d2(i,j)+d3(i,j)3d(i,j)=\frac{d_1(i,j)+d_2(i,j)+d_3(i,j)}{3} d(i,j)=3d1​(i,j)+d2​(i,j)+d3​(i,j)​

[00.75+1+1300.25+0.5+130.5+0.5+1300.25+0+031+1+130.5+0.5+130]=[00.9200.580.6700.0810.670]\begin{bmatrix} 0& & & &\\ \frac{0.75+1+1}{3}&0&&&\\ \frac{0.25+0.5+1}{3}&\frac{0.5+0.5+1}{3}&0&\\ \frac{0.25+0+0}{3}&\frac{1+1+1}{3}&\frac{0.5+0.5+1}{3}&0 \end{bmatrix} \\ =\begin{bmatrix} 0& & & &\\ 0.92&0&&&\\ 0.58&0.67&0&\\ 0.08&1&0.67&0 \end{bmatrix} ⎣⎢⎢⎡​030.75+1+1​30.25+0.5+1​30.25+0+0​​030.5+0.5+1​31+1+1​​030.5+0.5+1​​0​⎦⎥⎥⎤​=⎣⎢⎢⎡​00.920.580.08​00.671​00.67​0​⎦⎥⎥⎤​


三、主要聚类算法的分类

我们终于要进入聚类分析的核心:聚类分析算法啦!

根据算法之间的异同,我们可以将他们分为五大类(没错,这也算是一种聚类)。

1️⃣ 分区方法

  • 构建各种分区,然后通过准则对他们进行评估,例如均方差。
  • 典型方法:k-means, k-medoids, CLARANS

2️⃣ 层次方法

  • 使用某些准则创建数据的层次分解
  • 典型方法:Diana, Agnes, BIRCH, ROCK, CHAMELEON

3️⃣ 基于密度的方法

  • 基于连通性和密度函数
  • 典型方法:DBSACN, OPTICS, DenClue

4️⃣ 基于格网的方法

  • 基于多粒度的结构
  • 典型方法:STING, WaveCluster, CLIQUE

5️⃣ 基于概率统计学模型

  • 典型方法:EM

四、分区方法 Partitioning Methods

基本概念

将有n个对象的数据库D按照规则(如最小平方和)划分成k个簇。

经典算法

1️⃣ K-Means聚类

  • 初始化:给定k个随机初始化的中心点
  • 迭代:计算每个簇当前的质心
  • 计算每个点到点前簇中心的距离,并将他们分配进最近的簇

时间复杂度:O(tkn)O(tkn)O(tkn),nnn是对象个数,kkk是簇个数,ttt是迭代次数。

通常条件下会止于全局最优解。

缺点

  • 不适用于分类数据(只能计算数值)
  • 需要指定聚类簇的个数
  • 无法处理有噪声的情况和异常值
  • 不适合发现非凸型的簇

变化

【数据挖掘】聚类分析相关推荐

  1. 数据挖掘-聚类分析(Python实现K-Means算法)

    概念: 聚类分析(cluster analysis ):是一组将研究对象分为相对同质的群组(clusters)的统计分析技术.聚类分析也叫分类分析,或者数值分类.聚类的输入是一组未被标记的样本,聚类根 ...

  2. 数据挖掘——聚类分析

    1.K-Means聚类(划分聚类) 算法步骤:    (1) 首先我们选择一些类/组,并随机初始化它们各自的中心点.中心点是与每个数据点向量长度相同的位置.这需要我们提前预         知类的数量 ...

  3. 转:UCI数据集和源代码数据挖掘的数据集资源

    <UCI数据集和源代码> UCI数据集是一个常用的标准测试数据集,下载地址在 http://www.ics.uci.edu/~mlearn/MLRepository.html 我的主页上也 ...

  4. python聚类分析如何确定分类个数_Python数据挖掘—聚类—KMeans划分法

    概念 聚类分析:是按照个体的特征将它们分类,让同一个类别内的个体之间具有较高的相似度,不同类别之间具有较大差异性 无分类目标变量(Y)--无监督学习 K-Means划分法.DBSCAN密度法.层次聚类 ...

  5. 【数据挖掘笔记十】聚类分析:基本概念和方法

    1) 10.聚类分析:基本概念和方法 聚类是一个把数据对象集划分成多个组或簇的过程,使得簇内的对象具有很高的相似性,但与其他簇中的对象很不相似.相异性和相似性根据描述对象的属性值评估,涉及到距离度量. ...

  6. 数据挖掘时功能和一个聚类分析应用案例

    数据挖掘时功能和一个聚类分析应用案例 数据挖掘的常用方法和数据挖掘的重要功能(出自MBA智库百科).当然,横看成岭侧成峰,这些常用方法和重要功能也许并不完全正确或完整.除此以外,笔者尝试学习了SMAR ...

  7. 数据挖掘的常用方法、功能和一个聚类分析应用案例

    在今天的博文中,笔者整理了数据挖掘的常用方法和数据挖掘的重要功能(出自MBA智库百科).当然,横看成岭侧成峰,这些常用方法和重要功能也许并不完全正确或完整.除此以外,笔者尝试学习了SMARTBI公司中 ...

  8. 数据挖掘学习——聚类分析(k-均值聚类、DBSCAN、AGNES)、python代码

    目录 1.概论 2.聚类问题 (1)聚类问题的定义 (2)聚类的依据(距离的定义) 3.基于原型的聚类方法(k-均值聚类) (1)k-均值聚类的基本思想和基本步骤 (2)k-均值聚类的特点 4.基于密 ...

  9. 数据挖掘之聚类分析(Cluster Analysis)

    1.Motivations(目的) Identify grouping structure of data so that objects within the same group are clos ...

最新文章

  1. python 把字母转数字
  2. webpack 环境安装
  3. 华为手机鸿蒙2.0系统界面,华为鸿蒙2.0系统
  4. mysql数据库且字 语句是什么,MySQL(数据库)基本操作
  5. bazel 链接第三方动态库_惠州权威信息系统安全检测第三方
  6. 一些与HTML相关名词的简介
  7. 数据库-MySQL-JDBC-execute、executeUpdate、executeQuery
  8. SQLSERVER使用密码加密备份文件以防止未经授权还原数据库
  9. Ant + Jenkies +Tomcat 自动构建部署Web项目
  10. golang protobuf 动态消息获取_干货|Golang拦截器的一种实现
  11. 基于etcd+confd通过nginx对docker服务混合注册发现详解
  12. java写入txt文件_java实现写入并保存txt文件的代码详解
  13. js调用原生android应用的方法
  14. hdf5 目录没有serial_hdf5
  15. 网易前端微专业课程讨论区问答精选
  16. 数据结构C语言 胡学钢 PDF,数据结构(C语言版) 胡学钢.ppt
  17. Mybatis学习笔记5——多对一处理、一对多处理
  18. python通过网络发送图片_python 打开网络图片
  19. 百天记忆-数字编码记忆
  20. 《网页制作与网站建设从入门到精通》版权

热门文章

  1. SPA(单页面应用)
  2. 畅想未来计算机英语作文带翻译,“未来畅想”英语作文带翻译
  3. 系统分析师易错题整理
  4. 【python二级-练习题】
  5. 背书吧 2021.1.10日记
  6. python中description_python中cursor.description什么意思
  7. Java程序为身份证照片添加马赛克
  8. 怎么退出自适应巡航_你的自适应巡航“全速”了吗?
  9. VUE3中 v-for指令用法,列表循环
  10. 支付宝开放平台入驻流程及失败解决