python聚类wardhierachical_聚类之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_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算法相关推荐
- 聚类之hierachical clustering算法
hierachical clustering系统聚类算法,将模式样本按距离准则逐步分类,类别由多到少(初始是每个样本一个类别),直到获得合适的分类要求为止.主要参照了蔡元龙老师的<模式识别一书& ...
- python 三种聚类算法(K-means,AGNES,DBScan)
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan) 更新时间:2019年06月27日 14:44:44 作者:weixin_42134141 这篇文章主要介绍了pyth ...
- 层次聚类python实现_聚类算法之层次聚类(Python实现)
起步 层次聚类( Hierarchical Clustering )是聚类算法的一种,通过计算不同类别的相似度类创建一个有层次的嵌套的树. 层次聚类算法介绍 假设有 n 个待聚类的样本,对于层次聚类算 ...
- python 凝聚层次聚类_关于层次聚类算法的python实现
from scipy.cluster import hierarchy 0.层次聚类的概念 层次聚类和k-means一样都是很常用的聚类方法.层次聚类是对群体的划分,最终将样本划分为树状的结构.他的基 ...
- 聚类算法评价指标python实现_聚类算法的评价指标
如果有了类别标签,那么聚类结果也可以像分类那样计算准确率和召回率.scikitlearn上说:"其实不应该将分类标签作为聚类结果的评价指标,除非你有相关的先验知识或某种假设,知道这种分类类内 ...
- python实现谱聚类算法
谱聚类的理论 参考 谱聚类(spectral clustering)原理总结 算法流程: sklearn对应的参数解说:sklearn.cluster.SpectralClustering Pytho ...
- python 两阶段聚类_挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法...
转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html 两步聚类算法是在SPSS Modeler中使用的 ...
- Python使用K-means聚类算法进行分类案例一则
K-means算法是经典的基于划分的聚类方法,是十大经典数据挖掘算法之一,其基本思想是:以空间中k个点为中心进行聚类,对最靠近它们的对象归类.通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类 ...
- [Python] [机器学习] 基础聚类算法(K-means、AHC、DBSCAN)简介及可视化代码
之前写的入门级介绍,有点久远有些ref找不着了 文章目录 简介 目标 作用 类型 聚类vs分类 K-means [K-means] 伪代码 [K-means] 过程详解 [K-means] 初始点的选 ...
最新文章
- 第六课.模型评估与模型选择
- 中国二维码应用被国外标准垄断 信息安全问题频发
- Selenium3自动化测试——3. 控制浏览器
- centos网络安装
- (简单)华为荣耀4A SCL-TL00的usb调试模式在哪里打开的方法
- JZOJ 5678. 【GDOI2018Day2模拟4.21】果树
- 《Java 核心技术卷1 第10版》学习笔记------ Object类的 hashCode 方法
- Cloud for Customer的shell布局介绍
- Linux下oracle11g 导入导出操作详细
- 如何确定h.264的码率
- 敏捷开发你必须知道的7件事
- sv_labs学习笔记——sv_lab5_下(System Verilog)
- 牛客网 2018年全国多校算法寒假训练营练习比赛(第五场) 题解
- Could not install from “tippy.js\dist\tippy.css“ as it does not contain a package.json file.
- 数字图像入门 色彩的抖动
- 开源免费cms---十大主流建站的CMS系统介绍
- 上海地铁二号线各车站换乘和时刻表
- 抖音一个老人和一个机器人歌曲_抖音一禅小和尚背景音乐汇总 全网最火bgm都在这...
- DevOps 全栈开发基础
- 俄罗斯方块Tetris(C基础,Linux终端)
热门文章
- C3D:视频动作分类demo实现
- 使用Python爬取马蜂窝网站的游记和照片
- matlab给图像加网格,matlab把图像进行网格化,或者是在图像中画网格
- 泉州数字平台让城市管理更“智慧” 数分钟“搞掂”
- 读书笔记-MongoDb-简介
- UR机器人(1)-安装和设置
- 前端面试总结(vue篇)
- IDEA2020.1基于Maven开发spring cloud项目报错 程序包 com.xxx.xxx.xxx不存在
- 安装sentence-transformers
- AoA-ToF(信号到达角-飞行时间)联合估计详解