[机器学习]一维聚类:最大类计算

版权声明:转载请说明Zhonglihao原创 https://blog.csdn.net/xeonmm1/article/details/88084447
% 一维数组聚类,找出规模最大的类
clc;clear all;close all;

% 待聚类的一维数据 
data_1 = 20*ones(15,1) + randn(15,1);
data_2 = 5*ones(5,1) + randn(5,1);
data_3 = 15*ones(5,1) + randn(5,1);
data_4 = 50*ones(2,1) + randn(2,1);
data_5 = 40*ones(3,1) + randn(3,1);
data = [data_1' data_2' data_3' data_4' data_5'];
% 随机化数组分布
index = randperm(length(data));
data = data(index);

figure(1);bar(data);

% 对数组进行排序
data_sort = sort(data);
% 记录后者对前者的增长比例 在5%以下反比即衰减基本一致 要求不严格可以混用
data_ratio = zeros(1,length(data_sort))
data_ratio(1) = 1;% 第一个元素自比为1
for i = 2:1:length(data_sort)
    data_ratio(i) = data_sort(i)./data_sort(i-1);
end

% 设定限制比例
r_limit = 1.05;
% 记录最大类元素位置
i = 1;j = 0;max_element = 1;
i_max = 1;j_max = 0;
for k = 1:1:length(data_sort)
    if(data_ratio(k)<=r_limit)
        j = j + 1;
        if((j-i+1)>=max_element)
            max_element = j-i+1;
            i_max = i;
            j_max = j;
        end
    else
        i = k;j = k;
    end
end

figure(2);bar(data_sort);
max_class_value = data_sort(i_max:j_max)









猜你喜欢

转载自blog.csdn.net/xeonmm1/article/details/88084447