【数据挖掘】聚类分析
聚类分析 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=sfxif−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−1rif−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} ⎣⎢⎢⎡0110011010⎦⎥⎥⎤
对于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.5000.5100.50⎦⎥⎥⎤
对于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.2500.5100.50⎦⎥⎥⎤
综合三个属性列,计算结果为:
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+130.25+0.5+130.25+0+0030.5+0.5+131+1+1030.5+0.5+10⎦⎥⎥⎤=⎣⎢⎢⎡00.920.580.0800.67100.670⎦⎥⎥⎤
三、主要聚类算法的分类
我们终于要进入聚类分析的核心:聚类分析算法啦!
根据算法之间的异同,我们可以将他们分为五大类(没错,这也算是一种聚类)。
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是迭代次数。
通常条件下会止于全局最优解。
缺点:
- 不适用于分类数据(只能计算数值)
- 需要指定聚类簇的个数
- 无法处理有噪声的情况和异常值
- 不适合发现非凸型的簇
变化
【数据挖掘】聚类分析相关推荐
- 数据挖掘-聚类分析(Python实现K-Means算法)
概念: 聚类分析(cluster analysis ):是一组将研究对象分为相对同质的群组(clusters)的统计分析技术.聚类分析也叫分类分析,或者数值分类.聚类的输入是一组未被标记的样本,聚类根 ...
- 数据挖掘——聚类分析
1.K-Means聚类(划分聚类) 算法步骤: (1) 首先我们选择一些类/组,并随机初始化它们各自的中心点.中心点是与每个数据点向量长度相同的位置.这需要我们提前预 知类的数量 ...
- 转:UCI数据集和源代码数据挖掘的数据集资源
<UCI数据集和源代码> UCI数据集是一个常用的标准测试数据集,下载地址在 http://www.ics.uci.edu/~mlearn/MLRepository.html 我的主页上也 ...
- python聚类分析如何确定分类个数_Python数据挖掘—聚类—KMeans划分法
概念 聚类分析:是按照个体的特征将它们分类,让同一个类别内的个体之间具有较高的相似度,不同类别之间具有较大差异性 无分类目标变量(Y)--无监督学习 K-Means划分法.DBSCAN密度法.层次聚类 ...
- 【数据挖掘笔记十】聚类分析:基本概念和方法
1) 10.聚类分析:基本概念和方法 聚类是一个把数据对象集划分成多个组或簇的过程,使得簇内的对象具有很高的相似性,但与其他簇中的对象很不相似.相异性和相似性根据描述对象的属性值评估,涉及到距离度量. ...
- 数据挖掘时功能和一个聚类分析应用案例
数据挖掘时功能和一个聚类分析应用案例 数据挖掘的常用方法和数据挖掘的重要功能(出自MBA智库百科).当然,横看成岭侧成峰,这些常用方法和重要功能也许并不完全正确或完整.除此以外,笔者尝试学习了SMAR ...
- 数据挖掘的常用方法、功能和一个聚类分析应用案例
在今天的博文中,笔者整理了数据挖掘的常用方法和数据挖掘的重要功能(出自MBA智库百科).当然,横看成岭侧成峰,这些常用方法和重要功能也许并不完全正确或完整.除此以外,笔者尝试学习了SMARTBI公司中 ...
- 数据挖掘学习——聚类分析(k-均值聚类、DBSCAN、AGNES)、python代码
目录 1.概论 2.聚类问题 (1)聚类问题的定义 (2)聚类的依据(距离的定义) 3.基于原型的聚类方法(k-均值聚类) (1)k-均值聚类的基本思想和基本步骤 (2)k-均值聚类的特点 4.基于密 ...
- 数据挖掘之聚类分析(Cluster Analysis)
1.Motivations(目的) Identify grouping structure of data so that objects within the same group are clos ...
最新文章
- python 把字母转数字
- webpack 环境安装
- 华为手机鸿蒙2.0系统界面,华为鸿蒙2.0系统
- mysql数据库且字 语句是什么,MySQL(数据库)基本操作
- bazel 链接第三方动态库_惠州权威信息系统安全检测第三方
- 一些与HTML相关名词的简介
- 数据库-MySQL-JDBC-execute、executeUpdate、executeQuery
- SQLSERVER使用密码加密备份文件以防止未经授权还原数据库
- Ant + Jenkies +Tomcat 自动构建部署Web项目
- golang protobuf 动态消息获取_干货|Golang拦截器的一种实现
- 基于etcd+confd通过nginx对docker服务混合注册发现详解
- java写入txt文件_java实现写入并保存txt文件的代码详解
- js调用原生android应用的方法
- hdf5 目录没有serial_hdf5
- 网易前端微专业课程讨论区问答精选
- 数据结构C语言 胡学钢 PDF,数据结构(C语言版) 胡学钢.ppt
- Mybatis学习笔记5——多对一处理、一对多处理
- python通过网络发送图片_python 打开网络图片
- 百天记忆-数字编码记忆
- 《网页制作与网站建设从入门到精通》版权