资源简介

是ISODATA的实现,题目比较简单,有很大的一致性,代码280余行

资源截图

代码片段和文件信息

function ISODATA()
clc;
format long;
K = 2;thetaN = 2;thetas = 1;thetad = 4;L = 1;I = 4;Nc = 1;N = 8;

point = [00;11;22;43;53;44;54;65];          %所有点
cate = zeros(5N);                                  %用来存储每一分类中点的序号
mymean = zeros(52);                                %用来存储每一分类的中心
for n = 1:8                                         %初始分类
    cate(1n) = n;
end
c = 1;                                              %类的数目
deltaj = zeros(51);                                %每一类样本与其中心的平均距离
delta = 0;                                          %总平均距离

for n = 1:I                                         %I次迭代     
    for m = 1:5                                     %计算各分类的中心
        temp = [];
        for l = 1:8
            if cate(ml) ~= 0
                temp = [temppoint(cate(ml):)‘];
            end
        end
        if ~isempty(temp)
            mymean(m:) = mean(temp2)‘;
        end
    end
    temp = 0;
    for m = 1:c                                     %去掉样本数过少的类
        if NumCate(catem) < thetaN
            for l = 1:NumCate(catem)
                idx = NearestCate(mymeanpointcate(ml)cm);
                cate(idxNumCate(cateidx)+1) = cate(ml);
            end
            cate(m:) = zeros(1N);
            temp = temp + 1;
        end
    end
    for m = 1:5                                     %重新计算各分类的中心
        temp = [];
        for l = 1:8
            if cate(ml) ~= 0
                temp = [temppoint(cate(ml):)‘];
            end
        end
        if ~isempty(temp)
            mymean(m:) = mean(temp2)‘;
        end
    end
    for l = 1:c                                     %计算每一类样本与其中心的平均距离
        temp = 0;
        for k = 1:NumCate(catel)
            temp = temp + (point(cate(lk)1) - mymean(l1))^2 + (point(cate(lk)2) - mymean(l2))^2;
        end
        deltaj(l1) = temp / NumCate(catel);
    end
    delta = 0;                                      %计算总平均距离
    for l = 1:c
        delta = delta + NumCate(catel) * deltaj(l1);
    end
    delta = delta / N;
    sigma = Sigma(catecpointmymean);             %计算每个类的各维标准偏差
    sigma_max = max(sigma[]2);
    [sigma_max_maxidx] = max(sigma_max);
    if c <= K/2 | (sigma_max_max > thetas & deltaj(idx) > delta & NumCate(catec) > 2 * (thetaN + 1))       %分裂
        c = c + 1;
        center1 = mymean(idx:) + 0.5 * sigma;
        center2 = mymean(idx:) - 0.5 * sigma;
        temp = zeros(2NumCate(cateidx));
        n1 = 0;n2 = 0;
        for m = 1:NumCate(cateidx)
            if (point(cate(idxm)1) - center1(11))^2 + (point(cate(idxm)2) - center1(

评论

共有 条评论