% TP Apprentissage Statistique
% telecharger http://lipn.univ-paris13.fr/~chevaleyre/q1x.dat et q1y.dat
% A faire :
%
% - Afficher la courbe de la hinge loss en fonction de b pour (w1,w2)=(2,2)
% - definir une fonction de perte 0/1
% - definir une fonction de perte quadratique
% - Afficher la courbe de la perte 0/1 en fonction de b pour (w1,w2)=(1,1)
% - Programmez un gradient stochastique pour les pertes hinge et lp, et affichez sur un
% - graphique le nombre d erreurs en fonction de l'iteration
%
% - Afficher les courbe en 3D (par exemple avec la fonction surf) de la hinge loss, de la  0/1 loss et de la perte quadratique en fonction de (w1,w2) pour b = 1

function TP2_appstat()
    global x y m;
    xdat = load ('q1x.dat');
    ydat = load ('q1y.dat');

    m = size(ydat,1);

    figure;
    scatter(xdat(:,1),xdat(:,2),16,ydat,'filled')
    hold on
    T = [0:0.1:8]
    plot(T,-T)

    % - Afficher la courbe de la hinge loss d'un exemple x=(1,1),y=1 en fonction de b pour (w1,w2)=(0.5,0.5)
    figure
    TT = [-2:0.1:8]
    H = arrayfun( @(t) hinge(0.5,0.5,t,[1 1],1) , TT)
    plot(TT,H)
    hold on
end

    
function [r] = valex(w1,w2,b,x,y)
	r = y*(x*[w1 w2]' - b);
end

function [r] = hinge(w1,w2,b,x,y)
	r = max(0,1-valex(w1,w2,b,x,y));
end

function [r] = total_hinge(w1,w2,b)
	global xdat ydat m
	r = 0;
	for i = 1:m
		r = r + hinge(w1,w2,b,xdat(i,:),ydat(i));
	end
end

