www.gusucode.com > classification_matlab_toolbox分类方法工具箱源码程序 > code/Classification_toolbox/Balanced_Winnow.m
function [D, a_plus, a_minus] = Balanced_Winnow(train_features, train_targets, params, region) % Classify using the balanced Winnow algorithm % Inputs: % features - Train features % targets - Train targets % params - [Num iter, Alpha, Convergence rate] % region - Decision region vector: [-x x -y y number_of_points] % % Outputs % D - Decision sufrace % a_plus - The positive weight vector % a_minus - The negative weight vector [c, r] = size(train_features); [Max_iter, alpha, eta] = process_params(params); y = [train_features ; ones(1,r)]; z = train_targets; %Initial weights a_plus = sum(y')'; a_minus = -sum(y')'; iter = 0; while (iter < Max_iter) iter = iter + 1; for k = 1:r, if (sign(a_plus'*y(:,k) - a_minus'*y(:,k)) ~= sign(z(k)-.5)), if (z(k) == 1), a_plus = alpha.^y(:,k).*a_plus; a_minus = alpha.^-y(:,k).*a_minus; else a_plus = alpha.^-y(:,k).*a_plus; a_minus = alpha.^y(:,k).*a_minus; end end end end a = (a_plus + a_minus)/2; %Find decision region N = region(5); x = ones(N,1) * linspace (region(1),region(2),N); y = linspace (region(3),region(4),N)' * ones(1,N); D = (a(1).*x + a(2).*y + a(c+1)< 0.5);