Il trucco del kernel

Support Vector Machines in R

Kailash Awati

Instructor

L'idea di base

  • Progetta una trasformazione che renda il problema linearmente separabile.
  • Vedremo come farlo per un insieme di dati radialmente separabile.
Support Vector Machines in R

Capitolo 3.3 - dataset radialmente separabile con frontiera di decisione

Support Vector Machines in R

Trasformare il problema

  • L'equazione della frontiera è $x_1 ^ 2 + x_2 ^ 2 = 0.49$
  • Mappa $x_1 ^ 2$ in una nuova variabile $X_1$ e $x_2 ^ 2$ in $X_2$
  • L'equazione della frontiera nello spazio $X_1 - X_2$ diventa...
  • $X_1 + X_2 = 0.49$ (una retta!!)
Support Vector Machines in R

Grafico nello spazio X1-X2 - codice

  • Usa ggplot() per tracciare il dataset nello spazio $X_1 - X_2$
  • Equazione della frontiera $X_2 = -X_1 + 0.49$:
    • $slope = -1$
    • $yintercept = 0.49$
p <- ggplot(data = df4, aes(x = x1sq, y = x2sq, color = y)) + 
  geom_point() + 
  scale_color_manual(values = c("red", "blue")) +
  geom_abline(slope = -1, intercept = 0.49)

p
Support Vector Machines in R

Capitolo 3.3 - dataset radialmente separabile trasformato con frontiera di decisione

Support Vector Machines in R

Il kernel polinomiale - Parte 1

  • Kernel polinomiale: (gamma * (u.v) + coef0) ^ degree
    • degree è il grado del polinomio
    • gamma e coef0 sono iperparametri
    • u, v sono vettori (osservazioni) del dataset
  • Possiamo ipotizzare un polinomio di 2º grado (trasformazione)
Support Vector Machines in R

Funzioni kernel

  • La formulazione matematica delle SVM richiede trasformazioni con proprietà specifiche.
  • Le funzioni che le soddisfano si chiamano funzioni kernel
  • Le funzioni kernel generalizzano il prodotto scalare tra vettori
  • Idea chiave: usa un kernel che separi bene i dati!
Support Vector Machines in R

Dataset radialmente separabile - kernel quadratico

  • Suddivisione train/test 80/20
  • Costruisci una SVM quadratica per il dataset radialmente separabile:
    • Imposta degree = 2
    • Usa i valori predefiniti di cost, gamma e coef0 (1, 1/2 e 0)
svm_model <- svm(y ~ ., data = trainset, type = "C-classification", kernel = "polynomial", degree = 2)
# Predictions
pred_test <- predict(svm_model, testset)
mean(pred_test == testset$y)
0.9354839
# Visualize model
plot(svm_model, trainset)
Support Vector Machines in R

Capitolo 3.3 - dataset radialmente separabile, costo di default kernel quadratico, grafico con svm.plot

Support Vector Machines in R

Esercitiamoci!

Support Vector Machines in R

Preparing Video For Download...