Liniowe maszyny wektorów nośnych

Maszyny wektorów nośnych w R

Kailash Awati

Instructor

Podział na zbiór treningowy i testowy

  • Zbiór danych z poprzedniego rozdziału znajduje się w ramce danych df.
  • Podział zbioru na zestaw treningowy i testowy
  • Losowy podział 80/20
    # Set seed for reproducibility
    set.seed(1)
    # Set the upper bound for the number of rows to be in the training set
    sample_size <- floor(0.8 * nrow(df))
    # Assign rows to training/test sets randomly in 80/20 proportion
    train <- sample(seq_len(nrow(df)), size = sample_size)
    # Separate training and test sets
    trainset <- df[train, ]
    testset <- df[-train, ]
    
Maszyny wektorów nośnych w R

Granice decyzji i jądra

  • Granice decyzji mogą mieć różne kształty: linie, wielomiany lub bardziej złożone funkcje.
  • Typ granicy decyzji nazywany jest jądrem.
  • Jądro należy określić z góry.
  • Ten rozdział skupia się na jądrach liniowych.
Maszyny wektorów nośnych w R

SVM z jądrem liniowym

  • Użyjemy funkcji svm z biblioteki e1071.
  • Funkcja posiada wiele parametrów. Poniższe ustawimy jawnie:
    • formula - formuła określająca zmienną zależną, w naszym przypadku y.
    • data - ramka danych zawierająca dane, czyli trainset.
    • type - ustawione na C-classification (problem klasyfikacji).
    • kernel - postać granicy decyzji, tutaj liniowa.
    • cost i gamma - parametry służące do strojenia modelu.
    • scale - wartość logiczna wskazująca, czy skalować dane.
Maszyny wektorów nośnych w R

Budowanie liniowego SVM

  • Załaduj bibliotekę e1071 i wywołaj funkcję svm()
library(e1071)
svm_model<- svm(y ~ .,
                data = trainset, 
                type = "C-classification", 
                kernel = "linear", 
                scale = FALSE)
Maszyny wektorów nośnych w R

Przegląd modelu

  • Wpisanie svm_model zwraca:
    • przegląd modelu z typem klasyfikacji i jądra
    • wartości parametrów strojenia
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
Maszyny wektorów nośnych w R
# Index of support vectors in training dataset
svm_model$index

# Support vectors svm_model$SV
# Negative intercept (unweighted) svm_model$rho
# Weighting coefficients for support vectors svm_model$coefs
4   8  10  11  18  37  38  39  47  59  60  74  76  77  78  80  83 ...

x1 x2 5 0.519095949 0.44232464
-0.1087075
[,1] [1,] 1.0000000
Maszyny wektorów nośnych w R
  • Uzyskanie prognoz klas dla zbiorów treningowego i testowego.
  • Ocena dokładności modelu na obu zbiorach.
# Training accuracy
pred_train <- predict(svm_model, trainset)
mean(pred_train == trainset$y)
1
# Test accuracy
pred_test <- predict(svm_model, testset)
mean(pred_test == testset$y)
1
# Perfect!!
Maszyny wektorów nośnych w R

Czas na ćwiczenia!

Maszyny wektorów nośnych w R

Preparing Video For Download...