聚类之hierachical clustering算法
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算法相关推荐
- python聚类wardhierachical_聚类之hierachical clustering算法
hierachical clustering系统聚类算法,将模式样本按距离准则逐步分类,类别由多到少(初始是每个样本一个类别),直到获得合适的分类要求为止.主要参照了蔡元龙老师的<模式识别一书& ...
- 谱聚类(Spectral Clustering)算法介绍
一. 前言 本来想写关于聚类系列算法的介绍,但是聚类系列的其它几个算法原理比较简单,网上有大量的教程可以查阅.这里主要是介绍一下谱聚类算法,做一个学习笔记,同时也希望对想要了解该算法的朋友有一个帮助. ...
- python谱聚类算法_Python机器学习高级算法!谱聚类(Spectal Clustering)算法分析和实例详解...
谱聚类(Spectal Clustering)算法是聚类算法的一种,比起传统的K-Means聚类算法,谱聚类算法的效果更优秀,其计算量也小很多,除了谱聚类和K-Means聚类算法,另外还有密度聚类和层 ...
- 谱聚类(Spectral Clustering)1——算法原理
文章目录 简介 1. 准备工作 1.1 邻接矩阵 1.2 度矩阵 1.3 拉普拉斯矩阵 1.3.1 非归一化拉普拉斯矩阵 1.3.2 归一化拉普拉斯矩阵 1.4 相似图 1.4.1 ϵ\epsilon ...
- 常见聚类算法及使用--层次聚类(Agglomerative clustering)
文章目录 前言 层次聚类的实现 聚类过程 代码实现 参考文献 前言 层次聚类顾名思义就是按照某个层次对样本集进行聚类操作,这里的层次实际上指的就是某种距离定义. 层次聚类最终的目的是消减类别的数量,所 ...
- 【ML算法学习】核K均值聚类Kernel K-Means Clustering(KKMC)
核K均值聚类Kernel K-Means Clustering(KKMC) 1. 理论基础回顾 (1)核函数定义(统计学习方法定义7.6) 定义内容:假设有输入空间 X \mathcal{X} X( ...
- 密度聚类(Density peaks Clustering)Python实现
密度聚类(Density peaks Clustering)Python实现 原文:http://blog.csdn.net/kryolith/article/details/39832573 Rod ...
- 聚类方法(Clustering)
文章目录 1. 聚类基本概念 1.1 相似度.距离 1.2 类.簇 1.3 类之间的距离 2. 层次聚类 3. K均值聚类 3.1 模型 3.2 策略 3.3 算法 3.4 算法特性 4. sklea ...
- 谱聚类(spectral clustering)原理总结
谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也 ...
最新文章
- Linux 访问文件的acl信息,linux文件权限管理与ACL访问控制列表
- 【Linux网络编程】UDP编程
- JQuery官方学习资料(译):遍历JQuery对象和非JQuery对象
- keepalived高可用+nginx负载均衡
- mysql工作原理(网络搜索整理的)
- Atitit 提现功能安全条例 目录 1. 防余额篡改	1 2. 大额 频繁交易预警系统	1 3. 增加审核 流程	1 4. 增加审计	1 5. 财务出款核对	1 6. Other	2 6.1. 数
- 树莓派4B配置usb摄像头
- 一直用破解软件?可以试试学生优惠!
- 【IT之路】Docker拉取镜像查看版本
- pandas——显示设置
- apicloud 项目常用插件
- git提交提示workspace.xml出现conflicted
- 正则表达式中/g的用法
- 【电路】电容(二)——滤波电容
- ob集群安装部署相关
- 小程序开发之瀑布流布局
- ESP32S3系列--SPI主机驱动详解(一)
- 内核领域-功耗机型的续航基线优化问题-技术调研报告-王井玉_20211216
- linux下使用mdadm组软raid,Linux下使用mdadm创建和管理软raid
- 微信公众号支付对接流程