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

📄 leader_follower.m

📁 数据挖掘中经典算法的matlab代码
💻 M
字号:
function [features, targets, label, W] = Leader_Follower(train_features, train_targets, params, region, plot_on)

%Reduce the number of data points using the basic leader-follower clustering algorithm
%Inputs:
%	train_features	- Input features
%	train_targets	- Input targets
%	params 			- Algorithm parameters: [[Min distance to connect, Rate of convergence]]
%	region			- Decision region vector: [-x x -y y number_of_points]
%   plot_on         - Plot stages of the algorithm
%
%Outputs
%	features			- New features
%	targets			- New targets
%	label				- The labels given for each of the original features
%   W               - Weights matrice

if (nargin < 5),
    plot_on = 0;
end
[theta, eta] = process_params(params);

[D,L]	= size(train_features);

%Preprocessing
features = [train_features ; ones(1,L)];
features = features ./ (ones(D+1,1) * sqrt(sum(features.^2)));

%w1 <- x
w       = features(:,1);

for i = 2:L,
    %Accept new pattern x
    x   = features(:,i);
    
    %j <- argmin||x-wj|| (Find nearest cluster)
    dist  = sqrt(sum((w - x*ones(1,size(w,2))).^2));
    j     = find(min(dist) == dist);
    
    %if ||x-wj|| < theta
    if dist(j) < theta,
        %wj <- wj + eta*x
        w(:,j) = w(:,j) + eta*x;
    else
        %Add new w <- x
        w(:,end+1) = x;
    end
    
    w   = w ./ (ones(D+1,1) * sqrt(sum(w.^2)));
    
    if (plot_on == 1),
        %Assign each of the features to a center
        dist        = w'*features;
        [m, label]  = max(dist);
        centers     = zeros(D,size(w,2));
        for i = 1:size(w,2),
            in = find(label == i);
            if ~isempty(in)
                centers(:,i) = mean(train_features(1:2,find(label==i))')';
            else
                centers(:,i) = nan;
            end
        end
        plot_process(centers)
    else
        disp(['There are ' num2str(size(w,2)) ' clusters so far'])
    end
    
end 
       
%Assign each of the features to a center
N           = size(w,2);
dist        = w'*features;
[m, label]  = max(dist);
features    = zeros(D,N);
for i = 1:N,
    in = find(label == i);
    if ~isempty(in)
        features(:,i) = mean(train_features(1:2,find(label==i))')';
    else
        features(:,i) = nan;
    end
end

targets = zeros(1,N);
if (N > 1),
	for i = 1:N,
   	if (length(train_targets(find(label == i))) > 0),
      	targets(i) = (sum(train_targets(find(label == i)))/length(train_targets(find(label == i))) > .5);
   	end
	end
else
   %There is only one center
   targets = (sum(train_targets)/length(train_targets) > .5);
end

⌨️ 快捷键说明

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