Gerando um conjunto de dados linearmente separável

Support Vector Machines em R

Kailash Awati

Instructor

Visão geral da lição

  • Crie um conjunto de dados para ilustrar princípios-chave de SVMs.
  • Conjunto com duas variáveis e um limite de decisão linear.
Support Vector Machines em R

Gerando um conjunto bidimensional com runif()

  • Gere um conjunto com duas variáveis e 200 pontos
  • Variáveis x1 e x2 distribuídas uniformemente em (0,1).
# Preliminares...
# Definir número de pontos
n <- 200
# Fixar semente para reprodutibilidade
set.seed(42)

# Gerar dataframe com dois preditores x1 e x2 em (0,1) df <- data.frame(x1 = runif(n), x2 = runif(n))
Support Vector Machines em R

Criando duas classes

  • Crie duas classes, separadas pela reta de decisão x1 = x2
  • A linha passa por (0, 0) e faz 45 graus com a horizontal
  • Variável de classe y = -1 para pontos abaixo da linha e y = 1 para pontos acima
# Classificar pontos como -1 ou +1
df$y <- factor(ifelse(df$x1 - df$x2 > 0, -1, 1),
               levels = c(-1, 1))
Support Vector Machines em R

Visualizando o conjunto com ggplot

  • Crie um gráfico de dispersão 2D com x1 no eixo x e x2 no eixo y
  • Diferencie as classes por cor (abaixo da linha = vermelho; acima = azul)
  • O limite de decisão é a linha x1 = x2: passa por (0, 0) e tem inclinação = 1
library(ggplot2)

# Construir o gráfico
p <- ggplot(data = df, aes(x = x1, y = x2, color = y)) + 
     geom_point() +
     scale_color_manual(values = c("-1" = "red", "1" = "blue")) +
     geom_abline(slope = 1, intercept = 0)

# Exibir  
p
Support Vector Machines em R

Capítulo 1.2 - conjunto linearmente separável

Support Vector Machines em R

Introduzindo uma margem

  • Para criar uma margem, precisamos remover pontos próximos ao limite
  • Remova pontos cujos valores de x1 e x2 diferem menos que um valor especificado
# Criar uma margem de 0.05 no conjunto
delta <- 0.05
# Manter apenas os pontos fora da margem
df1 <- df[abs(df$x1 - df$x2) > delta, ]
# Verificar o número de pontos restantes
nrow(df1)

# Replotar o conjunto com margem (código igual ao anterior) p <- ggplot(data = df1, aes(x = x1, y = x2, color = y)) + geom_point() + scale_color_manual(values = c("red", "blue")) + geom_abline(slope = 1, intercept = 0) # Exibir gráfico p
Support Vector Machines em R

Capítulo 1.2 - conjunto linearmente separável com margem

Support Vector Machines em R

Plotando as fronteiras da margem

  • As fronteiras da margem são:
    • paralelas ao limite de decisão (inclinação = 1).
    • localizadas a delta unidades de cada lado (delta = 0.05).
p <- p + 
     geom_abline(slope = 1, intercept = delta, linetype = "dashed") +
     geom_abline(slope = 1, intercept = -delta, linetype = "dashed")

p
Support Vector Machines em R

Capítulo 1.2 - conjunto linearmente separável com limite de decisão e margens

Support Vector Machines em R

Vamos praticar!

Support Vector Machines em R

Preparing Video For Download...