hierachical clustering系统聚类算法,将模式样本按距离准则逐步分类,类别由多到少(初始是每个样本一个类别),直到获得合适的分类要求为止。主要参照了蔡元龙老师的《模式识别一书》。

该算法如下:
第一步:设初始模式样本共有N个,每个样本自成一类,即建立N类,。计算各类之间的距离(初始时即为各样本间的距离),得到一个N*N维的距离矩阵D(0)。这里,标号(0)表示聚类开始运算前的状态。
第二步:假设前一步聚类运算中已求得距离矩阵D(n),n为逐次聚类合并的次数,则求D(n)中的最小元素。如果它是Gi(n)和Gj(n)两类之间的距离,则将Gi(n)和Gj(n)两类合并为一类 ,由此建立新的分类: 。
第三步:计算合并后新类别之间的距离,得D(n+1)。
计算 与其它没有发生合并的 之间的距离,可采用多种不同的距离计算准则进行计算。
第四步:返回第二步,重复计算及合并,直到得到满意的分类结果。(如:达到所需的聚类数目,或D(n)中的最小分量超过给定阈值D等。

matlab程序编写:

%Programed by Lu Qi,University of Chinese Academy of Sciences
%my email:qqlu1992@gmail.com
clear all
clc
% train_x=[0  3  1  2  0;
%          1  3  0  1  0;
%          3  3  0  0  1;
%          1  1  0  2  0;
%          3  2  1  2  1;
%          4  1  1  1  0];
train_x=[0 1 3 1 3 4;3 3 3 1 2 1;1 0 0 0 1 1;2 1 0 2 2 1;0 0 1 0 1 0
];[pars.num_train,pars.length]=size(train_x);%initial代表样本的数量,length代表样本的维数pars.num_cluster=2;pars.iter=pars.num_train-pars.num_cluster;train_y=1:pars.num_train';for i=1:pars.num_trainpars.g{i}=[train_y(i)];endpars.box={pars.g};for i=1:pars.num_trainfor j=1:ieuclidean(i,j)=norm(train_x(i,:)-train_x(j,:));endendfor i=1:pars.iterif i==1[pars,new_euclidean{i}]=hierar_clus(pars,euclidean,euclidean);else[pars,new_euclidean{i}]=hierar_clus(pars,new_euclidean{i-1},euclidean);    endend

其中程序中用到了自己编写的程序[pars,d]=hierar_clus(pars,new_euclidean,euclidean),该程序如下:

function [pars,d]=hierar_clus(pars,new_euclidean,euclidean)
%Programed by Lu Qi,University of Chinese Academy of Sciences
%my email:qqlu1992@gmail.com
% input  pars:各类参数
%        new_euclidean:每次合并之后的新矩阵
%        euclidean:刚开始时的距离矩阵
% output d:新形成的距离矩阵
%        g:新形成的聚类盒子[x,y]=size(new_euclidean);new_euclidean(find(new_euclidean==0))=max(new_euclidean(:))+1; nimn=min(new_euclidean(:));[irowmin,icolmin]=find(new_euclidean==min(new_euclidean(:)));pars.g{min(irowmin,icolmin)}=[pars.g{min(irowmin,icolmin)} pars.g{max(irowmin,icolmin)}];pars.g(max(irowmin,icolmin))=[];new_euclidean(find(new_euclidean==(max(new_euclidean(:)))))=0;box_length=length(pars.g);pars.box(end+1)={pars.g};for i=1:box_lengthfor j=1:ifirst_length=length(pars.g{i});second_length=length(pars.g{j});for p=1:first_lengthfor q=1:second_lengthif pars.g{i}(p)<pars.g{j}(q)temp(p,q)=euclidean(pars.g{j}(q),pars.g{i}(p));elsetemp(p,q)=euclidean(pars.g{i}(p),pars.g{j}(q));endendendd(i,j)=min(temp(:));temp(:)=[];endendg=pars.g;

聚类之hierachical clustering算法相关推荐

  1. python聚类wardhierachical_聚类之hierachical clustering算法

    hierachical clustering系统聚类算法,将模式样本按距离准则逐步分类,类别由多到少(初始是每个样本一个类别),直到获得合适的分类要求为止.主要参照了蔡元龙老师的<模式识别一书& ...

  2. 谱聚类(Spectral Clustering)算法介绍

    一. 前言 本来想写关于聚类系列算法的介绍,但是聚类系列的其它几个算法原理比较简单,网上有大量的教程可以查阅.这里主要是介绍一下谱聚类算法,做一个学习笔记,同时也希望对想要了解该算法的朋友有一个帮助. ...

  3. python谱聚类算法_Python机器学习高级算法!谱聚类(Spectal Clustering)算法分析和实例详解...

    谱聚类(Spectal Clustering)算法是聚类算法的一种,比起传统的K-Means聚类算法,谱聚类算法的效果更优秀,其计算量也小很多,除了谱聚类和K-Means聚类算法,另外还有密度聚类和层 ...

  4. 谱聚类(Spectral Clustering)1——算法原理

    文章目录 简介 1. 准备工作 1.1 邻接矩阵 1.2 度矩阵 1.3 拉普拉斯矩阵 1.3.1 非归一化拉普拉斯矩阵 1.3.2 归一化拉普拉斯矩阵 1.4 相似图 1.4.1 ϵ\epsilon ...

  5. 常见聚类算法及使用--层次聚类(Agglomerative clustering)

    文章目录 前言 层次聚类的实现 聚类过程 代码实现 参考文献 前言 层次聚类顾名思义就是按照某个层次对样本集进行聚类操作,这里的层次实际上指的就是某种距离定义. 层次聚类最终的目的是消减类别的数量,所 ...

  6. 【ML算法学习】核K均值聚类Kernel K-Means Clustering(KKMC)

    核K均值聚类Kernel K-Means Clustering(KKMC) 1. 理论基础回顾 (1)核函数定义(统计学习方法定义7.6) 定义内容:假设有输入空间 X \mathcal{X} X( ...

  7. 密度聚类(Density peaks Clustering)Python实现

    密度聚类(Density peaks Clustering)Python实现 原文:http://blog.csdn.net/kryolith/article/details/39832573 Rod ...

  8. 聚类方法(Clustering)

    文章目录 1. 聚类基本概念 1.1 相似度.距离 1.2 类.簇 1.3 类之间的距离 2. 层次聚类 3. K均值聚类 3.1 模型 3.2 策略 3.3 算法 3.4 算法特性 4. sklea ...

  9. 谱聚类(spectral clustering)原理总结

    谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也 ...

最新文章

  1. Linux 访问文件的acl信息,linux文件权限管理与ACL访问控制列表
  2. 【Linux网络编程】UDP编程
  3. JQuery官方学习资料(译):遍历JQuery对象和非JQuery对象
  4. keepalived高可用+nginx负载均衡
  5. mysql工作原理(网络搜索整理的)
  6. Atitit 提现功能安全条例 目录 1. 防余额篡改 1 2. 大额 频繁交易预警系统 1 3. 增加审核 流程 1 4. 增加审计 1 5. 财务出款核对 1 6. Other 2 6.1. 数
  7. 树莓派4B配置usb摄像头
  8. 一直用破解软件?可以试试学生优惠!
  9. 【IT之路】Docker拉取镜像查看版本
  10. pandas——显示设置
  11. apicloud 项目常用插件
  12. git提交提示workspace.xml出现conflicted
  13. 正则表达式中/g的用法
  14. 【电路】电容(二)——滤波电容
  15. ob集群安装部署相关
  16. 小程序开发之瀑布流布局
  17. ESP32S3系列--SPI主机驱动详解(一)
  18. 内核领域-功耗机型的续航基线优化问题-技术调研报告-王井玉_20211216
  19. linux下使用mdadm组软raid,Linux下使用mdadm创建和管理软raid
  20. 微信公众号支付对接流程

热门文章

  1. WINCE6.0更换桌面壁纸和图标
  2. Oracle_sql优化基础——优化器总结
  3. struts2的DevMode(开发模式)模式
  4. UIColor的封装
  5. 移动端重构系列6——切入切出动画
  6. iOS Provisioning Portal概述
  7. 内网更新服务器的搭建(WSUS)
  8. DES加密解密算法Java实现
  9. 周立功CAN二次开发接口使用(C#)
  10. linux sh 字符截取,shell字符截断