Ajuster les SVM linéaires

Machines à vecteurs de support en R

Kailash Awati

Instructor

SVM linéaire, coût par défaut

library(e1071)
svm_model <- svm(y ~ ., 
                data = trainset, 
                type = "C-classification", 
                kernel = "linear", 
                scale = FALSE)
# Print model summary
svm_model
Call:
svm(formula = y ~ .,
    data = trainset,
    type = "C-classification", 
    kernel = "linear",
    scale = FALSE)

Parameters:
SVM-Type:  C-classification 
 SVM-Kernel:  linear 
       cost:  1 
      gamma:  0.5 
Number of Support Vectors:  55
Machines à vecteurs de support en R

Chapitre 2.3 - ensemble linéairement séparable, coût par défaut, noyau linéaire avec vecteurs de support, frontière de décision et marges

Machines à vecteurs de support en R

SVM linéaire avec cost = 100

library(e1071)
svm_model <- svm(y ~ ., 
                data = trainset, 
                type = "C-classification", 
                kernel = "linear", 
                cost = 100,
                scale = FALSE)
# Print model summary
svm_model
Call:
svm(formula = y ~ .,
    data = trainset,
    type = "C-classification", 
    kernel = "linear",
    cost = 100,
    scale = FALSE)

Parameters:
SVM-Type:  C-classification 
 SVM-Kernel:  linear 
       cost:  100 
      gamma:  0.5 
Number of Support Vectors:  6
Machines à vecteurs de support en R

Chapitre 2.3 - données linéairement séparables, cost = 100, noyau linéaire avec vecteurs de support, frontière de décision et marges

Machines à vecteurs de support en R

Conséquence

  • Utile pour réduire la marge si la frontière de décision est linéaire
  • …mais c'est rare en pratique
Machines à vecteurs de support en R

Chapitre 2.3 - ensemble non linéairement séparable

Machines à vecteurs de support en R

Données non linéaires, SVM linéaire (cost = 100)

  • Créer un modèle cost=100 avec un ensemble d'entraînement de 80 % des données
# Build model
library(e1071)
svm_model<- svm(y ~ ., 
                data = trainset, 
                type = "C-classification", 
                kernel = "linear", 
                cost = 100,
                scale = FALSE)
  • Calculer la justesse
# Train and test accuracy
pred_train <- predict(svm_model, trainset)
mean(pred_train == trainset$y)
0.8208333
pred_test <- predict(svm_model, testset)
mean(pred_test == testset$y)
0.85
  • Justesse moyenne en test sur 50 partitions aléatoires entraînement/test : 82,9 %
Machines à vecteurs de support en R

Chapitre 2.3 - ensemble non linéairement séparable, cost=100, noyau linéaire avec vecteurs de support, frontière de décision et marges

Machines à vecteurs de support en R

Données non linéaires, SVM linéaire (cost = 1)

  • Recréer le modèle avec cost = 1
# Trainset contains 80% of data
# Same train/test split as before.
# Build model
svm_model <- svm(y ~ ., 
                data = trainset, 
                type = "C-classification", 
                kernel = "linear", 
                cost = 1,
                scale = FALSE)
  • Calculer la justesse en test
# Test accuracy
pred_test <- predict(svm_model, testset)
mean(pred_test == testset$y)
0.8666667
  • Justesse moyenne en test sur 50 partitions aléatoires entraînement/test : 83,7 %
Machines à vecteurs de support en R

Chapitre 2.3 - ensemble non linéairement séparable, cost=1, noyau linéaire avec vecteurs de support, frontière de décision et marges

Machines à vecteurs de support en R

Passons à la pratique !

Machines à vecteurs de support en R

Preparing Video For Download...