Generare un dataset linearmente separabile

Support Vector Machines in R

Kailash Awati

Instructor

Panoramica della lezione

  • Crea un dataset per illustrare i principi chiave delle SVM.
  • Il dataset ha due variabili e una frontiera di decisione lineare.
Support Vector Machines in R

Generare un dataset bidimensionale con runif()

  • Genera un dataset a due variabili con 200 punti
  • Variabili x1 e x2 uniformi in (0,1).
# Preliminari...
# Numero di punti da generare
n <- 200
# Imposta il seed per la riproducibilità
set.seed(42)

# Genera un dataframe con due predittori x1 e x2 in (0,1) df <- data.frame(x1 = runif(n), x2 = runif(n))
Support Vector Machines in R

Creare due classi

  • Crea due classi, separate dalla frontiera lineare x1 = x2
  • La retta passa per (0, 0) e forma un angolo di 45° con l'orizzontale
  • Variabile di classe y = -1 per i punti sotto la retta e y = 1 per quelli sopra
# Classifica i punti come -1 o +1
df$y <- factor(ifelse(df$x1 - df$x2 > 0, -1, 1),
               levels = c(-1, 1))
Support Vector Machines in R

Visualizzare il dataset con ggplot

  • Crea uno scatter plot 2D con x1 sull'asse x e x2 sull'asse y
  • Distingui le classi per colore (sotto la retta = rosso; sopra = blu)
  • La frontiera di decisione è x1 = x2: passa per (0, 0) e ha pendenza = 1
library(ggplot2)

# Costruisci il grafico
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)

# Mostra il grafico  
p
Support Vector Machines in R

Capitolo 1.2 - dataset linearmente separabile

Support Vector Machines in R

Introdurre un margine

  • Per creare un margine dobbiamo rimuovere i punti vicini alla frontiera
  • Rimuovi i punti in cui x1 e x2 differiscono di meno di un valore fissato
# Crea un margine di 0.05 nel dataset
delta <- 0.05
# Tieni solo i punti fuori dal margine
df1 <- df[abs(df$x1 - df$x2) > delta, ]
# Verifica i punti rimanenti
nrow(df1)

# Ritraccia il dataset con margine (codice identico a prima) 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) # Mostra il grafico p
Support Vector Machines in R

Capitolo 1.2 - dataset linearmente separabile con margine

Support Vector Machines in R

Tracciare i bordi del margine

  • I bordi del margine sono:
    • paralleli alla frontiera di decisione (pendenza = 1).
    • a distanza delta su entrambi i lati (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 in R

Capitolo 1.2 - dataset linearmente separabile con frontiera e margini

Support Vector Machines in R

Esercitiamoci!

Support Vector Machines in R

Preparing Video For Download...