On se propose d'implémenter un perceptron multiclasses avec pour fonction d'activation g la fonction seuil (la sortie vaut 1 si la valeur d'activation est du même signe que la sortie attendue, 0 sinon). Le perceptron est représenté par une matrice w de taille kx(d+1) avec k le nombre de classes du problème et d la dimension des données en entrée. Les valeurs de w ont initialisées aléatoirement. Le pas d'apprentissage alpha est choisi arbitrairement entre 0 et 1.
Coder le perceptron à l'aide des fonctionnalités suivantes
Par ailleurs, on souhaite visualiser l'évolution de l'apprentissage pour des données en dimension 2. Pour cela on utilisera l'instruction drawnow ainsi que le code suivant :
function plotPerceptron(x,y,k,w)
hold off; [X,Y] = meshgrid(linspace(min(x(:,1)),max(x(:,1)),100),linspace(min(x(:,2)),max(x(:,2)),100)); pred = testPerceptron([reshape(X,10000,1),reshape(Y,10000,1)],w); contourf(X,Y,reshape(pred,100,100)); hold on; colormap('gray'); contour(X,Y,reshape(pred,100,100),[0,0],'r'); color = 'brgymck'; for i=1:k
plot(x(y==i,1),x(y==i,2),[color(i),'+']);
end
end
Afin de tester le perceptron, on utilisera les données synthétiques suivantes : les lignes suivantes permettent de générer des données en dimension 2 avec 4 classes linéairement séparables.
x = rand(n,2)*2-1; y = ones(n,1); y(x(:,1)<0) = 2; y(x(:,2)>0.2) = 3; y(x(:,2)<-0.5) = 4;
Le code obtenu est à envoyer en l'état (partie perceptron) par mail à G. Loosli à la fin des 2h de TP. Il devra être commenté et sera évalué.
Un travail équivalent est demandé pour apprendre un réseau multicouches. Le réseau devra avoir une unique couche cachée et la fonction d'activation g sera la fonction sigmoïde. Il est représenté par 2 matrices, w et w2 de dimensions respectives k x nbCaches et nbCaches x (d+1) On notera que l'ajout d'une seule couche peut se faire en doublant simplement chaque étape (ex : le calcul de la sortie, c'est le calcul de la sortie de la couche cachée en utilisant les entrées x, puis le calcul de la sortie de la couche de sortie en utilisant le résultat intermédiaire comme entrée).
Le code obtenu est à envoyer (partie MLP) par mail à G. Loosli au plus tard la veille de l'examen de data-mining. Il devra être commenté.