One PUNCH Man——聚类
文章目录
- 聚类介绍
- 性能度量
- 距离计算
- k-means
- 学习向量量化
- 高斯混合聚类
- DBSCAN密度聚类
- 层次聚类
聚类介绍
在"无监督学习" (unsupervised learning) 中,训练样本的标记信息是未知的。目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础。此类学习任务中研究最多、应用最广的是"聚类" (clustering).
性能度量
暂不介绍,概念太多,比较简单。和变量显著性检验有写类似。
距离计算
给定样本x=(x1,x2,...,xn)x=(x_1,x_2,...,x_n)x=(x1,x2,...,xn)和样本y=(y1,y2,...,yn)y=(y_1,y_2,...,y_n)y=(y1,y2,...,yn),最常用的闵可夫斯基距离公式如下:
distmk(x,y)=(∑i=1n∣xi−yi∣p)1pdist_{mk}(x,y)=(\sum_{i=1}^{n}|x_i-y_i|^p)^{\frac{1}{p}}distmk(x,y)=(∑i=1n∣xi−yi∣p)p1
当p=2p=2p=2时,该公式变成欧式距离:
disted(x,y)=∑i=1n∣xi−yi∣2dist_{ed}(x,y)=\sqrt{\sum_{i=1}^{n}|x_i-y_i|^2}disted(x,y)=∑i=1n∣xi−yi∣2
当p=1p=1p=1时,该公式又变成曼哈顿距离:
distman(x,y)=∑i=1n∣xi−yi∣dist_{man}(x,y)=\sum_{i=1}^{n}|x_i-y_i|distman(x,y)=∑i=1n∣xi−yi∣
我们常将属性划分为"连续属性" (continuous attribute)和"离散属性" (categorical attribute)。一般来说连续属性,是可以通过其属性值计算距离的,比如1距离2比1距离3近。而离散属性,一般很难直观的看出距离,比如{飞机,轮船,火车},这三者之间的距离就无法在属性值(可能用1,2,3来分别表示)来计算,对无序属性,可以通过VDM来计算,但在这里不做介绍,只提到该概念即可。
k-means
简单说一下k均值算法,很简单。(以下均假设样本是二维的,实际上可能更多维,选取二维样本方便叙述)
输入:
样本集合D={(x1,y1),(x2,y2),....,(xm,ym)}D=\{(x_1,y_1),(x_2,y_2),....,(x_m,y_m)\}D={(x1,y1),(x2,y2),....,(xm,ym)}
聚类簇数:kkk(也就是说样本被分为k个类)
样本距离度量方式
过程:
- 随机选取kkk个样本点,作为初始质心。
- 计算未选中的m−km-km−k个点分别到这kkk个质心的距离,并将其划分到距离最近的簇中。
- 重新计算kkk个簇的新质心,比如求簇的中点。
- 重复上述2和3过程,直到质心变化很小或者不变化。
- 输出kkk个质心。
k=2k=2k=2的一个划分过程如下图所示:
学习向量量化
与k 均值算法类似,“学习向量量化”(LVQ)也是试图找到一组原型向量来刻画聚类结构, 但与一般聚类算法不同的是, LVQ 假设数据样本带有类别标记,学习过程利用样本的这些监督信息来辅助聚类。
输入:
样本集合D={(x1,y1),(x2,y2),....,(xm,ym)}D=\{(x_1,y_1),(x_2,y_2),....,(x_m,y_m)\}D={(x1,y1),(x2,y2),....,(xm,ym)}
原型向量个数qqq,各原型向量预设的类别标记:{t1,t2,...,tq}\{t_1,t_2,...,t_q\}{t1,t2,...,tq}
学习率η\etaη
样本距离度量方式
过程:
- 初始化qqq个原型向量{p1,p2,...,pq}\{p_1,p_2,...,p_q\}{p1,p2,...,pq}
- 计算样本点(xi,yi)(x_i,y_i)(xi,yi)到qqq个原型向量pjp_jpj的距离,取距离最近的原型向量pjp_jpj并与样本点(xi,yi)(x_i,y_i)(xi,yi)做出以下判断:
if:if:if: yi=tjy_i=t_jyi=tj //这里tjt_jtj是pjp_jpj对应的原型向量类别标记
then:then:then: pj=pj+η(xi−pj)p_j=p_j+\eta (x_i-p_j)pj=pj+η(xi−pj)
else:else:else:pj=pj−η(xi−pj)p_j=p_j-\eta (x_i-p_j)pj=pj−η(xi−pj) - 重复上述步骤,直到满足停止条件。
- 输出qqq个原型向量{p1,p2,...,pq}\{p_1,p_2,...,p_q\}{p1,p2,...,pq}
高斯混合聚类
高斯混合聚类采用概率模型来表达聚类原型。有兴趣可以了解以下,在此不做赘述。
DBSCAN密度聚类
DBSCAN是一种基于密度的聚类算法,这类密度聚类算法一般假定类别可以通过样本分布的紧密程度决定。同一类别的样本,他们之间的紧密相连的,也就是说,在该类别任意样本周围不远处一定有同类别的样本存在。
通过将紧密相连的样本划为一类,这样就得到了一个聚类类别。通过将所有各组紧密相连的样本划为各个不同的类别,则我们就得到了最终的所有聚类类别结果。
DBSCAN是基于一组邻域来描述样本集的紧密程度的,参数(ϵ,MinPts)(\epsilon, MinPts)(ϵ,MinPts)用来描述邻域的样本分布紧密程度。其中,ϵ描述了某一样本的邻域距离阈值,MinPts描述了某一样本的距离为ϵ的邻域中样本个数的阈值。
假设我的样本集是D={(x1,y1),(x2,y2),....,(xm,ym)}D=\{(x_1,y_1),(x_2,y_2),....,(x_m,y_m)\}D={(x1,y1),(x2,y2),....,(xm,ym)},则DBSCAN具体的密度描述定义如下:
- ϵ\epsilonϵ-邻域:对于任意样本(xi,yi)(x_i,y_i)(xi,yi),其ϵ\epsilonϵ-邻域包含样本集D中与(xi,yi)(x_i,y_i)(xi,yi)的距离不大于ϵ\epsilonϵ的子样本集,即存在一个区别于(xi,yi)(x_i,y_i)(xi,yi)的样本点(xj,yj)(x_j,y_j)(xj,yj),使得他们之间的距离小于ϵ\epsilonϵ,记为:Nϵ((xj,yj))={xi∈D∣distance((xi,yi),(xj,yj))≤ϵ}N_{\epsilon}((x_j,y_j))=\{x_i∈D|distance ((x_i,y_i),(x_j,y_j))≤ \epsilon\}Nϵ((xj,yj))={xi∈D∣distance((xi,yi),(xj,yj))≤ϵ},其满足该条件的样本个数为Nϵ((xj,yj))N_{\epsilon}((x_j,y_j))Nϵ((xj,yj))
- 核心对象:对于任一样本(xj,yj)∈D(x_j,y_j)∈D(xj,yj)∈D,如果其ϵ-邻域对应的Nϵ((xj,yj))N_{\epsilon}((x_j,y_j))Nϵ((xj,yj))至少包含MinPtsMinPtsMinPts个样本,即如果∣Nϵ((xj,yj))∣≥MinPts|N_{\epsilon}((x_j,y_j))|≥MinPts∣Nϵ((xj,yj))∣≥MinPts,则(xj,yj)(x_j,y_j)(xj,yj)是核心对象。
- 密度直达:如果(xj,yj)(x_j,y_j)(xj,yj)位于(xi,yi)(x_i,y_i)(xi,yi)的ϵ-邻域中,且(xi,yi)(x_i,y_i)(xi,yi)是核心对象,则称(xj,yj)(x_j,y_j)(xj,yj)由(xi,yi)(x_i,y_i)(xi,yi)密度直达。注意反之不一定成立,除非且(xj,yj)(x_j,y_j)(xj,yj)也是核心对象。
- 密度可达:如果(xj,yj)(x_j,y_j)(xj,yj)位于(xi,yi)(x_i,y_i)(xi,yi)的ϵ-邻域中,如果(xk,yk)(x_k,y_k)(xk,yk)位于(xj,yj)(x_j,y_j)(xj,yj)的ϵ-邻域中,且个样本点(xj,yj)(x_j,y_j)(xj,yj)和(xi,yi)(x_i,y_i)(xi,yi)都是核心对象(最后一个样本点不用是核心对象),则称(xk,yk)(x_k,y_k)(xk,yk)对(xi,yi)(x_i,y_i)(xi,yi)密度可达。同样密度可达也不是对称的,反之可能不成立。
- 密度相连,如果(xj,yj)(x_j,y_j)(xj,yj)对于(xi,yi)(x_i,y_i)(xi,yi)密度可达,如果(xk,yk)(x_k,y_k)(xk,yk)对于(xi,yi)(x_i,y_i)(xi,yi)密度可达,且(xi,yi)(x_i,y_i)(xi,yi)是核心对象,则称(xj,yj)(x_j,y_j)(xj,yj)和(xk,yk)(x_k,y_k)(xk,yk)密度相连,这可以是对称的。
DBSCAN的聚类定义很简单:由密度可达关系导出的最大密度相连的样本集合,即为我们最终聚类的一个类别,或者说一个簇。
输入:
样本集合D={(x1,y1),(x2,y2),....,(xm,ym)}D=\{(x_1,y_1),(x_2,y_2),....,(x_m,y_m)\}D={(x1,y1),(x2,y2),....,(xm,ym)}
邻域参数(ϵ,MinPts)(\epsilon,MinPts)(ϵ,MinPts)
样本距离度量方式
过程:
- 对于每一个样本点,找到其所有的核心对象,把所有核心对象的集合称为Ω\OmegaΩ。
- 随机选取Ω\OmegaΩ里的一个核心对象(xi,yi)(x_i,y_i)(xi,yi),加入到簇CiC_iCi中。
- 找到簇CiC_iCi未使用过的核心对象,找到其领域内的其他样本(xj,yj)(x_j,y_j)(xj,yj),如果有样本是核心样本,则把Ω\OmegaΩ里的该样本去掉(xj,yj)(x_j,y_j)(xj,yj)。把样本(xj,yj)(x_j,y_j)(xj,yj)加入到该簇CiC_iCi中。
- 重复步骤3直到簇CiC_iCi里没有未使用过的核心对象。
- 重复步骤234,直到核心对象集合为空。
- 输出得到的簇{C1,C2,....}\{C_1,C_2,....\}{C1,C2,....} (未包括在簇里的点就是噪声点)
层次聚类
AGNES 是一种采用自底向上聚合策略的层次聚类算法.它先将数据集中的每个样本看作一个初始聚类簇,然后在算法运行的每一步中找出距离最近的两个粟类簇进行合并,该过程不断重复,直至达到预设的聚类簇个数。这里的关键是如何计算聚类簇之间的距离。每个簇是一个样本集合,因此,只需采用关于集合的某种距离即可。
下面介绍一下豪斯多夫距离:
- 最小距离: 取两个簇最近的两个向量计算其距离。
- 最大距离:取两个簇最远的两个向量计算其距离。
- 平均距离:取两个簇所有向量之间的距离,计算其平均值。
输入:
假设样本集合D={x1,x2,....,xm}D=\{x_1,x_2,....,x_m\}D={x1,x2,....,xm},其中xxx都是向量表示。
聚类簇数kkk。
距离度量函数。
过程:
- 把每个样本定义为一个簇,最终有m个簇。
- 计算每个簇之间的距离,找出距离最短的那两个簇,合并为一个簇。
- 重复上述步骤2的过程,直到簇的数量为k。
如果k=1,计算步骤如下图所示:
One PUNCH Man——聚类相关推荐
- Python机器学习——Agglomerative层次聚类
层次聚类(hierarchical clustering)可在不同层次上对数据集进行划分,形成树状的聚类结构.AggregativeClustering是一种常用的层次聚类算法. 其原理是:最初 ...
- Python机器学习——DBSCAN聚类
密度聚类(Density-based Clustering)假设聚类结构能够通过样本分布的紧密程度来确定.DBSCAN是常用的密度聚类算法,它通过一组邻域参数(ϵϵ,MinPtsMinPts)来描述样 ...
- 聚类和EM算法——K均值聚类
20211116 数据分析 | 聚类分析--kmean kmeans最优k值的确定方法-手肘法和轮廓系数法 - 简书 python大战机器学习--聚类和EM算法 注:本文中涉及到的公式一律省略(公式不 ...
- 聚类Clustering
聚类Clustering This page describes clustering algorithms in MLlib. The guide for clustering in the RDD ...
- 最小化局部边际的合并聚类算法(中篇)
作者:钱烽 三.合并聚类算法 基于定义2所提出的相似度定义,我们在图2中给出最小化局部边际的合并聚类算法详细执行过程.首先,针对数据集中可能存在的噪声数据,我们对所有样本点进行孤立点检测.然后,作为A ...
- matlab编程实现基于密度的聚类(DBSCAN)
1. DBSCAN聚类的基本原理 详细原理可以参考链接: https://www.cnblogs.com/pinard/p/6208966.html 这是找到的相对很详细的介绍了,此链接基本仍是周志华 ...
- matlab编程实现k_means聚类(k均值聚类)
1. 聚类的定义 以下内容摘抄自周志华<机器学习> 根据训练数据是否拥有标记信息,机器学习任务可以大致分为两大类:"监督学习"(supervised learning) ...
- k均值聚类图像分割matlab代码_用K均值聚类法为人类拍摄的首张黑洞照片进行分割...
众所周知,人类最近拍摄了首张黑洞照片.网友们纷纷表示,这明明就是一个甜甜圈嘛!以前以为黑洞是这个世界上最最高冷的存在,而此刻突然现出真身,形象却是如此的人畜无害!不但如此,还勾起了网友的食欲!简直是罪 ...
- python 聚类_使用python+sklearn实现聚类性能评估中随机分配对聚类度量值的影响
注意:单击此处https://urlify.cn/3iAzUr下载完整的示例代码,或通过Binder在浏览器中运行此示例 下图说明了聚类数量和样本数量对各种聚类性能评估度量指标的影响.未调整的度量指标 ...
最新文章
- 13.PHP_ThinkPHP
- 浏览器对象模型BOM
- 配置解压版本的Tomcat为Windows服务
- Hopsan -- 液压、电力等行业的仿真开源软件
- 【线段树】Traffic Jams in the Land(CF498D)
- 多重插补 均值插补_Feature Engineering Part-1均值/中位数插补。
- 39策略模式(Strategy Pattern)
- ubuntu 虚拟机上的 django 服务,在外部Windows系统上无法访问
- 剑指offer面试题[15]-链表中倒数第K个结点
- c语言中转义字符efg,c语言的转义字符与空白符
- opencv 识别火灾_使用深度学习和OpenCV早期火灾探测系统
- Linux共享文件夹的建立和使用
- 缺什么知识就补什么知识
- Sentaurus TCAD 2013安装包下载
- 探究ESP32S【第六天】——接入米家(插曲)
- 窥一斑而知全豹,几分钟带你读懂Java字节码,再也不怕了
- flex布局和响应式布局
- EasyAPI基于电子发票API接口二维码小票对接方案
- python线性回归预测pm2.5_基于随机森林算法的PM2.5预测
- 全网通工业级3G/4G无线路由器
热门文章
- 计算机教学特点怎么写,中学计算机教学特点.doc
- 你真的会使用“布尔类型(Boolean)”么?
- iOS直播APP—原理篇
- 线程和协程详解-python
- 今天上班了,周末跟随公司组织的旅游去了四川省南充市阆中市参观了张飞庙了解了一下“张飞身葬阆中,头葬云阳”的故事。...
- 微信公众号如何嵌入照片征集视频征集小程序
- ElasticSearch---------------------step3,安装Kibana
- 「测试人的恶梦」测试用例设计之电梯、杯子、桌子、椅子、洗衣机
- OpenCV特征检测出现Unhandled exception at……Access violation reading location 0x00000000.
- 如何用数学课件制作工具画函数切线