Kernel trick

Support Vector Machines v R

Kailash Awati

Instructor

Základní myšlenka

  • Navrhněte transformaci, která problém učiní lineárně separovatelným.
  • Ukážeme si, jak to provést pro radiálně separovatelný dataset.
Support Vector Machines v R

Kapitola 3.3 – radiálně separovatelný dataset s rozhodovací hranicí

Support Vector Machines v R

Transformace problému

  • Rovnice hranice je $x_1 ^ 2 + x_2 ^ 2 = 0.49$
  • Mapujeme $x_1 ^ 2$ na novou proměnnou $X_1$ a $x_2 ^ 2$ na $X_2$
  • Rovnice hranice v prostoru $X_1 - X_2$ se stane...
  • $X_1 + X_2 = 0.49$ (přímka!!)
Support Vector Machines v R

Graf v prostoru X1-X2 – kód

  • Pomocí ggplot() zobrazte dataset v prostoru $X_1 - X_2$
  • Rovnice hranice $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 v R

Kapitola 3.3 – transformovaný radiálně separovatelný dataset s rozhodovací hranicí

Support Vector Machines v R

Polynomiální jádro – část 1

  • Polynomiální jádro: (gamma * (u.v) + coef0) ^ degree
    • degree je stupeň polynomu
    • gamma a coef0 jsou ladicí parametry
    • u, v jsou vektory (datové body) z datasetu
  • Předpokládáme potřebu transformace polynomem 2. stupně
Support Vector Machines v R

Jádrové funkce

  • Matematická formulace SVM vyžaduje transformace se specifickými vlastnostmi.
  • Funkce splňující tyto vlastnosti se nazývají jádrové funkce
  • Jádrové funkce jsou zobecněním skalárního součinu vektorů
  • Základní myšlenka – použít jádro, které data dobře oddělí!
Support Vector Machines v R

Radiálně separovatelný dataset – kvadratické jádro

  • Rozdělení trénovací/testovací sady 80/20
  • Sestavení kvadratického SVM pro radiálně separovatelný dataset:
    • Nastavte degree = 2
    • Použijte výchozí hodnoty cost, gamma a coef0 (1, 1/2 a 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 v R

Kapitola 3.3 – radiálně separovatelný dataset, kvadratické jádro s výchozím cost, vizualizace pomocí svm.plot

Support Vector Machines v R

Čas na procvičení!

Support Vector Machines v R

Preparing Video For Download...