TP 4 : Séparation Linéaire

Programmation pour l’IA

On va reprendre le dataset de la semaine dernière : iris.csv. On rappelle la visualisation suivante :

  1. Préparer le jeu de données iris.csv. On veut features=["sepal.length", "sepal.width"], data ne doit contenir que les données relatives à ces features, classes doit contenir les classes des exemples dans \(\{-1, 1\}\) : classnames = ["setosa", "autre"] où les éléments de classes Virginica et Versicolor sont envoyés sur la classe "autre".

  2. En utilisant svm de scikit-learn, apprenez un séparateur à vaste marge. On pourra s’inspirer du code suivant :

from sklearn import svm
clf = svm.SVC(kernel="linear", C=1000)
clf.fit(X, y)
  1. En s’inspirant de l’exemple donné dans la documentation de scikit-learn, faire une visualisation du séparateur trouvé et de ses marges.

  2. Refaire l’exercice en ne prenant que 80% du jeu de données et mesurer la précision de votre modèle (voir TP précédent).

  3. Faire une séparation similaire avec une visualisation pour les classes Versicolor et Virginica en fonction de la longueur/largeur de pétales :

  1. Visualisez le jeu de données suivant : mystery.csv.
  2. Vous semble-t-il possible de le séparer avec un SVM?
  3. Visualisez \((x_1^2, x_2^2)\).
  4. En déduire un classifieur pour le jeu de données précédent.

Même exercice avec xor.csv mais c’est à vous de trouver la transformation qui vous permettra de séparer linéairement les données.

Implémentez la régression linéaire par descente de gradient vue en cours.