Generera ett linjärt separerbart dataset

Support Vector Machines i R

Kailash Awati

Instructor

Lektionsöversikt

  • Skapa ett dataset för att illustrera grundprinciperna bakom SVM.
  • Datasetet har två variabler och en linjär beslutsgräns.
Support Vector Machines i R

Generera ett tvådimensionellt dataset med runif()

  • Generera ett dataset med två variabler och 200 punkter
  • Variablerna x1 och x2 är likformigt fördelade i (0,1).
# Preliminaries...
# Set required number of data points
n <- 200
# Set seed to ensure reproducibility
set.seed(42)

# Generate dataframe with two predictors x1 and x2 in (0,1) df <- data.frame(x1 = runif(n), x2 = runif(n))
Support Vector Machines i R

Skapa två klasser

  • Skapa två klasser, separerade av den raka beslutsgränsen x1 = x2
  • Linjen passerar genom (0, 0) och bildar en 45-graders vinkel med x-axeln
  • Klassvariabeln y = -1 för punkter under linjen och y = 1 för punkter ovanför
# Classify points as -1 or +1
df$y <- factor(ifelse(df$x1 - df$x2 > 0, -1, 1),
               levels = c(-1, 1))
Support Vector Machines i R

Visualisera datasetet med ggplot

  • Skapa ett tvådimensionellt spridningsdiagram med x1 på x-axeln och x2 på y-axeln
  • Skilja klasserna åt med färg (under linjen = röd; ovanför linjen = blå)
  • Beslutsgränsen är linjen x1 = x2: passerar genom (0, 0) med lutningen 1
library(ggplot2)

# Build plot
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)

# Display it  
p
Support Vector Machines i R

Kapitel 1.2 – linjärt separerbart dataset

Support Vector Machines i R

Införa en marginal

  • För att skapa en marginal behöver vi ta bort punkter nära beslutsgränsen
  • Ta bort punkter där x1 och x2 skiljer sig med mindre än ett angivet värde
# Create a margin of 0.05 in dataset
delta <- 0.05
# Retain only those points that lie outside the margin
df1 <- df[abs(df$x1 - df$x2) > delta, ]
# Check number of data points remaining
nrow(df1)

# Replot dataset with margin (code is exactly same as before) 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) # Display plot p
Support Vector Machines i R

Kapitel 1.2 – linjärt separerbart dataset med marginal

Support Vector Machines i R

Rita marginalgränserna

  • Marginalgränserna är:
    • parallella med beslutsgränsen (lutning = 1).
    • belägna delta enheter på vardera sida om den (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 i R

Kapitel 1.2 – linjärt separerbart dataset med besluts- och marginalgränser

Support Vector Machines i R

Nu kör vi en övning!

Support Vector Machines i R

Preparing Video For Download...