O truque do kernel

Support Vector Machines em R

Kailash Awati

Instructor

A ideia básica

  • Crie uma transformação que torne o problema linearmente separável.
  • Vamos ver como fazer isso para um conjunto de dados radialmente separável.
Support Vector Machines em R

Capítulo 3.3 - conjunto radialmente separável com fronteira de decisão

Support Vector Machines em R

Transformando o problema

  • Equação da fronteira: $x_1 ^ 2 + x_2 ^ 2 = 0.49$
  • Mapeie $x_1 ^ 2$ para a nova variável $X_1$ e $x_2 ^ 2$ para $X_2$
  • A equação da fronteira no espaço $X_1 - X_2$ fica...
  • $X_1 + X_2 = 0.49$ (uma reta!!)
Support Vector Machines em R

Plot no espaço X1-X2 - código

  • Use ggplot() para plotar o conjunto no espaço $X_1 - X_2$
  • Equação da fronteira $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 em R

Capítulo 3.3 - conjunto radialmente separável transformado com fronteira de decisão

Support Vector Machines em R

O kernel polinomial - Parte 1

  • Kernel polinomial: (gamma * (u.v) + coef0) ^ degree
    • degree é o grau do polinômio
    • gamma e coef0 são hiperparâmetros
    • u, v são vetores (pontos) do conjunto de dados
  • Podemos supor que precisamos de um polinômio de 2º grau (transformação)
Support Vector Machines em R

Funções kernel

  • A formulação matemática de SVMs exige transformações com propriedades específicas.
  • Funções que satisfazem essas propriedades são chamadas de funções kernel
  • Funções kernel generalizam o produto escalar de vetores
  • Ideia básica: usar um kernel que separe bem os dados!
Support Vector Machines em R

Conjunto radialmente separável - kernel quadrático

  • Divisão treino/teste 80/20
  • Construa uma SVM quadrática para o conjunto radialmente separável:
    • Defina degree = 2
    • Use valores padrão de 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 em R

Capítulo 3.3 - conjunto radialmente separável, custo padrão kernel quadrático, plot com svm.plot

Support Vector Machines em R

Vamos praticar!

Support Vector Machines em R

Preparing Video For Download...