Python >> Tutoriel Python >  >> Python

SVM sklearn :les machines vectorielles de support Python simplifiées

Supporter les machines vectorielles (SVM) ont gagné en popularité ces dernières années. La raison en est leurs performances de classification robustes, même dans des espaces de grande dimension :les SVM fonctionnent même s'il y a plus de dimensions (caractéristiques) que d'éléments de données. Ceci est inhabituel pour les algorithmes de classification en raison de la malédiction de la dimensionnalité – avec l'augmentation de la dimensionnalité, les données deviennent extrêmement rares, ce qui rend difficile pour les algorithmes de trouver des modèles dans l'ensemble de données.

Comprendre les idées de base des SVM est une étape fondamentale pour devenir un ingénieur en apprentissage automatique sophistiqué .

Vidéo SVM

N'hésitez pas à regarder la vidéo suivante qui résume brièvement le fonctionnement des SVM en Python :

Aide-mémoire SVM

Voici un aide-mémoire qui résume le contenu de cet article :

Vous pouvez obtenir cette aide-mémoire, ainsi que d'autres aide-mémoire Python, sous forme de PDF haute résolution ici :

Voyons d'abord le concept des machines à vecteurs de support avant d'apprendre à les utiliser avec sklearn .

Présentation de la classification de l'apprentissage automatique

Comment fonctionnent les algorithmes de classification ? Ils utilisent les données d'apprentissage pour trouver une limite de décision qui sépare les données d'une classe des données de l'autre classe.

Voici un exemple :

Supposons que vous souhaitiez créer un système de recommandation pour les futurs étudiants universitaires. La figure visualise les données de formation composées d'utilisateurs classés en fonction de leurs compétences dans deux domaines :logique et créativité . Certaines personnes ont des compétences logiques élevées et une créativité relativement faible, d'autres ont une créativité élevée et des compétences logiques relativement faibles. Le premier groupe est étiqueté comme "informaticiens" et le deuxième groupe est étiqueté comme "artistes" . (Je sais qu'il y a aussi des informaticiens créatifs, mais restons un instant sur cet exemple.)

Afin de classer les nouveaux utilisateurs, le modèle d'apprentissage automatique doit trouver une limite de décision qui sépare les informaticiens des artistes. En gros, vous vérifierez pour un nouvel utilisateur dans quelle zone il se situe par rapport à la limite de décision :gauche ou droite ? Les utilisateurs qui tombent dans la zone de gauche sont classés comme informaticiens, tandis que les utilisateurs qui tombent dans la zone de droite sont classés comme artistes.

Dans l'espace bidimensionnel, la frontière de décision est soit une ligne, soit une courbe (d'ordre supérieur). Le premier est appelé un "classificateur linéaire", ce dernier est appelé un "classificateur non linéaire" . Dans cette section, nous n'explorerons que les classificateurs linéaires.

La figure montre trois limites de décision qui sont toutes des séparateurs valides des données. Pour un classificateur standard, il est impossible de quantifier laquelle des limites de décision données est la meilleure - elles conduisent toutes à une précision parfaite lors de la classification des données d'entraînement.

Vue d'ensemble de la classification des machines à vecteurs de support

Mais quelle est la meilleure limite de décision ?

Les machines à vecteurs de support fournissent une réponse unique et magnifique à cette question. On peut dire que la meilleure limite de décision offre une marge de sécurité maximale. En d'autres termes, les SVM maximisent la distance entre les points de données les plus proches et la limite de décision . L'idée est de minimiser l'erreur des nouveaux points proches de la limite de décision.

Voici un exemple :

Le classificateur SVM trouve les vecteurs de support respectifs afin que la zone entre les différents vecteurs de support soit aussi épaisse que possible . La frontière de décision est la ligne au milieu avec une distance maximale aux vecteurs de support. Étant donné que la zone entre les vecteurs de support et la frontière de décision est maximisée, la marge de sécurité devrait être maximale lors de la classification de nouveaux points de données. Cette idée montre une grande précision de classification pour de nombreux problèmes pratiques.

Code SVM Scikit-Learn

Voyons comment le sklearn La bibliothèque vous offre un moyen simple d'utiliser la classification SVM sur vos propres données étiquetées. J'ai mis en surbrillance les lignes pertinentes de sklearn dans l'extrait de code suivant :

## Dependencies
from sklearn import svm
import numpy as np


## Data: student scores in (math, language, creativity) --> study field
X = np.array([[9, 5, 6, "computer science"],
              [10, 1, 2, "computer science"],
              [1, 8, 1, "literature"],
              [4, 9, 3, "literature"],
              [0, 1, 10, "art"],
              [5, 7, 9, "art"]])


## One-liner
svm = svm.SVC().fit(X[:,:-1], X[:,-1])


## Result & puzzle
student_0 = svm.predict([[3, 3, 6]])
print(student_0)

student_1 = svm.predict([[8, 1, 1]])
print(student_1)

Devinez :quelle est la sortie de ce code ?

Le code explique comment vous pouvez utiliser les machines vectorielles de support en Python dans sa forme la plus basique. Le tableau NumPy contient les données de formation étiquetées avec une ligne par utilisateur et une colonne par fonctionnalité (niveau de compétence en mathématiques, langue et créativité). La dernière colonne est l'étiquette (la classe).

Parce que nous avons des données tridimensionnelles, la machine à vecteurs de support sépare les données à l'aide de plans bidimensionnels (le séparateur linéaire) plutôt que des lignes unidimensionnelles. Comme vous pouvez le constater, il est également possible de séparer trois classes différentes plutôt que deux seulement comme le montrent les exemples ci-dessus.

Le one-liner lui-même est simple :vous créez d'abord le modèle en utilisant le constructeur du svm.SVC classe (SVC signifie classification des vecteurs de support ). Ensuite, vous appelez le fit fonction pour effectuer l'entraînement en fonction de vos données d'entraînement étiquetées.

Dans la partie résultats de l'extrait de code, nous appelons simplement le predict fonction sur les nouvelles observations :

  • Parce que student_0 a des compétences maths=3 , language=3 , et creativity=6 , la machine à vecteurs de support prédit que l'étiquette "art" correspond aux compétences de cet élève.
  • De même, student_1 a des compétences maths=8 , language=1 , et creativity=1 . Ainsi, la machine à vecteurs support prédit que le label "informatique" correspond aux compétences de cet élève.

Voici le résultat final du one-liner :

## Result & puzzle
student_0 = svm.predict([[3, 3, 6]])
print(student_0)
# ['art']

student_1 = svm.predict([[8, 1, 1]])
print(student_1)
## ['computer science']