首页 > 其他分享 >层次聚类法(matlab实现)

层次聚类法(matlab实现)

时间:2024-10-19 18:19:30浏览次数:3  
标签:层次 树状 距离 分裂 matlab 聚类 数据

层次聚类法的优点包括能够揭示数据集的层次结构,有助于理解数据内在关系,无需预先设定聚类数目,并且可以通过树状图直观地裁剪得到不同粒度的聚类结果。然而,层次聚类的不足之处在于算法的时间复杂度大,结果依赖聚类的合并点和分裂点的选择,且层次聚类过程是不可逆的,一旦聚类结果形成,想要重新合并来优化聚类的性能是不可能的。因此,在应用层次聚类法时,需要根据数据的特性和聚类的目标仔细选择合适的链接方法和参数。

层次聚类法在多种问题中表现出其独特的优势,尤其适用于以下场景:

  1. 小样本数据的聚类:层次聚类适合处理小规模数据集,因为它可以形成类相似度层次图谱,便于直观地确定类之间的划分。这种聚类方法可以得到较理想的分类,尤其是当数据集的大小不足以应用其他更复杂的聚类算法时。

  2. 数据探索和模式识别:在没有先验经验的背景下,层次聚类可以用于探索性分析,帮助识别数据中的模式和结构。

  3. 市场细分和客户细分:在市场研究中,层次聚类可以用来将客户按照购买行为和偏好进行分类,以便更好地理解客户需求和市场趋势。

  4. 生物信息学和基因表达数据分析:层次聚类在生物信息学中用于基因表达数据的分析,帮助揭示不同基因之间的相似性和差异性。

  5. 图像分割和纹理分析:在图像分析中,层次聚类可以用于图像分割成不同的区域或对象,以及纹理分析和形状识别等。

  6. 任意形状聚类的识别:层次聚类适用于任意形状的聚类,并且对样本的输入顺序是不敏感的。它能够处理非凸形状的簇和大小差别很大的簇。

  7. 数据预处理:在样本量较大的情况下,层次聚类可以用于数据预处理工作,尤其是在聚类分析无法提供明确的行动指向时,聚类结果更多是为后期挖掘和分析工作提供处理和参考。

  8. 社交网络分析:层次聚类可以用于发现社交网络中的社群结构,帮助分析社交网络中的连接和群体。

层次聚类不需要事先指定聚类的数量,而是生成一个由层次结构组成的聚类树(称为树状图或dendrogram)。层次聚类主要分为两种类型:凝聚型(Agglomerative)和分裂型(Divisive)。

凝聚型层次聚类(Agglomerative Hierarchical Clustering)

凝聚型层次聚类是一种自底向上的方法,它从每个数据点作为单独的聚类开始,逐步将最近的聚类合并,直到所有数据点都合并成一个大的聚类,或者达到某个停止条件。

步骤如下:

  1. 初始化:将每个数据点视为一个单独的聚类。

  2. 计算距离:计算所有聚类之间的距离。常用的距离度量方法包括:

    • 单链接(Single Linkage):两个聚类之间的最小距离。
    • 完全链接(Complete Linkage):两个聚类之间的最大距离。
    • 平均链接(Average Linkage):两个聚类中所有点对的平均距离。
    • Ward's 方法:最小化聚类内的方差,即两个聚类合并后总的方差增加最小。
  3. 合并聚类:选择距离最近的两个聚类进行合并。

  4. 更新距离矩阵:合并后,更新聚类间的距离矩阵。

  5. 重复步骤2-4:直到所有数据点都合并成一个聚类,或者达到预设的聚类数量。

  6. 生成树状图:通过记录每次合并的聚类和距离,可以生成一个树状图来展示聚类的层次结构。

分裂型层次聚类(Divisive Hierarchical Clustering)

分裂型层次聚类是一种自顶向下的方法,它从所有数据点作为一个大的聚类开始,逐步将聚类分裂成更小的聚类。

步骤如下:

  1. 初始化:将所有数据点作为一个大的聚类。

  2. 选择聚类:选择一个聚类进行分裂。通常选择具有最大直径(最远点对距离)或最大方差的聚类。

  3. 分裂聚类:将选定的聚类分裂成两个子聚类。分裂的方式可以是垂直于最大方差的方向,或者基于某种距离度量。

  4. 更新聚类集合:将分裂后的子聚类加入到聚类集合中。

  5. 重复步骤2-4:直到每个聚类只包含一个数据点,或者达到预设的聚类数量。

  6. 生成树状图:通过记录每次分裂的聚类,可以生成一个树状图来展示聚类的层次结构。

凝聚型层次聚类:

% X是一个包含数据点的矩阵,每行代表一个数据点,每列代表一个特征
X = rand(10, 3); % 随机生成10个数据点,每个数据点有3个特征

% 使用linkage函数进行层次聚类
% 'ward'是链接方法,也可以使用'single', 'complete', 'average'等
Z = linkage(X, 'ward');

% 使用dendrogram函数绘制树状图
figure;
dendrogram(Z);
title('层次聚类树状图');
xlabel('数据点');
ylabel('距离');

% 如果你想将数据点划分为K个聚类,可以使用cluster函数
K = 3; % 假设我们想将数据分为3个聚类
clusters = cluster(Z, 'maxclust', K);

% 可视化聚类结果
figure;
gscatter(X(:,1), X(:,2), clusters);
title('层次聚类结果');
xlabel('特征1');
ylabel('特征2');

在这个例子中,我们首先生成了一个随机的数据矩阵X,然后使用linkage函数和ward方法进行层次聚类。linkage函数返回一个矩阵Z,它包含了构建树状图所需的所有信息。

接下来,我们使用dendrogram函数来绘制树状图,它展示了数据点是如何逐步合并成聚类的。

最后,我们使用cluster函数将数据点划分为K个聚类,并使用gscatter函数可视化聚类结果。在这个例子中,我们假设我们想要将数据点划分为3个聚类。

请注意,这个例子使用了随机生成的数据,你可以替换X为你自己的数据集来执行层次聚类。此外,你可以根据需要选择不同的链接方法和其他参数。

标签:层次,树状,距离,分裂,matlab,聚类,数据
From: https://blog.csdn.net/Dengdabenzhu/article/details/143081936

相关文章

  • matlab点击实时绘制bezier曲线
    贝塞尔曲线的原理贝塞尔曲线是通过一组控制点定义的参数曲线。曲线不会直接穿过这些点,但这些点会影响曲线的形状。控制点确定了曲线的弯曲程度和方向。贝塞尔曲线的数学公式基于伯恩斯坦多项式(BernsteinPolynomials)。对于一个n次的贝塞尔曲线,它由n+1个控制点​定义。曲线......
  • MATLAB 工具箱详细重点知识点概述 MATLAB 工具箱使用案例
    一、章节目录MATLAB工具箱概述常见MATLAB工具箱介绍MATLAB工具箱使用案例展示学习MATLAB工具箱的方法MATLAB工具箱的发展趋势二、各章节知识点总结MATLAB工具箱概述MATLAB是一种广泛应用于科学计算、数据分析、算法开发等领域的高级编程语言和交互式环境。MA......
  • 数学建模与数学实验习题4.4.2答案matlab
    炼油厂将ABC三种原油加工成甲乙丙三种汽油,一桶原油加工成一桶汽油的费用为4元,每天至多能加工汽油14000桶,原油的买入价,买入量,辛烷值,硫的含量以及汽油的卖出价,需求量辛烷值和硫含量由下表给出,如何安排生产计划使利润最大一般来说,做广告可以增加销售,估计一天向一种汽油投......
  • Matlab 生成“少帅下飞机”粒子边缘特效(附源代码)
    这里是使用Matlab生成的“少帅下飞机”粒子边缘特效,大家也可以去尝试一下,文末附视频素材和源码,需要Matlab下载教程的可以私信后台哦!本期视频素材及matlab源码下载链接:https://pan.quark.cn/s/37f034f9a180此处改为自己的文件路径即可%读取视频videoFile="D:\少帅下飞......
  • RRT*路径搜索算法matlab代码
    一、算法简介      RRT*路径搜索算法相比于RRT路径搜索算法多了重选父节点和重布线的过程:二、实现效果对比(比RRT算法更光滑) RRT路径搜索算法实现效果RRT*路径搜索算法实现效果三、代码完整代码私聊!......
  • 粒子群算法应用——聚类优化
    粒子群算法详见:https://blog.csdn.net/liutianbao2018/article/details/142743205目录1K均值聚类原理1.1什么是聚类1.2K均值聚类原理2PSO改进K均值聚类3结果对比1K均值聚类原理1.1什么是聚类聚类是一种无监督学习方法,通过相似性度量将数据点划分为多个簇,使得同......
  • Matlab数学基本使用
    文章目录一、求一元多次方程二、求解线性方程组三、求定积分为什么需要用点运算符:例子对比:总结:一、求一元多次方程求解2x^5-3x3+71x2-9x+13=0第一行命令是建立多项式系数向量,第二行是调用roots函数求方程的全部根二、求解线性方程组2x+3y-z=28x+2y+3z=44......
  • 基于分时电价策略的家庭能量系统优化(Matlab代码实现)
     ......
  • 【sop】基于灵敏度分析的有源配电网智能软开关优化配置[升级1](Matlab代码实现)
    ......
  • 基于灰狼优化算法(GWO)解决柔性作业车间调度问题(Matlab代码实现)
     ......