聚类算法(二)--层次聚类法

2023-11-17

本文主要介绍层次聚类法的基本原理、距离计算方法、算法的优缺点,以及R语言实战。

一、概述

层次聚类(Hierarchical Clustering)试图在不同层次上对数据集进行划分,从而形成树形的聚类结构。数据集的划分可采用“自底向上”的聚合策略和“自顶向下”的分裂策略。分裂方法一个很大的问题是如何把一个大簇分成几个较小的簇。N个对象的集合可以划分成两个互斥的 2n11 种方法,当n很大时,计算量是非常大的,因此分裂方法通常采用启发式方法进行划分,但是导致结果不准确,而且为了效率,分裂方法不对已经做出的划分决策回溯。由于这些原因,聚合方法一般比分裂方法用的多。本文也将主要介绍聚合层次聚类。
AGNES(AGglomerative NESting)是一种采用自底向上聚合的层次聚类算法。其原理为:开始将每个样本看作一个初始聚类簇,然后将距离最近的两类合并成一个新类,计算新类与其他类的距离;重复进行最近两个类的合并,直至所有的样本都聚成一个类

二、距离计算

从上述算法原理中可以看出算法的关键在于如何计算聚类簇之间的距离。给定聚类簇 Ci Cj ,有以下几种常用的方法计算距离:
这里写图片描述
其中,最小距离由两个簇的最近样本决定,最大距离由两个簇的最远样本决定,平均距离由两个簇的所有样本共同决定。当簇类间距离由最小距离、最大距离和平均距离计算时,AGNES算法被相应的称为“单链接”、“全链接”和“均链接”算法。
除此之外,还有中间距离法、重心法、离差平方和法(Ward方法)等距
离计算方法,在此不一一展开。

三、优缺点

1.优点

  • 可以通过设置不同的相关参数值,得到不同粒度上的多层次聚类结构;
  • 不需要事先设定好类的个数,常常可以用作其他聚类算法的前期探索。

2.缺点

  • 计算量比较大,因为要每次都要计算多个cluster内所有数据点的两两距离;
  • 层次聚类过程最明显的特点就是不可逆性,由于对象在合并或分裂之后,下一次聚类会在前一次聚类基础之上继续进行合并或分裂,也就是说,一旦聚类结果形成,想要再重新合并来优化聚类的性能是不可能的;
  • 聚类结果过度依赖于建模过程中距离计算方法的选择,也就是说,不同的距离计算方法会造成结果的极大差异性,往往需要多次试探,选择最优结果。

四、实例

1.R语言函数介绍

在R语言中, hclus() 函数提供层次聚类的计算, plot() 函数可画出系统聚类的树形图(又称谱系图)。 rect.hclust() 函数则可以在谱系图中清晰的画出分类。具体用法如下:

hclust(d,method="complete",members=NULL)
其中d是由“dist”构成的距离结构,method是系统聚类的方法,缺省值是最长距离法,其参数有:

  • single–最短距离法
  • complete–最长距离法
  • median–中间距离法
  • mcquitty–Mcquitty相似法
  • average–类平均法
  • centroid–重心法

plot(x,labels=NULL,hang=0.1,axes=TRUE,frame.plot=FALSE,ann=TRUE,main=ClusterDendrogram,sub=NULL,xlab=NULL,ylab=Height,)
其中x是由hclust()函数生成的对象,hang是表明谱系图中各类所在的位置,当hang取负值时,谱系图中的类从底部画起。

rect.hclust(tree,k=NULL,which=NULL,x=NULL,h=NULL,border=2,cluster=NULL)
其中tree是由hclust生成的结构,k是类的个数。

2.R语言实战

本文采用iris数据集进行聚类,由于层次聚类法用R语言实现比较简单,直接上代码。

#生成距离矩阵
d <- dist(iris[, 1:4])
#建模,这里采用中间距离法
hc <- hclust(d, method = "median")
#可视化聚类结果
plot(hc)
rect.hclust(hc, k=3)
#将聚类结果与源数据集进行比较
result <- cutree(hc, k=3)  #用来将聚类结果读取出来
table(result, iris$Species)

这里写图片描述
这里写图片描述
从聚类结果可以看出,结果基本与原种属一致。如果在没有样本标注的情况下,可以以聚类结果为参考,进行后续的分类。

参考资料:
【1】周志华.机器学习[M].北京:清华大学出版社,2016.
【2】统计建模与R软件,ISBN:9787302143666,作者:薛毅
【3】R语言的三种聚类方法
【4】聚类分析-R语言
【5】层次聚类的介绍

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

聚类算法(二)--层次聚类法 的相关文章

随机推荐

  • Druid LogFilter输出可执行的SQL

    配置 测试代码 DruidDataSource dataSource new DruidDataSource dataSource setUrl xxx dataSource setUsername xxx dataSource setPa
  • mysql非安装板启动的问题 err1067

    链接
  • 包装类&简单认识泛型(数据结构系列2)

    目录 前言 1 泛型 1 1什么是泛型 1 2为什么要使用泛型 1 3泛型的语法及使用 1 4泛型是如何编译的 1 4 1擦除机制 1 5泛型类的上界 1 6为什么不能实例化泛型类数组 1 7泛型方法 2 包装类 2 1基本数据类型所对应的
  • 华为OD机试真题-补种未成活胡杨-2023年OD统一考试(B卷)

    题目描述 近些年来 我国防沙治沙取得显著成果 某沙漠新种植N棵胡杨 编号1 N 排成一排 一个月后 有M棵胡杨未能成活 现可补种胡杨K棵 请问如何补种 只能补种 不能新种 可以得到最多的连续胡杨树 输入描述 N 总种植数量 1 lt N l
  • 「-2103」: error in line:1 。invalid schema name[***]

    create table pfyh emp emp id integer emp name varchar 20 回显 2103 error in line 1 翻译 无效的模式名 xxx 的错误 行中的错误 1 invalid schem
  • JAVA 进制转换工具

    进制转换工具类 package com import java math BigInteger import java util Arrays ClassName BaseConversionUtils Author Kochiya Dat
  • 实战案例,手把手教你用 Python 构建电商用户画像

    大家好 本文以真实案为例手把手教你搭建电商系统的用户画像 先来看该电商用户画像用到的标签 数据内容包括user id 用户身份 item id 商品 IDbehavior type 用户行为类型 包含点击 收藏 加购物车 支付四种行为 分别
  • C语言--swap交换函数

    目录 1 swap1 int a int b 不变 2 swap2 int a int b 不变 3 swap3 int a int b 改变 4 swap4 int a b 改变 1 swap1 int a int b 不变 void s
  • conda 创建、激活、查看、删除env

    conda 创建 激活 查看 删除env Anaconda能够帮助我们在系统中配置python环境 该环境独立于系统配置 可以配置不同版本的python包 比如我们想要使用不同版本的python来运行程序 可以创建不同的conda环境来将不
  • Centos7安装elasticsearch及kibana并进行安全设置

    Centos7安装elasticsearch及kibana并进行安全设置 每天多学一点点 话不多说 这就开始吧 文章目录 Centos7安装elasticsearch及kibana并进行安全设置 1 前言 2 环境要求 3 安装elasti
  • 超分辨率数据集(待填坑版)

    超分辨率数据集 待填坑版 数据集来源 Super Resolution 超分辨率 DIV2K Urban100 BSD Berkeley Segmentation Dataset EarVN1 0 TextZoom Cardiac supe
  • 干了六年Android开发现在裸辞失业了,再过2个月就30了,该怎么继续生活?

    这是我在某论坛看到别人分享的故事 觉得可以展开聊一下 对于我们这些中年程序员 可以裸辞吗 前言 首先介绍一下主人公的情况 目前所在的是一家小的创业公司 待了3年多 薪资一般吧 之前在一家中型上市企业也干了三年 因为想涨薪所以跳到现在这家小公
  • 【数据结构】KMP算法

    算法简介 传统暴力算法和KMP算法 设定主串的长度为n 字串的的长度为m 传统的暴力字符串匹配算法理论上最多需要花费O nm 的时间复杂度才能完成串的匹配操作 但是在实际使用中 往往也能够以接近O m n 的时间复杂的完成匹配操作 因此现在
  • 【js】JSON.stringify 语法实例讲解

    语法 JSON stringify value replacer space value 是必选字段 就是你输入的对象 比如数组 类等 replacer 这个是可选的 它又分为2种方式 一种是数组 第二种是方法 情况一 replacer为数
  • Tcp建立连接为什么需要三次握手

    前言 众所周知tcp传输层协议在建立连接的时候需要三次才能建立起一个真正的可靠连接 可是为什么是三次呢 不可以是两次 四次等等呢 可以自己思考一番 带着疑问可以看下文 三次握手 在 计算机网络 一书中其中有提到 三次握手的目的是 为了防止已
  • 逐步视频讲解--用Tensorflow进行中文自然语言处理--情感分析

    本教程为原创 转载请注明教学视频地址 视频教程链接 https www bilibili com video av30543613 书面教程和代码链接 https github com aespresso chinese sentiment
  • 王者荣耀8月15日服务器维护,王者荣耀8月15日更新维护到什么时候 王者荣耀8月15日更新时间分享...

    王者荣耀 5V5英雄公平对战手游 腾讯最新MOBA大作 5V5 3v3 1v1 多样模式一键体验 海量英雄随心选择 10秒实时跨区匹配 与好友组队 类型 动作冒险 大小 792 06M 语言 简体中文 在王者荣耀8月15日更新到什么时候呢
  • BAT54C 二极管是如何工作的?

    这是一个多电源供电的电路 Vcc是正常供电电源 如5V 由市电变换得到 电压大于 Vcc1 Vf 正常供电时二极管不导通 Vcc1是电池供电电源 当Vcc撤掉时 DD1 上边的二极管 导通 由Vcc1供电 当电池Vcc1耗尽或更换电池时 V
  • openwrt上opkg更新报错"opkg_download: Failed to download ............."

    开始搞op的时候 看到op竟然可以直接安装一些插件 激动坏了 因为这东西对嵌入式的小系统来说简直不敢想 但是op就支持了 就是这么任性 好不容易编译了固件 按照网上的教程 telnet进去 首先opkg update 结果没有想象中的华丽更
  • 聚类算法(二)--层次聚类法

    本文主要介绍层次聚类法的基本原理 距离计算方法 算法的优缺点 以及R语言实战 一 概述 层次聚类 Hierarchical Clustering 试图在不同层次上对数据集进行划分 从而形成树形的聚类结构 数据集的划分可采用 自底向上 的聚合