层次聚类算法(hierarchial cluster)
聚类算法
常见的聚类算法可以分为四类:
- 基于连通模型(connectivited-based):如层次聚类,按照对象之间的距离聚类。(距离的定义可以有很多种)。
- 基于中心点(centroid-based):如K-means,每个cluster都维持有一个中心点。
- 基于分布模型(distribution-based):如高斯混合模型(GMM),假设数据集中的点是由一种混合的概率模型采样所得,将多有可能同属于一组分布的点聚在一起。
- 基于密度(density-based),如DBSCAN和OPTICS,密度高的区域被分为一个cluster,不同cluster由密度低的区域分割开,低密度处的样本被视为噪音。
层次聚类(hierarchial cluster)
层次聚类方法可以分为两类:
- Agglomerative层次聚类(自底向上,bottom-up聚类):
每一个对象都是一个cluster,选最近的cluster合并,最终所有的对象都属一一个cluster - Divisive层次聚类(自顶向下,top-botttom聚类);
所有的对象都属一一个cluster,按一定规则将cluster划分,最终每一个对象都是一个cluster
层次聚类算法是一种贪心算法(greedy algorithm),每一次执行都是某种程度上的局部最优
Agglomerative层次聚类方法
如存在距离矩阵D(距离可以通过不同度量方式得到)
12345D1=12345[0.02.00.06.05.00.010.09.04.00.09.08.05.03.00.0]\qquad\qquad\quad\begin{matrix} 1&\quad 2&\quad 3 &\quad 4&\quad 5 \end{matrix} \\ D_1= \begin{matrix} 1\\2\\3\\4\\5 \end{matrix} \begin{bmatrix} 0.0 & \\ 2.0 &0.0 \\ 6.0 &5.0 &0.0 \\ 10.0 &9.0 &4.0 &0.0 &\\ 9.0 &8.0 &5.0 &3.0 &0.0 &\\ \end{bmatrix} 12345D1=12345⎣⎢⎢⎢⎢⎡0.02.06.010.09.00.05.09.08.00.04.05.00.03.00.0⎦⎥⎥⎥⎥⎤
最小的非零值为d(1,2))=2.0d_{(1,2))}=2.0d(1,2))=2.0,因此将1,2聚类,并重新计算距离矩阵D2D_2D2
d(12)3=min(d13,d23)=d23=5.0d(12)4=min(d14,d24)=d24=9.0d(12)5=min(d15,d25)=d25=8.0d_{(12)3}=min(d_{13},d_{23})=d_{23}=5.0\\ d_{(12)4}=min(d_{14},d_{24})=d_{24}=9.0\\ d_{(12)5}=min(d_{15},d_{25})=d_{25}=8.0\\ d(12)3=min(d13,d23)=d23=5.0d(12)4=min(d14,d24)=d24=9.0d(12)5=min(d15,d25)=d25=8.0
(12)345D1=(12)345[0.05.00.09.04.00.08.05.03.00.0]\qquad\qquad\quad \begin{matrix} (12)&\quad 3 &\quad 4&\quad 5 \end{matrix} \\ D_1= \begin{matrix} (12)\\3\\4\\5 \end{matrix} \begin{bmatrix} 0.0 & \\ 5.0 &0.0 \\ 9.0 &4.0 &0.0 \\ 8.0 &5.0 &3.0 &0.0 &\\ \end{bmatrix} (12)345D1=(12)345⎣⎢⎢⎡0.05.09.08.00.04.05.00.03.00.0⎦⎥⎥⎤
以此类推:
(12)345D2=(12)345[0.05.00.09.04.00.08.05.03.00.0]⟶(12)3(45)D3=(12)3(45)[0.05.00.08.04.00.0]⟶(12)(3(45))D4=(12)(3(45))[0.05.00.0]⟶D5=[0.0]\qquad\qquad\quad\begin{matrix} (12)&\quad 3 &\quad 4&\quad 5 \end{matrix} \\ D_2= \begin{matrix} (12)\\3\\4\\5 \end{matrix} \begin{bmatrix} 0.0 & \\ 5.0 &0.0 \\ 9.0 &4.0 &0.0 \\ 8.0 &5.0 &3.0 &0.0 &\\ \end{bmatrix} \longrightarrow \\ \\ \qquad\ \ \ \begin{matrix} (12)&\ 3 &\ (45) \end{matrix} \\ D_3= \begin{matrix} (12)\\3\\(45) \end{matrix} \begin{bmatrix} 0.0 & \\ 5.0 &0.0 \\ 8.0 &4.0 &0.0 \\ \end{bmatrix} \longrightarrow \\ \\ \qquad\qquad\quad\begin{matrix} (12)&\,(3(45)) \end{matrix} \\ D_4= \begin{matrix} (12)\\(3(45)) \end{matrix} \begin{bmatrix} 0.0 & \\ 5.0 &0.0 \\ \end{bmatrix} \longrightarrow \\ \\ D_5=[0.0] (12)345D2=(12)345⎣⎢⎢⎡0.05.09.08.00.04.05.00.03.00.0⎦⎥⎥⎤⟶ (12) 3 (45)D3=(12)3(45)⎣⎡0.05.08.00.04.00.0⎦⎤⟶(12)(3(45))D4=(12)(3(45))[0.05.00.0]⟶D5=[0.0]
参考:Brian S. Everitt, Sabine Landau, Morven Leese, Daniel tahl. Clustering Analysis 5th Edition[M], WILEY SERIES IN PROBABILITY AND STATISTICS, 2011
层次聚类算法(hierarchial cluster)相关推荐
- ML之HierarchicalClustering:自定义HierarchicalClustering层次聚类算法
ML之HierarchicalClustering:自定义HierarchicalClustering层次聚类算法 目录 输出结果 实现代码 输出结果 更新-- 实现代码 # -*- encodin ...
- 层次聚类算法 算法_聚类算法简介
层次聚类算法 算法 Take a look at the image below. It's a collection of bugs and creepy-crawlies of different ...
- 【火炉炼AI】机器学习023-使用层次聚类算法构建模型
[火炉炼AI]机器学习023-使用层次聚类算法构建模型 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotli ...
- c语言写的数据挖掘的层次聚类算法(新手版)
自己写的c语言写的数据挖掘的层次聚类算法,只用于学习交流,请勿转载!!!! # include<stdio.h> # include<math.h> main(){ int n ...
- 利用层次聚类算法进行基于基站定位数据的商圈分析
1. 背景与挖掘目标 1.1 背景 • 随着个人手机和网络的普及,手机已经基本成为所有人必须持有的工具. • 根据手机信号再地理空间的覆盖情况结合时间序列的手机定位数据可以完整的还原人群的现实活动轨迹 ...
- 无监督学习之层次聚类算法
层次聚类算法 1.定义 2. 自底向上的合并算法 2.1 计算过程 2.2.两个组合数据点间的距离 2.3实例 1.定义 层次聚类(Hierarchical Clustering)属于聚类算法,通过计 ...
- 机器学习 改进的层次聚类算法
http://www.cnblogs.com/wentingtu/archive/2012/01/04/2311533.html 基本工作原理 给定要聚类的N的对象以及N*N的距离矩阵(或者是相似性矩 ...
- python 凝聚层次聚类_关于层次聚类算法的python实现
from scipy.cluster import hierarchy 0.层次聚类的概念 层次聚类和k-means一样都是很常用的聚类方法.层次聚类是对群体的划分,最终将样本划分为树状的结构.他的基 ...
- 分裂层次聚类matlab实现,凝聚层次聚类算法matlab源码
<凝聚层次聚类算法matlab源码>由会员分享,可在线阅读,更多相关<凝聚层次聚类算法matlab源码(3页珍藏版)>请在人人文库网上搜索. 1.共享一个在数据挖掘课程中作为示 ...
最新文章
- Fail to find the dnn implementation. [Op:CudnnRNN]解决办法
- bzoj4396[Usaco2015 dec]High Card Wins*
- angular $observe() 和$watch的区别
- 腾讯、网易、新浪新闻网站爬虫编写记录及评论格式分析
- 如何优雅地实现浏览器兼容与CSS规则回退
- oracle服务端导出/导入方式expdp/impdp
- Jquery获得服务器控件的方法
- lambda表达式_C++11的lambda表达式递归
- 190217每日一句
- 公共代码之密码加解密
- mysql汽车品牌系列_爬取汽车之家汽车品牌型号系列数据
- graphpad做柱状图_轻松搞定各种柱状图
- (渣男渣女必备之)层次分析法AHP-Analytic Hierarchy Process操作流程及代码实现
- 微服务架构开发实战:什么是微服务的熔断机制和熔断的意义
- 分享视频剪辑技巧,视频尺寸和格式修改为相同
- 超级科技赋能短视频、在线阅读行业,定制安全解决方案
- JavaScript怎么识别360浏览器?JS识别360急速模式方案,360流氓浏览器
- JEWELCAD珠宝手饰设计视频教程 JewelCAD Pro v2.2.2
- 【思维导图】冒险岛职业分类(按职业系、职业群分类)
- 小程序横向scroll-view组件自动滚动到某个view