# Perceptron + pocket function [w, Ein_min] = pocket(X, y, max_iter=10000, w0=zeros(size(X, 2), 1)) N = size(X, 1); # filas de X d = size(X, 2) - 1; # total dimensiones w = w0; # w(t) con t=0 Ein_min = 1; # el valor de E_in "en el bolsillo" for t = 1:max_iter # ejecuta PLA por 1 iteracion para obtener w(t+1) usando el mejor w hasta # el momento w_t = pla(X, y, max_iter=2, random=1, w); # calcula el error de la muestra con w(t+1) Ein_tmp = sum(sign(X * w_t) != y) / N; # si el E_in(w(t+1)) es mejor, me quedo con ese (E_in, w) if Ein_tmp < Ein_min w = w_t; Ein_min = Ein_tmp end end end