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後面添加本身的方法。ide

相關文章
相關標籤/搜索