Travaux Pratique sur SVM

L’objectif de cette section de travaux pratiques est de montrer l’utilisation des machines à vecteurs de support (Support Vector Machines, SVM)
pour les problèmes de classification linéaires en python avec Scikit-learn. Pour la documentation de cette bibliothèque visitez : Scikit-learn -SVM

 

Tutorial 1

Auteur: BEN LAHMAR El Habib

 

 

Tout d'abord, nous avons besoin de certaines dépendances de base:

In [1]:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import style
style.use("ggplot")
from sklearn import svm
 

Il faut noté que Matplotlib n'est pas vraiment nécessaire pour SVC linéaire.
nous l'utilisons ici seulement pour la visualisation des données

 

Supposons que nous avons deux caractéristiques à considérer. X et Y

In [2]:
x = [1, 5, 1.5, 8, 1, 9]
y = [2, 8, 1.8, 8, 0.6, 11]
 

Nous pouvons représenter graphiquement ces données en utilisant:

In [3]:
plt.scatter(x,y)
plt.show()
 
 

nous pouvons voir de nos propres yeux comment ces groupes devraient être divisés,

 

Nous représentons maintenant nos point x et y dans un tableau de deux dimension

In [4]:
X = np.array([[1,2],
             [5,8],
             [1.5,1.8],
             [8,8],
             [1,0.6],
             [9,11]])
 

Maintenant que nous avons ce tableau, nous devons l'étiquette à des fins d'entraînement

 

Juste en regardant notre ensemble de données, nous pouvons voir que nous avons des paires de coordonnées qui sont des nombres en "bas"
et des paires de coordonnées qui sont des nombres en "haut".
Nous avons ensuite assigné 0 aux paires de coordonnées en "bas" et 1 aux paires de caractéristiques en "haut".
pour cela nous définisons le vecteur Y

In [5]:
Y = [0,1,0,1,0,1]
 

Nous allons maintenant définir notre classificateur:

In [6]:
clf = svm.SVC(kernel='linear', C = 1.0)
In [7]:
clf.fit(X,Y)
Out[7]:
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
  decision_function_shape='ovr', degree=3, gamma='auto', kernel='linear',
  max_iter=-1, probability=False, random_state=None, shrinking=True,
  tol=0.001, verbose=False)
 

nous pouvons maintenant prédire et tester.

In [11]:
print(clf.predict([[0.58,0.76]]))
 
[0]
 

Effectivement, il s'agit d'une paire de coordonnées "bas".
un autre teste pour une paire "haut"

In [12]:
print(clf.predict([[ 10.58 , 10.76]]))
 
[1]
 

Et voila! elle appartient a la classe 1

 

Maintenant, pour visualiser nos données:

In [13]:
w = clf.coef_[0]
print(w)

a = -w[0] / w[1]

xx = np.linspace(0,12)
yy = a * xx - clf.intercept_[0] / w[1]

h0 = plt.plot(xx, yy, 'k-', label="non weighted div")

plt.scatter(X[:, 0], X[:, 1], c = y)
plt.legend()
plt.show()
 
[0.1380943  0.24462418]
 
 

Auteur: BEN LAHMAR El Habib