⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kmeans_scan.m

📁 kmeans算法源程序 共6个文件 很好用的
💻 M
字号:

function [center_new, J, class_label] = kmeans_scan(y, center, method)
%
%
%
%
[nr, nc] = size(y);
[k, c]= size(center);
class_label = zeros(1,nr);
%center_new = zeros(k,c);

%--------------------------------------------------------
% method ==1
%              On-Line Updata center Algorithm
%-------------------------------------------------------
if method(1) == 1
    for i= 1:1:nr
        x= y(i, 1:c);
        
        dmin= inf;
        for j=1:1:k
            d= sqrt((x- center(j,:))*(x-center(j,:))'/c);
            if d < dmin
                temp = j;
                dmin = d;
            end
        end
        
        class_label(i) = temp;
        %-------------------------------------------------
        n= 1;
        for j =1:1:nr
            if temp == class_label(j)     n = n+1;   end
        end
        center(temp,:) = center(temp,:) +(x- center(temp,:))/n;
       %--------------------------------------------------------------- 
   end
   center_new = center;
%--------------------------------------------------------------------------
% method(1)==2    
%                   Batch Update center Algorithm
%---------------------------------------------------------------------------
elseif method(1) == 2
    for i= 1:1:nr
        x= y(i, 1:c);
        
        dmin= inf;
        for j=1:1:k
            d= sqrt((x- center(j,:))*(x-center(j,:))'/c);
            if d < dmin
                temp = j;
                dmin = d;
            end
        end
        class_label(i) = temp;
    end
    
   for i =1:1:k
        n = 0;
        x = zeros(1,c);
        for j = 1:1:nr
            if i == class_label(j)
                n = n+1;
                x = x + y(j, 1:c);
            end
        end
        center_new(i,:) = center(i,:);
        if  n > 0
            center_new(i,:) = x/n;
        end
    end
     
end

%-----------------------------------------------------------------
%  J= SUM SUM(d(j,ecenter)) / N
if method(2) == 1
    J= kmeans_evaluation1(y, class_label,k,c);
%-----------------------------------------------------------------
%  J= SUM SUM(d(j,i)) /(N*( SUM (d(center(i),center(j))))
elseif method(2) == 2
    J= kmeans_evaluation2(y, class_label, center_new,k ,c);
%---------------------------------------------------------------
%  J= SUM SUM(d(j,ecenter)) /N
elseif method(2) == 3
    J= kmeans_evaluation3(y, class_label, center_new);
%---------------------------------------------------------------
%  J= SUM SUM(d(j,ecenter)) /(N*( SUM (d(center(i),center(j))))
elseif method(2) == 4
    J= kmeans_evaluation4(y, class_label, center_new);

end
       

        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -