机器学习——分级聚类法介绍及其Python实现
目录
- 聚类分析概念
- 1.1 为什么聚类
- 1.2 聚类到底是什么
- 1.3 聚类与分类区别
- 1.4 相似性与距离聚类
- 1.5 相似性的测度
- 特征相似度测度与聚类准则
- 2.1 特征相似度测度
- 2.2 聚类准则
- 分级聚类法
聚类分析概念
1.1 为什么聚类
之所以要聚类,是因为当今的数据量剧增(数据爆炸),导致我们检索信息时成本增加。如果可以找到一种计数可以自动分析数据,那么将有效节约资源。
1.2 聚类到底是什么
聚类定义:给定一组无标签样本,按照各样本间的相似度,相似的归为一类,不相似的归为另一类,这种方法称为聚类。
无标签样本:即事先并不知道该样本的类别的样本,与之相对应的是有标签样本(有标签样本中称为分类)。
例如,此时有来自全球的100人,要求按照其人种对其进行聚类或分类。
当我们知道这一百人每一个人的来历时,对其进行上述操作就称为分类,每一个人的人种我们都清晰可知,我们将每一个样本及其标签告诉机器,机器就会训练出相应的分类器,此时的样本集也称为训练集。
当我们用上述100人训练出一个分类器后,接下来我们希望考察它的泛化能力(即应用能力),故我们再随机抽取100人,此时虽然我们仍然明确地知道这100人的来历,但这一次我们并不告诉机器他们的来历(标签),而只输入相应的样本信息,这就是无监督聚类(学习)。机器根据之前在训练集中训练出的分类器对新的样本进行聚类,当输出结果后,我们可以将输出结果和真实情况进行对比,从而检验训练效果,故此时的样本集也称为检验集。
1.3 聚类与分类区别
类别 | 分类 | 聚类 |
---|---|---|
样本情况 | 有标签 | 无标签 |
所属大类 | 监督学习 | 非监督学习 |
目的 | 寻找数据边界 | 寻找数据结构 |
分类(有监督)与聚类(无监督)的区别大致如上表所示。
1.4 相似性与距离聚类
相似性:模式之间有一定的相似性。
对于初学者来说,这个概念较为抽象,下面对于此概念做以简单的解析:
模式:模式可以理解为每一个观测样本。例如,考察某学校学生的平均身高,采用抽样的方法抽查500名同学的身高。这500名同学就是500种模式。
特征:我们要考察的对象’身高‘就是模式的特征,在机器学习与模式识别中,常把模式的特征映射到向量空间中去表达,故特征常被称作’特征向量‘。
特征空间:如上所说,研究模式的特征时,常把特征映射到向量空间中去。而整个模式样本集合的特征向量可以看作某个向量空间中的一些点,这个向量空间就被称为特征空间。
距离聚类:以特征空间中点之间的距离作为聚类依据的聚类方法叫做距离聚类。
1.5 相似性的测度
相似性测量依据:将样本的特征映射到特征空间中得到特征向量,特征向量可以看作特征空间中的一些点,点与点之间的距离则作为相似性的测度。
根据相似性的测度方法,我们可以知道其本质是计算特征向量距离,而选取特征向量则自然牵扯到了维数的问题(即选取多少个特征,选取什么特征等等),下面我们对于此问题做以简要说明:
1.聚类分析有效性的关键在于特征的选取,特征的选取应遵循以下规则:
可分性好:同一群样本密集,不同群的样本尽可能远。
2.特征向量分量个数(维数)并不是越多越好。我们对于样本特征的选取,常常取决于我们的分类目的。对于样本特征过多地关注往往会造成聚类的错误以及计算量的负担。比如,我们现在获得10个水果,要求按照颜色对其进行聚类。我们的分类目的是将其颜色分开,如若我们关注不必要的特征。例如‘形状’,则可以会犯将橘子和西瓜分为一类的荒谬错误。
3.特征表示时要注意量纲一致。
特征相似度测度与聚类准则
2.1 特征相似度测度
前面以及提到相似性的测度是特征空间中点与点之间的距离,而距离有很多表述方法,下面介绍几种常见的距离测度:
(a) 欧氏距离
设X=(x1,x2,.......,xn)TX=(x_{1},x_{2},.......,x_{n})^{T}X=(x1,x2,.......,xn)T,Y=(y1,y2,.......,yn)TY=(y_{1},y_{2},.......,y_{n})^{T}Y=(y1,y2,.......,yn)T
在X,Y量纲一致的前提下,有:
d(x,y)=(X−Y)(X−Y)T2=∑t=1n(xi−yi)22d(x,y)=\sqrt[2]{(X-Y)(X-Y)^{T}}=\sqrt[2]{\displaystyle\sum_{t=1}^{n}(x_i-y_i)^{2}}d(x,y)=2(X−Y)(X−Y)T=2t=1∑n(xi−yi)2
即为样本间对应特征的欧式距离
(b) 马氏距离
马氏距离定义如下:
d=(x−y)T∑−1(x−y)2d=\sqrt[2]{(x-y)^ {T} \sum^{-1} (x-y)}d=2(x−y)T∑−1(x−y)
其中∑\sum∑为协方差矩阵
对于马氏距离,我们做以下几点说明:
1.马氏距离则不要求数据量纲一致,也就是说,马氏距离与原始数据的测量单位无关(因为单位已经被协方差矩阵消掉)。此性质相对于欧氏距离为我们提供了很大的便捷。实际上,我们的数据来源非常广泛,而每个人的测量习惯不同,导致其使用的测量单位也往往不一样。而马氏距离的构造很好地冲消了这一点的影响。
2.马氏距离削弱了相关性过强的变量的影响,在欧式距离中,如果某两个变量相关性过强,则会造成巨大的影响,这就屏蔽了其它变量的影响,容易对我们造成误导。而马氏距离则不然,对于相关性强的变量,协方差矩阵中对其协方差取倒数,一定程度上削弱了过强的影响,也可以让我们更加全面地去考察样本间的相关性。
3.当马氏距离中的协方差矩阵为单位阵时,其等于欧氏距离。
(c) 明氏距离
明氏距离定义如下:
Dm(xi,yi)=(∑k∣xik−xjk∣m)1/mD_m(x_{i},y_{i})=(\displaystyle\sum_{k}|x_{ik}-x_{jk}|^{m})^{1/m}Dm(xi,yi)=(k∑∣xik−xjk∣m)1/m
其中,xik,xjkx_{ik},x_{jk}xik,xjk为第i个样本和第j的样本的第k个分量。
当m=2时,此时的明氏距离就是欧氏距离。
当m=1时,此时的马氏距离就是街坊距离(city block)。
(d) 角度相似性函数
角度相似性函数定义如下:
S(x,z)=xtz∣∣x∣∣∣∣z∣∣S(x,z)=\frac{x^{t}z}{||x|| ||z||}S(x,z)=∣∣x∣∣∣∣z∣∣xtz
可以看到,上述公式事实上就是反应模式向量x,z间夹角的余弦值。表征的更多是模式间方向的相似性。关于余弦相似度的详解,读者可以查看我的另一个博客“机器学习——余弦相似度”。
(e)Tanimoto测度
定义如下:
S(x,z)=xtzxtx+ztz−xtzS(x,z)=\frac{x^{t}z}{ x ^{t}x+z ^{t}z-x ^{t}z}S(x,z)=xtx+ztz−xtzxtz
也就是表示了x,z中共有的特征数目占两者一共的特征数目百分比。
与前不同,x,z用二分量表示。0表示不具有某种特征,1表示具有某种特征。
2.2 聚类准则
1.试探方法
经验,直观,但也易出错。
2.聚类准则法
由于聚类是将样本进行分类以使类别间可分离性为最大,因此聚类准则应是反映类别间相似性或分离性的函数。而类别又由一个个样本组成,故类别间相似性和样本的相似性及可分离性息息相关。故可以考虑定义一个函数,其以模式样本集{x}和模式类别S为自变量,从而将问题转换为求解函数的最优化问题。此函数则称为聚类准则函数,表达式如下:
J=∑i=1c∑x∈S∣∣x−mj∣∣2J=\displaystyle\sum_{i=1}^{c}\displaystyle\sum_{x\in S}||x-m_{j}|| ^{2}J=i=1∑cx∈S∑∣∣x−mj∣∣2
其中,{x}为模式样本集
SjS_jSj为模式类别
mjm_jmj为样本均值向量
分级聚类法
分级聚类法基本思路:根据类内或类间的相似度测量,依次分类。
其算法步骤大致如下:
简单说明:其中k为初始类数,假设初始有n个样本,则尚未开始聚类前每一个样本都是一个类别,故第一步有k=n(n为样本数)。而后通过计算类间距离,将类间距离最小的两个类合并为一个类,如此迭代,直至满足停止条件。
上述说明自然地引出了两个问题:如何度量距离?如何判定是否满足停止条件?下面我们逐一进行说明。
1.如何度量距离
对于距离,我们看到,在此算法中既有类内诸多样本点间的距离,也有各类间的类间距离。
a) 类内距离(样本间距离)
类内距离的度量在全面我们已经提到,即相似性测度里的几种距离测度,而具体选用哪种测度,须依据实际情况而定。
b)类间距离
类间距离的测量标准常有以下三种:
1.最近领域法则
即选取两类间距离最近的样本作为两类的距离,公式表达为:
dmin(Ci,Cj)=minx∈Cj,x′∈Cjd(x,x′)d_{min}(C_{i},C_{j})=\displaystyle\min_{x\in C_{j},x^{'}\in C_{j}}d(x,x^{'})dmin(Ci,Cj)=x∈Cj,x′∈Cjmind(x,x′)
采用最近领域法则一个很明显的缺点就是对于噪声过于敏感。
2.最远领域法则
与最近领域法则恰好相反,最远领域法则选取两类间距离最远的样本作为两类的距离,公式表达为:
dmax(Ci,Cj)=maxx∈Cj,x′∈Cjd(x,x′)d_{max}(C_{i},C_{j})=\displaystyle\max_{x\in C_{j},x^{'}\in C_{j}}d(x,x^{'})dmax(Ci,Cj)=x∈Cj,x′∈Cjmaxd(x,x′)
3.平均领域法则
平均领域法则即计算两类间样本的平均距离作为类间距离,公式表达为:
davg(Ci,Cj)=1NiNj∑x∈Ci∑x′∈Cjd(x,x′)d_{avg}(C_{i},C_{j})=\frac{1}{N_{i}N_{j}}\displaystyle\sum_{x\in C_{i}}\sum_{x^{'}\in C_{j}}d(x,x^{'})davg(Ci,Cj)=NiNj1x∈Ci∑x′∈Cj∑d(x,x′)
平均领域法则由于计算了多个样本间距离的平均值,故其容错性较好,对于噪声的抵抗能力较强。但计算量相对前两者有了明显的增加。
我们该如何选择类间距离测度?
这取决于我们对于数据的了解程度,如果我们实现知道数据的可分性非常好并且类内样本分布紧凑,那么不论是哪种方法都可以得到不错的分类结果。如果我们样本的可分性较差,类间距离较小,那么通常采用平均领域法则。
2.如何判定是否满足停止条件
停止条件可以有很多种形式,满足其中一种形式即可停止聚类,下面给出常见的几种停止条件:
a) 给定聚类数k,即希望最后聚为k类。
b) 给定最大允许的类间距离门限。即若
mind(Ci,Cj)≥Tmin\ d(C_{i},C_{j})\geq{T}min d(Ci,Cj)≥T ,则停止聚类。
这种思想很好理解,当类间距离过大时,有可能出现了将两类聚为了一类的情况。
c)当上一次聚类与这一次聚类的类间距离变化很大,即类间距离剧增时,停止聚类,此时表明有可能将原本的两类聚为了一类。
对分级聚类法的基础知识有一定了解后,接下来我们给出算法的实现(基于Python):
def hcluster(rows,distance=pearson):distances={}currentclustid=-1# Clusters are initially just the rowsclust=[bicluster(rows[i],id=i) for i in range(len(rows))]while len(clust)>1:lowestpair=(0,1)closest=distance(clust[0].vec,clust[1].vec)print "closest",closest# loop through every pair looking for the smallest distancefor i in range(len(clust)):for j in range(i+1,len(clust)):# distances is the cache of distance calculationsif (clust[i].id,clust[j].id) not in distances: distances[(clust[i].id,clust[j].id)]=distance(clust[i].vec,clust[j].vec)d=distances[(clust[i].id,clust[j].id)]if d<closest:closest=dlowestpair=(i,j)# calculate the average of the two clustersmergevec=[(clust[lowestpair[0]].vec[i]+clust[lowestpair[1]].vec[i])/2.0 for i in range(len(clust[0].vec))]# create the new clusternewcluster=bicluster(mergevec,left=clust[lowestpair[0]],right=clust[lowestpair[1]],distance=closest,id=currentclustid)# cluster ids that weren't in the original set are negativecurrentclustid-=1del clust[lowestpair[1]]del clust[lowestpair[0]]clust.append(newcluster)return clust[0]
机器学习——分级聚类法介绍及其Python实现相关推荐
- 机器学习 | 早期停止法原理及Python实现
文章目录 1. 早期停止法 1.1 Python 实现 参考文献 相关文章: 机器学习 | 目录 机器学习 | 梯度下降原理及Python实现 1. 早期停止法 对于梯度下降这一类迭代学习的算法,还有 ...
- python打字_盲法介绍及python盲打练习系统
目录 一:盲打简介与优点 二:如何练习 三:键盘字母排列顺序的口诀 四:python打字练习系统 一:盲打简介与优点 ??简介:盲打是指打字的时候不用看键盘或看稿打字时的视线不用来回于文稿和键盘之间的 ...
- python双手打字_盲法介绍及python盲打练习系统
一:盲打简介与优点 简介:盲打是指打字的时候不用看键盘或看稿打字时的视线不用来回于文稿和键盘之间的行为,盲打可使输入的速度增加.盲打要求打字的人对于键盘有很好的定位能力. 优点:通过练习盲打来提高打字 ...
- 机器学习之聚类学习笔记-利用python的sklearn实现
学习来源 sklearn中文文档 聚类算法练习 python代码实现K-means算法 Python数模笔记-Sklearn(2)聚类分析 均值偏移聚类 K-means聚类算法 该算法可分为三个步骤. ...
- 机器学习——聚类——密度聚类法——DBSCAN
目录 理论部分 1.1 提出背景 1.2 常见算法 1.3 DBSCAN算法 1.3.1 基本概念 1.3.2 算法流程 1.3.3 参数设置 1.3.3 优点 1.3.4 缺点 1.3.5 可视化结 ...
- 【机器学习基础】数学推导+纯Python实现机器学习算法23:kmeans聚类
Python机器学习算法实现 Author:louwill Machine Learning Lab 聚类分析(Cluster Analysis)是一类经典的无监督学习算法.在给定样本的情况下,聚类分 ...
- 机器学习特征工程之连续变量离散化:聚类法进行分箱
机器学习特征工程之连续变量离散化:聚类法进行分箱 离散化,就是把无限空间中有限的个体映射到有限的空间中: 根据用户的听音乐的数据来预测哪些歌曲更受欢迎. 假设大部分人听歌都很平均,会不停的听新的歌曲, ...
- python机器学习可视化工具Yellowbrick介绍及平行坐标图实战示例
python机器学习可视化工具Yellowbrick介绍及平行坐标图实战示例 目录 python机器学习可视化工具Yellowbrick介绍及平行坐标图实战示例 yellowbrick简介及安装
- 电气:蒙特卡洛1000个风光场景并通过削减法|聚类法得到几个典型场景(matlab\python实现)
个人电气目录传送门:学好电气全靠它,个人电气博文目录(持续更新中-) 本文内容包括22页(代码和一些自己对风光的观点) 提示:专栏解锁后,可以查看该专栏所有文章,划算. 文章目录 一.理论依据 ...
最新文章
- OpenMPI 安装
- python调用perl_在Perl、Shell和Python中传参与输出帮助文档
- SpringBoot与MyBatis技术集成
- Linux 系统创建.sh文件以及赋权、执行
- 全局路径规划:图搜索算法介绍3(A stars tie breaker)
- .interface文件怎么看啊_【干货】Java关键字合集,看这篇就够了!
- http 请求头回显
- linux桌面系统下的国密SM4算法工具
- JS核心之封装继承多态(一)
- 普通java类注入dao失败_spring mvc 整合mybatis dao接口注入失败
- Ubuntu开机加速
- MeGUI中文版x64版本使用说明
- Unity2d 学习笔记(四)碰撞检测
- 常用算法设计技术总结
- date.gettime()返回的是什么?
- 手写springboot自动装配 autoConfiguration
- 电信光猫天翼网关usb插U盘共享文件
- 华为2019年第一季度业绩曝光;联想and谷歌加入英特尔新晋云计划;即特斯拉起火,蔚来ES8也维修起了火...
- 《Android源代码设计模式解析与实战》读书笔记(十四)
- idea上一步失效:Ctrl+Alt+左箭头 Ctrl+Alt+右箭头
热门文章
- 中文域名都有哪些类型?
- 苹果iOS开发系列--详解Swift 3.0语言的重大变化
- 千人千面工作台,轻松定制你的移动业务场景
- 计算机网络网络命令的使用,计算机网络工程网络命令的运用
- 网络安全笔记——第八天:虚拟机配置静态IP地址
- Springboot美食视频网站69r13计算机毕业设计-课程设计-期末作业-毕设程序代做
- nc 探测端口_使用 nc 命令检查远程端口是否打开
- java计算机毕业设计高校公共资源管理MyBatis+系统+LW文档+源码+调试部署
- 实验4·使用HBase Shell完成《王者荣耀》玩家信息管理
- 【电脑卡慢】win10 TiWorker.exe进程持续占用CPU过高