k-means及isodata算法的matlab实现

这篇博客介绍了博主在模式识别课程中学习的k-means和isodata聚类算法,并分享了使用MATLAB编写的初步实现代码,尽管还有优化空间,但提供了算法的基础实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近上模式识别课涉及到聚类算法,主要讲了一下kmeans和isodata,这里是我用matlab实现的两个算法的粗略版,还有很大的改进空间,先把原始版放这上面。

function Kmeans(x,k)
n = size(x,1);
mean = cell(k,1);
for i=1:k
    mean{i} = x(i,:);%initialize 
end
while 1
    class = cell(k,1);%clear before calculate
    for i=1:n
        num = Belong2(x(i,:),mean);
        class{num} = [class{num};x(i,:)];
    end
    %calculate new means
    mean_old = mean;
    for i=1:k
        mean{i} =sum(class{i})./size(class{i},1);
    end
    if isequal(mean_old,mean)
        for j=1:k
            fprintf('第%d类:\n',j)
            disp(class{j});
        end
       break;
    end
end
end
function number = Belong2(x_i,means)
    INF = 10000;
    min = INF;
    kk = size(means,1);
    number = 1;
    for i=1:kk
        if norm(x_i - means{i}) < min
            min = norm(x_i - means{i});
            number = i;
        end
    end
end

isodata

function ISODATA(x,K,theta_N,theta_S,theta_c,L,I)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%input parameters%%%%%%
% x : data
% K : 预期的聚类中心数
% theta_N : 每一聚类中心中最少的样本数,少于此数就不作为一个独立的聚类
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值