聚类之isodata算法

本文介绍了Isodata聚类算法,这是一种动态调整聚类数量的迭代算法,与K-均值算法不同。作者通过MATLAB实现该算法,并指出其对初始聚类中心的选择敏感,可能影响最终结果。在高维样本聚类上表现较好,但简单样本时可能不如K-means。
摘要由CSDN通过智能技术生成

近期上课学习了isodata的迭代自组织数据分析算法,该算法是一个动态的聚类算法,与K-均值算法有相似之处,即聚类中心同样是通过样本均值的迭代运算来决定的,但不同k-均值算法的是,isodata算法是可以通过计算的中间过程,对聚类中心的数量进行调整。对一个算法,要想真正的了解,是能够在学习完该算法的基础上,能够自主地编写,在编写过程中你会发现在学习过程中的很多不足。因此,尽管网上已经有了成熟的isodata算法程序,楼主还是不才,自己编写程序进行该算法的学习。该算法主要参照了蔡元龙老师的《模式识别》一书,程序是用matlab编写。该算法写的比较急,必然会出现一些不足,请大家能够多多指出,共同进步。

首先,是对一系列参数的初始化,能力有限,所以在代码中pars.L中的参数必须是1,即一次迭代运算中可以合并的聚类中心的最多对数最多是1,这一点会及时更新。

%programed by Lu Qi,my email:qqlu1992@gmail.com
clear all
clc
% train_x=[0 0;0 1;1 0;1 1;7 7;8 8;9 9;8 7;8 9];
 load data_train
%参数的初始化
%step one
[pars.num_train,pars.length]=size(train_x);%num_train代表样本的数量,length代表样本的维数
pars.num_initial_cluster=5;
pars.num_cluster=pars.num_initial_cluster;
initial=randperm(pars.num_train);
pars.iter_max=20;
initial_point=initial(1:pars.num_initial_cluster);
pars.z{1}=train_x(initial_point,:); %第一次初始聚类中心
clear initial initial_point
pars.K=5;
pars.k=1;   %k代表分裂处理时的加减
pars.sita_N=3;   %每一聚类域中最少的样本数目,如少于此数就不作为一个独立的聚类
pars.sita_S=1;   %聚类域中样本距离分布的标准差
pars.sita_C=1;   %两聚类中心之间的最小距离,如小于此数,两个聚类进行合并
pars.L=1;        %一次迭代运算中可以合并的聚类中心的最多对数
pars.iter=1;
接着,是通过上一次的聚类中心进行归类并更新各聚类中心值及类内和类间的平均距离。

for iter=1:pars.iter_max
    for i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值