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_train

pars.g{i}=[train_y(i)];

end

pars.box={pars.g};

for i=1:pars.num_train

for j=1:i

euclidean(i,j)=norm(train_x(i,:)-train_x(j,:));

end

end

for i=1:pars.iter

if i==1

[pars,new_euclidean{i}]=hierar_clus(pars,euclidean,euclidean);

else

[pars,new_euclidean{i}]=hierar_clus(pars,new_euclidean{i-1},euclidean);

end

end

其中程序中用到了自己编写的程序[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_length

for j=1:i

first_length=length(pars.g{i});

second_length=length(pars.g{j});

for p=1:first_length

for q=1:second_length

if pars.g{i}(p)

temp(p,q)=euclidean(pars.g{j}(q),pars.g{i}(p));

else

temp(p,q)=euclidean(pars.g{i}(p),pars.g{j}(q));

end

end

end

d(i,j)=min(temp(:));

temp(:)=[];

end

end

g=pars.g;

python聚类wardhierachical_聚类之hierachical clustering算法相关推荐

  1. 聚类之hierachical clustering算法

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

  2. python 三种聚类算法(K-means,AGNES,DBScan)

    python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan) 更新时间:2019年06月27日 14:44:44   作者:weixin_42134141 这篇文章主要介绍了pyth ...

  3. 层次聚类python实现_聚类算法之层次聚类(Python实现)

    起步 层次聚类( Hierarchical Clustering )是聚类算法的一种,通过计算不同类别的相似度类创建一个有层次的嵌套的树. 层次聚类算法介绍 假设有 n 个待聚类的样本,对于层次聚类算 ...

  4. python 凝聚层次聚类_关于层次聚类算法的python实现

    from scipy.cluster import hierarchy 0.层次聚类的概念 层次聚类和k-means一样都是很常用的聚类方法.层次聚类是对群体的划分,最终将样本划分为树状的结构.他的基 ...

  5. 聚类算法评价指标python实现_聚类算法的评价指标

    如果有了类别标签,那么聚类结果也可以像分类那样计算准确率和召回率.scikitlearn上说:"其实不应该将分类标签作为聚类结果的评价指标,除非你有相关的先验知识或某种假设,知道这种分类类内 ...

  6. python实现谱聚类算法

    谱聚类的理论 参考 谱聚类(spectral clustering)原理总结 算法流程: sklearn对应的参数解说:sklearn.cluster.SpectralClustering Pytho ...

  7. python 两阶段聚类_挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法...

    转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html 两步聚类算法是在SPSS Modeler中使用的 ...

  8. Python使用K-means聚类算法进行分类案例一则

    K-means算法是经典的基于划分的聚类方法,是十大经典数据挖掘算法之一,其基本思想是:以空间中k个点为中心进行聚类,对最靠近它们的对象归类.通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类 ...

  9. [Python] [机器学习] 基础聚类算法(K-means、AHC、DBSCAN)简介及可视化代码

    之前写的入门级介绍,有点久远有些ref找不着了 文章目录 简介 目标 作用 类型 聚类vs分类 K-means [K-means] 伪代码 [K-means] 过程详解 [K-means] 初始点的选 ...

最新文章

  1. 第六课.模型评估与模型选择
  2. 中国二维码应用被国外标准垄断 信息安全问题频发
  3. Selenium3自动化测试——3. 控制浏览器
  4. centos网络安装
  5. (简单)华为荣耀4A SCL-TL00的usb调试模式在哪里打开的方法
  6. JZOJ 5678. 【GDOI2018Day2模拟4.21】果树
  7. 《Java 核心技术卷1 第10版》学习笔记------ Object类的 hashCode 方法
  8. Cloud for Customer的shell布局介绍
  9. Linux下oracle11g 导入导出操作详细
  10. 如何确定h.264的码率
  11. 敏捷开发你必须知道的7件事
  12. sv_labs学习笔记——sv_lab5_下(System Verilog)
  13. 牛客网 2018年全国多校算法寒假训练营练习比赛(第五场) 题解
  14. Could not install from “tippy.js\dist\tippy.css“ as it does not contain a package.json file.
  15. 数字图像入门 色彩的抖动
  16. 开源免费cms---十大主流建站的CMS系统介绍
  17. 上海地铁二号线各车站换乘和时刻表
  18. 抖音一个老人和一个机器人歌曲_抖音一禅小和尚背景音乐汇总 全网最火bgm都在这...
  19. DevOps 全栈开发基础
  20. 俄罗斯方块Tetris(C基础,Linux终端)

热门文章

  1. C3D:视频动作分类demo实现
  2. 使用Python爬取马蜂窝网站的游记和照片
  3. matlab给图像加网格,matlab把图像进行网格化,或者是在图像中画网格
  4. 泉州数字平台让城市管理更“智慧” 数分钟“搞掂”
  5. 读书笔记-MongoDb-简介
  6. UR机器人(1)-安装和设置
  7. 前端面试总结(vue篇)
  8. IDEA2020.1基于Maven开发spring cloud项目报错 程序包 com.xxx.xxx.xxx不存在
  9. 安装sentence-transformers
  10. AoA-ToF(信号到达角-飞行时间)联合估计详解