聚类算法5——Hierarchy 层次聚类(算法步骤及matlab代码)

看了西关书的聚类算法,算法原理很容易明白,接下来就是整理成自己的理解思路,然后一步一步来实现算法,那么就来做吧。

hierarchyClustering算法

  1. 思想

不同层次对数据集进行划分,AGENS是一种自底而上的聚合策略。首先将数据集中的每个样本看作初始聚类簇,算法运行中找出距离最近的两个聚类簇进行合并,该过程不断重复直到预设的聚类簇个数。

  1. 算法步骤

输入:样本集D(m,n),聚类簇个数k

输出:聚类簇集C

Step1 初始化聚类簇集合,距离矩阵 init_hierarchy()

输入:样本集D; 输出:聚类簇集,距离矩阵

Step1.1 聚类簇集: 直接将原始数据集赋值给聚类簇集合。(聚类簇类型:结构体,包括样本集合,索引)

Step1.2计算距离矩阵(m,m-1),第一行表示第一个样本与其他样本的距离值(子函数:聚类簇距离度量函数d, get_dist(C1_data,C2_data))

Step2 聚类, hierarchy_clustering()

输入:聚类簇个数k,聚类簇集C,距离矩阵;输出:k个聚类簇集

While 当前聚类集中个数q>k

Step2.1 根据距离函数寻找最近的两个聚类簇Ci, Cj,合并Ci = Ci∪Cj(set_)

Stepg2.2更新聚类簇集合:删除第j个聚类簇,j:end的聚类簇索引依次-1

Step2.3更新距离矩阵M:删除M的第j行第j列,更新i行j(1:q-1)列,j(1:q-1)行i列

q=q-1

end while

层次聚类代码下载链接

ok啦,接下来不废话上代码(Matlab发布形式)

function Main()
clc;clear;close all
melon_data = load('melon4.0.txt');
melon_data(:,1)=[];k=4;
%step1
[dist_matrix,cluster_set]= init_hierarchy(melon_data);
%step2
cluster_ret = hierarchy_clustering(dist_matrix,cluster_set,k);
show(cluster_ret);
show_cluster_tree(melon_data);
end

subfunction

%step1
function [dist_matrix,cluster_set]= init_hierarchy(melon_data)
cluster_set=[];
[m,~] =size(melon_data);
dist_matrix = zeros(m,m);
for i=1:m
    cluster.ind = i;
    cluster.data = melon_data(i,:);
    cluster_set =  [cluster_set;cluster];
end
for i = 1:m
   for j = i+1:m
       dist_matrix(i,j) =get_dist(cluster_set(i),cluster_set(j));
       dist_matrix(j,i) =dist_matrix(i,j);
   end
end
end
%get two cluster dis
function dist =get_dist(cluster1,cluster2)
[m1,~]=size(cluster1.data);%2x2
dist = 10000;
for i =1:m1
    tm_dist = pdist2(cluster2.data,cluster1.data(i,:));
    [min_value,~]=min(tm_dist);
    if min_value < dist
        dist = min_value;
    end
end
end
%step2
function cluster = hierarchy_clustering(dist_matrix,cluster_set,k)
while cluster_set(end).ind >k
     [Ci,Cj]= find_closest_cluster(dist_matrix); %Ci<Cj
     cluster_set = update_cluster_set(Ci,Cj,cluster_set);
     dist_matrix  = update_dist_matrix(Ci,Cj,cluster_set,dist_matrix);
end
cluster = cluster_set;
end
function [Ci,Cj]= find_closest_cluster(dist_matrix)
[m,n] = size(dist_matrix);
min_dist = 10000;
start=2;Ci=0;Cj=0;
for i = 1:m-1
    [tem_dist,min_ind] = min(dist_matrix(i,start:n));
    if tem_dist<min_dist
        min_dist=tem_dist;
        Ci =i;
        Cj = min_ind+start-1;
    end
    start = start+1;
end
if Ci>Cj
    tem_c = Cj;
    Cj =Ci;
    Ci =tem_c;
end
end
function cluster = update_cluster_set(Ci,Cj,cluster_set)
for i =Cj+1:length(cluster_set)
    cluster_set(i).ind = cluster_set(i).ind -1;%update
end
% 合并聚类簇,序号小的 合并 序号大的 Ci < Cj
cluster_set(Ci).data = [cluster_set(Ci).data;cluster_set(Cj).data];
cluster_set(Cj)=[]; %delete

cluster = cluster_set;
end

function dist_m  = update_dist_matrix(Ci,Cj,cluster_set,dist_matrix)
%step2.3
dist_matrix(:,Cj)=[];
dist_matrix(Cj,:)=[];
%updat Ci行,1:cluster_set(end).ind 列
for j = 1:cluster_set(end).ind
   dist_matrix(Ci,j) = get_dist(cluster_set(Ci),cluster_set(j));
   dist_matrix(j,Ci) = dist_matrix(Ci,j);
end
dist_m = dist_matrix;
end

function show(cluster_ret)
plot(cluster_ret(1).data(:,1),cluster_ret(1).data(:,2),'or');hold on
plot(cluster_ret(2).data(:,1),cluster_ret(2).data(:,2),'og');
plot(cluster_ret(3).data(:,1),cluster_ret(3).data(:,2),'sr');
plot(cluster_ret(4).data(:,1),cluster_ret(4).data(:,2),'sg');
xlabel('density');ylabel('sugar rate');
end

function show_cluster_tree(melon_data)
Y=pdist(melon_data);
Z = linkage(Y,'single');
dendrogram(Z)
xlabel('sample number');ylabel('cluster distance');
end

ZigBee是一种低功耗、低数据率、低成本的无线通信技术,它被广泛应用于物联网、智能家居等领域。ZigBee网络采用了分层结构,其中包括应用层、网络层、MAC层和物理层。在网络层中,ZigBee通过cluster-tree算法和路由算法来实现节点之间的通信。 Cluster-Tree算法是一种基于多层级结构的路由算法,它将网络中的节点划分为不同的层级,其中包括根节点、集群头节点、集群成员节点和叶子节点。根节点负责整个网络的管理和控制,集群头节点负责集群成员节点的管理和控制,叶子节点是网络中最基本的节点,只能向集群头节点发送数据。 当一个节点需要向其他节点发送数据时,它会通过cluster-tree算法找到最近的集群头节点,并向其发送数据。集群头节点会根据自身的路由表将数据转发给目标节点。如果目标节点不在同一个集群中,集群头节点会将数据转发给更高层级的集群头节点,直到根节点为止。 除了Cluster-Tree算法,ZigBee还采用了一些其他的路由算法,如AODV(Ad-hoc On-demand Distance Vector)算法、LEACH(Low Energy Adaptive Clustering Hierarchy算法等。这些算法都有其特点和优缺点,选择合适的路由算法需要根据具体的应用场景和网络规模来确定。 总的来说,ZigBee的路由算法是基于多层级结构的,通过cluster-tree算法和其他路由算法来实现节点之间的通信。这些算法都有其特点和适用范围,需要根据实际情况进行选择和应用。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值