文章目录

  • 基本原理
  • 绘图层次
  • 定义距离

基本原理

和Birch聚类相似,层次聚类也是一种依赖树结构实现的聚类方法,其核心概念是相似度。根据相似度,可以将所有样本组织起来,从而构建一棵层次聚类树。

其中Birch算法的核心,叫做聚类特征树(Clustering Feature Tree),简称CF树。CF树由CF构成,每个CF都是三元组,表示为(N, LS, SS),其中N表示点数;LS表示点的向量和;SS表示CF各分量的平方和。

相比之下,层次聚类更加直接,为了说明层次聚类的特点,可以尝试绘制一下分层聚类树,其中绘图函数使用scipy中的dendrogram函数,其参数生成函数定义如下(可以不用管这个)

import numpy as np
from matplotlib import pyplot as plt
from scipy.cluster.hierarchy import dendrogram
def getLinkageMat(model):children = model.children_cs = np.zeros(len(children))N = len(model.labels_)for i,child in enumerate(children):count = 0for idx in child:count += 1 if idx < N else cs[idx - N]cs[i] = countreturn np.column_stack([children, model.distances_, cs])

然后对AgglomerativeClustering算法进行测试

from sklearn.cluster import AgglomerativeClustering
from sklearn.datasets import make_blobs
X, y = make_blobs(n_samples=50)
model = AgglomerativeClustering(distance_threshold=0, n_clusters=None)model = model.fit(X)
mat = getLinkageMat(model)
test = dendrogram(mat)
plt.show()

其中,distance_threshold表示距离阈值,n_clusters为聚类个数,在这里均表示自动处理,最终得到的结果如下

这个图横坐标表示簇的序号,纵坐标表示两个簇之间的距离。如果从上往下看,粉色的和蓝色的被明显分为两类,而后蓝色内部又被分为两类。如果以距离6为阈值,那么距离大于6的簇可分为三组。

绘图层次

通过调控dendrogram中的truncate_mode,可以修改绘图层次

test = dendrogram(mat, truncate_mode='level', p=3)
plt.show()

如下图所示,用括号括起来的横坐标表示被兼并的样本个数。

定义距离

距离越近,则越相似,则越可以被归为一类。所以,如何定义距离在层次聚类中显得十分重要,AgglomerativeClustering的构造函数中比较重要的参数如下

AgglomerativeClustering(n_clusters=2, *, affinity='deprecated',linkage='ward')

其中affinity起到定义距离的作用,下面逐一演示不同距离时的聚类情况

distances = ["euclidean", "l1", "l2", "manhattan", "cosine"]
fig = plt.figure()
for i,d in enumerate(distances):model = AgglomerativeClustering(affinity=d,linkage='average', distance_threshold=0, n_clusters=None)model = model.fit(X)mat = getLinkageMat(model)ax = fig.add_subplot(2,3,i+1)plt.title(d)test = dendrogram(mat, ax=ax, truncate_mode='level', p=3)plt.show()

从结果来看,除了余弦距离有些诡异之外,其他情况都还可以。而且曼哈顿距离与L1,欧氏距离和L2都有极强的相似性。

此外linkage 参数有4个选项:

  • ward :簇的方差最小
  • average:簇间的平均距离最小
  • complete:簇间的平均距离最大
  • single:单簇之间的距离最小

【Python】sklearn机器学习之层次聚类算法AgglomerativeClustering相关推荐

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

    机器学习实战--层次聚类算法 1 层次聚类概述 2 sklearn中的实现 1 层次聚类概述 层次聚类试图在不同层次对数据集进行划分,从而形成树形的聚类结构. 数据集的划分可采用"自底向上& ...

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

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

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

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

  4. 【Python】sklearn机器学习之Birch聚类算法

    文章目录 基本原理 sklearn调用 基本原理 BIRCH,即Balanced Iterative Reducing and Clustering Using Hierarchies,利用分层的平衡 ...

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

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

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

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

  7. 层次聚类python实现_Python机器学习——Agglomerative层次聚类

    层次聚类(hierarchical clustering)可在不同层次上对数据集进行划分,形成树状的聚类结构.AggregativeClustering是一种常用的层次聚类算法. 其原理是:最初将每个 ...

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

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

  9. Python机器学习——Agglomerative层次聚类

    层次聚类(hierarchical clustering)可在不同层次上对数据集进行划分,形成树状的聚类结构.AggregativeClustering是一种常用的层次聚类算法.    其原理是:最初 ...

最新文章

  1. sparkSQL1.1入门之二:sparkSQL执行架构
  2. Vue creatElement
  3. ES Next Arrow function Promise Iterator Generator yield Async Await
  4. 如何快速定位程序Core?
  5. 211计算机实力末尾的学校,实力最弱的十所985大学是哪几所?选择末尾985好还是选211好?...
  6. Eureka 配置参数说明
  7. mysql5.5.35编译安装_CentOS 6.5最小化编译安装mysql 5.5.35
  8. SharePoint 2010--为WebPart创建自定义属性
  9. Web移动开发基本概念
  10. 下载yaml appium
  11. winrar解压器_与WinRAR齐名的经典解压缩软件——WinZip,不仅仅是情怀
  12. css文章排版代码,css文章排版
  13. 二叉树的左视图和右视图 形象理解(附C++代码)
  14. 如何在 Android 上恢复删除屏幕截图/照片的四种方式
  15. springboot下载excel(解决文件损坏问题)
  16. jy-12-SPRINGMYBATIS02——云笔记08-刘苍松
  17. 唐宇迪学习笔记4:Python可视化库——Seaborn
  18. 港科夜闻|香港科技大学(广州)与广东联通签署多方位战略合作协议
  19. spring组合注解
  20. scrapy 爬 zol 笑话大全

热门文章

  1. 关于vue组件开发过程中一直报错:This relative module was not found:
  2. 阿里17实习生编程-数组四等分
  3. JS字符串数据类型转化和分割的方法
  4. PHPRunner 10.7.0 PHP代码生成器
  5. android六轴传感器,6轴传感器、IP67防水:AMAZFIT米动智芯2 上架有品
  6. 二叉树非递归遍历实现(Java)
  7. 为魅族M8手机开发的围棋打谱软件(M8WeiqiPu)发布0.1版
  8. 2星|陈九霖《商业的逻辑》:曾经入狱的中航油(新加坡)掌门人的商业感想...
  9. (MM)物料BOM与生产BOM对比表
  10. 【数据库】01_sql语句