首页 > 其他分享 >什么是层次聚类?

什么是层次聚类?

时间:2024-06-08 14:58:35浏览次数:12  
标签:层次 组合 df 什么 距离 聚类 数据 点间

文章目录

层次聚类

层次聚类(HierarchicalCustering)是聚类算法的一种,通过计算不同类别`数据点间的相似度来创建一棵有层次的嵌套聚类树。在聚类树中,不同类别的原始数据点是树的最低层,树的顶层是一个聚类的根节点。创建聚类树有自下而上合并和自上而下分裂两种方法。

作为一家公司的人力资源部经理,你可以把所有的雇员组织成较大的簇,如主管、经理和职员;
然后你可以进一步划分为较小的簇,例如,职员簇可以进一步划分为子簇:高级职员,一般职员和实习人员。
所有的这些形成了层次结构,可以很容易地对各层次上的数据进行汇总或者特征化。

在这里插入图片描述

如何划分才是合适的呢?

在这里插入图片描述

直观来看,上图中展示的数据划分为2个簇或4个簇都是合理的,甚至,如果上面每一个圈的内部包含的是大量数据形成的数据集,那么也许分成16个簇才是所需要的。

论数据集应该聚类成多少个簇,通常是在讨论我们在什么尺度上关注这个数据集。层次聚类算法相比划分聚类算法的优点之一是可以在不同的尺度上(层次)展示数据集的聚类情况。

基于层次的聚类算法(HierarchicalCustering)可以是凝聚的(Agglomerative)或者分裂的(Diisve),取决于层次的划分是"自底向上"还是"自项向下”。

自底向上的合并算法

层次聚类的合并算法通过计算两类数据点间的相似性,对所有数据点中最为相似的两个数据点进行组合,并反复迭代这一过程。
简单的说层次聚类的合并算法是通过计算每一个类别的数据点所有数据点之间的距离确定它们之间的相似性,距离越小,相似度越高。并将距离最近两个数据点或类别进行组合生成聚类树

在这里插入图片描述

相似度的计算

涉及到距离的时候,需要进行归一化处理,将所有的数值都压缩到0-1之间
层次聚类使用欧式距离来计算不同类别数据点间的距离(相似度)。
D = ( x 1 − y 1 ) 2 + ( x 2 − y 2 ) 2 D = \sqrt{(x_1-y_1)^2+(x_2-y_2)^2} D=(x1​−y1​)2+(x2​−y2​)2

实例:数据点如下

在这里插入图片描述
分别计算欧式距离值(矩阵)
在这里插入图片描述
将数据点B与数据点C进行组合后,重新计算各类别数据点间的距离矩阵。数据点间的距离计算方式与之前的方法一样。
这里需要说明的是组合数据点(B.C)与其他数据点间的计算方法。当我们计算(B,C)到A的距离时,需要分别计算B到A和C到A的距离均值

D = ( B − A ) 2 + ( C − A ) 2 2 = 21.6 + 22.6 2 D = \frac{\mathrm{\sqrt{(B-A)^2}}+\sqrt{(C-A)^2}}{\mathrm{2}} = \frac{\mathrm{21.6+22.6}}{\mathrm{2}} D=2(B−A)2 ​+(C−A)2 ​​=221.6+22.6​

经过计算数据点D到数据点E的距离在所有的距离值中最小,为1.20。
这表示在当前的所有数据点中(包含组合数据点),D和E的相似度最高。因此我们将数据点D和数据点E进行组合。并再次计算其他数据点间的距离。
在这里插入图片描述

后面的工作就是不断的重复计算数据点与数据点,数据点与组合数据点间的距离。这个步骤应该由程序来完成。
这里由于数据量较小,我们手工计算并列出每步的距离计算和数据点组合的结果。

两个组合数据点间的距离

计算两个组合数据点间距离的方法有三种,分别为Single Linkage,Compete Linkage和Average Linkage。
在开始计算之前,我们先来介绍下这三种计算方法以及各自的优缺点。

  • Single Linkage:方法是将两个组合数据点中距离最近的两个数据点间的距离作为这两个组合数据点的距离。这种方法容易受到极端值的影响。两个很相似的组合数据点可能由于其中的某个极端的数据点距离较近而组合在一起。
  • Complete Linkage:Complete Linkage的计算方法与SingleLinkage相反,将两个组合数据点中距离最远的两个数据点间的距离作为这两个组合数据点的距离。Complete Linkage的问题也与Single Linkage相反,两个不相似的组合数据点可能由于其中的极端值距离较远而无法组合在一起。
  • Average Linkage:Average Linkage的计算方法是计算两个组合数据点中的每个数据点与其他所有数据点的距离。将所有距离的均值作为两个组合数据点间的距离。这种方法计算量比较大,但结果比前两种方法更合理。

我们使用Average Linkage计算组合数据点间的距离。下面是计算组合数据点(A,F)到(B,C)的距离,这里分别计算了(A,F)和(B,C)两两间距离的均值

D = ( A − B ) 2 + ( A − C ) 2 + ( F − B ) 2 + ( F − C ) 2 4 D = \frac{\mathrm{\sqrt{(A-B)^2}}+\sqrt{(A-C)^2}+\sqrt{(F-B)^2}+\sqrt{(F-C)^2}} {\mathrm{4}} D=4(A−B)2 ​+(A−C)2 ​+(F−B)2 ​+(F−C)2 ​​

树状图

在这里插入图片描述

在这里插入图片描述

实例

导入数据

import pandas as pd
seeds_df = pd.read_csv('D:/研/数学基础/统计分析/统计分析/聚类分析/datasets/seeds-less-rows.csv')
seeds_df.head()

在这里插入图片描述

查看

seeds_df.grain_variety.value_counts()  
grain_variety
Kama wheat        14
Rosa wheat        14
Canadian wheat    14
Name: count, dtype: int64

数据当中已有类别分类,这时需要去掉这一列

varieties = list(seeds_df.pop('grain_variety'))

# 拿到数据的数值特征
samples = seeds_df.values
samples

在这里插入图片描述

导包

#距离计算的 还有树状图
from scipy.cluster.hierarchy import linkage, dendrogram
import matplotlib.pyplot as plt

进行层次聚类

#进行层次聚类
mergings = linkage(samples, method='complete')

树状图结果

#树状图结果
fig = plt.figure(figsize=(10,6))
dendrogram(mergings,
           labels=varieties,
           leaf_rotation=90,
           leaf_font_size=15,
)
plt.show()

在这里插入图片描述

得到标签结果

#得到标签结果
#maximum height自己指定
from scipy.cluster.hierarchy import fcluster
labels = fcluster(mergings, 6, criterion='distance') # 这里高度为6,看上图,高度为6有三个簇

df = pd.DataFrame({'labels': labels, 'varieties': varieties})
ct = pd.crosstab(df['labels'], df['varieties'])
ct

在这里插入图片描述

不同距离的选择会产生不同的结果

import pandas as pd

scores_df = pd.read_csv('D:/研/数学基础/统计分析/统计分析/聚类分析/datasets/eurovision-2016-televoting.csv', index_col=0)
country_names = list(scores_df.index)
scores_df.head()

在这里插入图片描述

缺失值填充,没有的就先按满分

#缺失值填充,没有的就先按满分算吧
scores_df = scores_df.fillna(12)

在这里插入图片描述

涉及到距离的时候,需要进行归一化处理,将所有的数值都压缩到0-1之间

归一化

from sklearn.preprocessing import normalize
samples = normalize(scores_df.values)
samples

如果没有找到sklearn,这执行以下命令
conda install scikit-learn

在这里插入图片描述

树状图结果(参数single)

from scipy.cluster.hierarchy import linkage, dendrogram
import matplotlib.pyplot as plt

mergings = linkage(samples, method='single')
fig = plt.figure(figsize=(10,6))
dendrogram(mergings,
           labels=country_names,
           leaf_rotation=90,
           leaf_font_size=10,
)
plt.show()

在这里插入图片描述

树状图结果(参数complete)

mergings = linkage(samples, method='complete')
fig = plt.figure(figsize=(10,6))
dendrogram(mergings,
           labels=country_names,
           leaf_rotation=90,
           leaf_font_size=10,
)
plt.show()

在这里插入图片描述

标签:层次,组合,df,什么,距离,聚类,数据,点间
From: https://blog.csdn.net/weixin_50569789/article/details/139545674

相关文章

  • 自动收录外链——提高网站权重的最佳选择,外链收录是什么意思
    自动收录外链,作为一种优化网站的手段,正逐渐被越来越多的个人站长和企业网站所采用。它是一种利用自动化程序进行外链收录的方式,能够帮助网站提高权重,增加流量,提升排名。接下来,我们就来了解一下自动收录外链的功能和意义,以及如何通过这一工具来提高网站的权重,增加流量。自动收录外......
  • 电视家停了用什么看电视?分享免费看电视的电视软件,亲测有效!
     最近,不少朋友跟我抱怨说电视家不能用了,别急,阿星今天要分享的几个电视app。每个app都有它独特的魅力,阿星我可是亲自试用过,保证靠谱。记得小时候,家里的电视就那么几个台,现在可好,电视家不能用了,但别急,阿星这就来给你介绍几个新伙伴,让你的客厅重新焕发生机! 首先,得提一提央视频......
  • 其争也君子丨既然君子不愿意参与争名夺利的行为,那么为什么参加高考、开公司、与别人竞
    君子无所争:君子之争的三个原则子曰:君子无所争。必也射乎。揖让而升,下而饮。其争也君子。君子无所争!争—— 进取(之间的区别)(0/博弈)(创新的价值、共赢)既然君子不愿意参与争名夺利的行为,那么为什么参加高考、开公司、与别人竞争呢?君子不是争,而是参与事情的创造,是进取,而......
  • 【Unity每日一记】效应器你应该知道是什么吧!五大2D效应器组件
    ......
  • 什么是外汇保证金和杠杆?
    外汇保证金与杠杆:理解交易的核心要素当我们谈论外汇交易时,两个关键概念经常被提及:外汇保证金和杠杆。对于初次接触外汇交易的人来说,这两个概念可能有些令人困惑。本文将为您详细解释外汇保证金和杠杆的含义及其在外汇交易中的作用。外汇保证金:交易的入场券外汇保证金,简而......
  • Java为什么会成为现在主流的编程语言
    JDK动态代理 是Java标准库提供的一种实现动态代理的方式。具体来说,它允许在运行时动态地创建对象,并将方法调用重定向到代理对象中的处理程序(InvocationHandler)。其核心原理是通过反射机制,在运行时生成一个实现了被代理对象接口的匿名类,并通过该匿名类来创建代理对象。这个匿名......
  • Java 的动态代理是基于什么原理?
    Java的动态代理是基于以下原理实现的:代理模式:代理模式是一种设计模式,通过创建一个代理对象来控制对真实对象的访问。代理对象可以在调用真实对象之前或之后增加额外的逻辑,比如权限验证、记录日志等。代理模式的主要目的是在不修改原有代码的基础上,扩展对象的行为。动......
  • 265 Custom Exceptions(更容易定位报错内容具体是什么)
    优势CustomExceptions相比于ArgumentException/ArgumentNullException,更容易定位报错内容具体是什么,报错内容与具体业务相关。示例新建类库项目Exceptions,为Services/CRUDExample项目添加Exceptions项目引用Exceptions项目中添加InvalidPersonIdException.csnamespac......
  • 机器学习-聚类算法
    1.有监督学习与无监督学习有监督:在训练集中给的数据中有X和Y,根据这些数据训练出一组参数对预测集进行预测无监督:在训练集中给的数据只有X没有Y,根据X数据找相似度参数来对预测集进行预测2.数据间的相似度2.1距离相似度:每一条数据可以理解为一个n维空间中的点,可以根据点点之......
  • [Qt开发]当我们在开发兼容高分辨率和高缩放比、高DPI屏幕的软件时,我们在谈论什么。
    前言最近在开发有关高分辨率屏幕的软件,还是做了不少尝试的,当然我们也去网上查了不少资料,但是网上的资料也很零碎,说不明白,这样的话我就做个简单的总结,希望看到这的你可以一次解决你有关不同分辨率下的所有问题。分辨率?DPI?首先我们搞清楚我们现在到底面对的是什么场景。在开发高......