MATLAB实例:聚类初始化方法与数据归一化方法

MATLAB实例:聚类初始化方法与数据归一化方法

作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/

1. 聚类初始化方法:init_methods.m

function label=init_methods(data, K, choose)
% 输入:无标签数据,聚类数,选择方法
% 输出:聚类标签
if choose==1
    %随机初始化,随机选K行作为聚类中心,并用欧氏距离计算其他点到其聚类,将数据集分为K类,输出每个样例的类标签
    [X_num, ~]=size(data);
    rand_array=randperm(X_num);    %产生1~X_num之间整数的随机排列    
    para_miu=data(rand_array(1:K), :);  %随机排列取前K个数,在X矩阵中取这K行作为初始聚类中心
    %欧氏距离,计算(X-para_miu)^2=X^2+para_miu^2-2*X*para_miu‘,矩阵大小为X_num*K
    distant=repmat(sum(data.*data,2),1,K)+repmat(sum(para_miu.*para_miu,2)‘,X_num,1)-2*data*para_miu‘;
    %返回distant每行最小值所在的下标
    [~,label]=min(distant,[],2);
elseif choose==2
    %用kmeans进行初始化聚类,将数据集聚为K类,输出每个样例的类标签
    label=kmeans(data, K);
elseif choose==3
    %用FCM算法进行初始化
    options=[NaN, NaN, NaN, 0];
    [~, responsivity]=fcm(data, K, options);   %用FCM算法求出隶属度矩阵
    [~, label]=max(responsivity‘, [], 2);
end

2. 数据归一化方法:normlization.m

function data = normlization(data, choose)
% 数据归一化 
if choose==0
    % 不归一化
    data = data;
elseif choose==1
    % Z-score归一化
    data = bsxfun(@minus, data, mean(data));
    data = bsxfun(@rdivide, data, std(data));
elseif choose==2
    % 最大-最小归一化处理
    [data_num,~]=size(data);
    data=(data-ones(data_num,1)*min(data))./(ones(data_num,1)*(max(data)-min(data)));
end

注意:可以在elseif后面添加自己的方法。

相关推荐