机器学习实战——层次聚类算法

  • 1 层次聚类概述
  • 2 sklearn中的实现

1 层次聚类概述

层次聚类试图在不同层次对数据集进行划分,从而形成树形的聚类结构。 数据集的划分可采用"自底向上"的聚合策略,也可采用"自顶向下" 的分拆策略。层次聚类可以分为凝聚层次聚类和分裂层次聚类。分裂层次聚类采用的就是"自顶而下"的思想,先将所有的样本都看作是同一个簇,然后通过迭代将簇划分为更小的簇,直到每个簇中只有一个样本为止。凝聚层次聚类采用的是"自底向上"的思想,先将每一个样本都看成是一个不同的簇,通过重复将最近的一对簇进行合并,直到最后所有的样本都属于同一个簇为止。目前,比较常用的层次聚类算法是"自底向上"的凝聚层次聚类,比较流行的算法有 BIRCH、AGNES,BIRCH 的算法可以参考文章1和文章2。本文主要介绍 AGNES 算法,其算法思想描述如下:

  • 1 将每个样本当成一个初始簇;
  • 2 根据两个簇中样本点的最近距离找到相近的两个簇;
  • 3 合并两个簇,生成新的簇的集合;
  • 4 跳转到 2、3 步,直到达到定义的簇数目(若未定义簇数目,则将全部样本聚成一类为止)。

关于两个簇最近距离的计算有:最短距离、最长距离、平均距离三种常见的方法。设定 Ci,CjC_i,C_jCi​,Cj​ 为两个聚类簇,x,zx,zx,z 为两个簇中的样本点集合。
最短距离:把两个簇中距离最短的两个样本点间的距离作为簇间最近距离。数学公式如下:


最长距离:把两个簇中距离最大的两个样本点间的距离作为簇间最近距离。数学公式如下:


平均距离:把两个簇中各样本点距离的平均值作为簇间最近距离。数学公式如下:

2 sklearn中的实现

class sklearn.cluster.AgglomerativeClustering(n_clusters=2, affinity=’euclidean’, memory=None, connectivity=None, compute_full_tree=’auto’, linkage=’ward’, pooling_func=’deprecated’)

主要参数说明:

  • n_clusters:聚类的个数
  • affinity:计算 linkage 距离的方式,可以为:euclidean、l1、l2、mantattan、cosine、precomputed,如果 linkage=’ward’,则 affinity 必须为 euclidean。
  • linkage:指定层次聚类判断相似度的方法,有ward(组间距离等于两类对象之间的最小距离,single-linkage聚类)、average(组间距离等于两组对象之间的平均距离,average-linkage聚类)、complete(组间距离等于两组对象之间的最大距离,complete-linkage聚类)
from sklearn.cluster import AgglomerativeClustering
from sklearn.metrics import adjusted_rand_score
from sklearn.datasets import make_blobs
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] #中文显示问题
plt.rcParams['axes.unicode_minus'] = False #负数显示问题#获取数据
n_samples = 1500
random_state = 170
X,labels_true = make_blobs(n_samples=n_samples, random_state=random_state)
# 聚类的个数
nums = range(1,50) # 获取不同聚类个数ARI值的函数
def test_AgglomerativeClustering_nclusters(X,labels_true,nums):ARIS = [] for num in nums: #定义聚类对象clst = AgglomerativeClustering(n_clusters=num)#训练对象并预测predicted_lables = clst.fit_predict(X) ARIS.append(adjusted_rand_score(labels_true, predicted_lables)) return(ARIS)ARIS = test_AgglomerativeClustering_nclusters(X,labels_true,nums)# 绘制ARI值与聚类个数的图形
plt.plot(nums,ARIS,marker="+")# 由ARI值的图像知,最适合的为三类
clf = AgglomerativeClustering(n_clusters=3)
y_predict = clf.fit_predict(X)# 原始图像
plt.subplot(1,2,1)
plt.scatter(X[:,0],X[:,1],c=labels_true)
plt.title('原始图像')# 聚类之后的图像
plt.subplot(1,2,2)
plt.scatter(X[:,0],X[:,1],c=y_predict)
plt.title('预测图像')


层次聚类的树状热图可以通过 seaborn.clustermap 函数调用绘制。

机器学习实战——层次聚类算法相关推荐

  1. 机器学习实战——密度聚类算法

    机器学习实战--密度聚类算法 1 密度聚类 2 sklearn中的实现 1 密度聚类 密度聚类假设聚类结构能够通过样本分布的密集程度确定,通常情形下,密度聚类算法从样本密度的角度来考察样本之间的可连接 ...

  2. 【Python机器学习实战】聚类算法——层次聚类(HAC)和DBSCAN

    层次聚类和DBSCAN 1.层次聚类 下面这样的结构应该比较常见,这就是一种层次聚类的树结构,层次聚类是通过计算不同类别点的相似度创建一颗有层次的树结构,在这颗树中,树的底层是原始数据点,顶层是一个聚 ...

  3. 【机器学习】层次聚类算法 CURE算法

    CURE算法是一种层次聚类算法. 层次聚类方法(Hierarchical Clustering Method) 是一种发展比较早.应用广泛的聚类方法,按采用"自顶向下(Top-Down)&q ...

  4. 机器学习技术-层次聚类算法(组平均)-综合层次聚类方法(BIRCH、CURE)

    基于层次的聚类方法,是对给定的数据进行层次的分解,直到某种条件满足为止.首先将数据点组成一颗聚类树,根据层次,自底向上或是自顶向下分解.层次的方法可以分为凝聚的方法和分裂的方法. 凝聚的方法,也称为自 ...

  5. 【Python】sklearn机器学习之层次聚类算法AgglomerativeClustering

    文章目录 基本原理 绘图层次 定义距离 基本原理 和Birch聚类相似,层次聚类也是一种依赖树结构实现的聚类方法,其核心概念是相似度.根据相似度,可以将所有样本组织起来,从而构建一棵层次聚类树. 其中 ...

  6. 【Python机器学习】层次聚类AGNES、二分K-Means算法的讲解及实战演示(图文解释 附源码)

    需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 层次聚类 在聚类算法中,有一类研究执行过程的算法,它们以其他聚类算法为基础,通过不同的运用方式试图达到提高效率,避免局部最优等目的,这类算法主要有 ...

  7. 聚类算法 距离矩阵_机器学习基础-层次聚类

    层次聚类(Hierarchical clustering) 何时使用? 当我们希望进一步挖掘观测数据的潜在关系,可以使用层次聚类算法. 工作方式 首先我们会计算距离矩阵(distance matrix ...

  8. 【火炉炼AI】机器学习023-使用层次聚类算法构建模型

    [火炉炼AI]机器学习023-使用层次聚类算法构建模型 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotli ...

  9. 机器学习-Hierarchical clustering 层次聚类算法

    学习彭亮<深度学习基础介绍:机器学习>课程 假设有N个待聚类的样本,对于层次聚类来说,步骤: (初始化)把每个样本归为一类,计算每两个类之间的距离,也就是样本与样本之间的相似度: 寻找各个 ...

最新文章

  1. jsp中空格字符怎么写_驰骋职场多年,如何对付Excel中的空格字符?
  2. Matlab调用函数实现CIC滤波器
  3. MySQL----示例知识点整理
  4. pytorch —— nn网络层 - 卷积层
  5. 使用 FOR XML语句 将查询结构作为XML格式返回【转】
  6. 第三篇: UpdatePanel 控件示例
  7. mysql 增加一列 伦理名_MySQL错误提示mysql Statement violates GTID consistency
  8. 最新骗局,速查银行卡余额!
  9. 【图像隐写】基于matlab LBP数字水印嵌入攻击提取【含Matlab源码 1672期】
  10. hive安装及常用命令
  11. iOS中使用自定义字体, 动态下载字体
  12. 微信H5页面ios分享失效
  13. SecureCRT配置详细图文教程
  14. dax-自定义周做同比和环比
  15. 2011年09月04日
  16. 爬虫数据分析:上海旅游景点排名分析
  17. 【观察】并购魔方安全,联软科技再启新征程
  18. vuejs中使用vuex的两种方案之一
  19. HDU-6148 Valley Numer(数位DP)
  20. [错误解决] paramiko.ssh_exception.SSHException: Error reading SSH protocol banner

热门文章

  1. OneToMany 查询
  2. Android studio 截取手机屏幕
  3. html调起苹果手机摄像头_iOS | H5直接调用手机的摄像头进行拍照或录像
  4. 内网升级“高效安全”利器!统信软件发布私有化更新管理平台
  5. 彩色的蜘蛛html,HTML5蜘蛛动画
  6. java计算机毕业设计高校游泳馆信息管理MyBatis+系统+LW文档+源码+调试部署
  7. 小升初命题作文《我的同桌》
  8. 从零学Java(6)之字面量和常量,我家AD想要第一滴血
  9. 为何16寸的笔记本电脑开始兴起?
  10. linux系统/网络编程