Generowanie liniowo separowalnego zbioru danych

Maszyny wektorów nośnych w R

Kailash Awati

Instructor

Przegląd lekcji

  • Tworzymy zbiór danych ilustrujący kluczowe zasady SVM.
  • Zbiór ma dwie zmienne i liniową granicę decyzyjną.
Maszyny wektorów nośnych w R

Generowanie zbioru dwuwymiarowego za pomocą runif()

  • Generujemy dwuwymiarowy zbiór danych z 200 punktami
  • Zmienne x1 i x2 są jednorodnie rozłożone w (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))
Maszyny wektorów nośnych w R

Tworzenie dwóch klas

  • Tworzymy dwie klasy rozdzielone granicą decyzyjną x1 = x2
  • Prosta przechodzi przez (0, 0) i tworzy kąt 45° z poziomą
  • Zmienna klasowa y = -1 dla punktów poniżej linii i y = 1 dla punktów powyżej
# Classify points as -1 or +1
df$y <- factor(ifelse(df$x1 - df$x2 > 0, -1, 1),
               levels = c(-1, 1))
Maszyny wektorów nośnych w R

Wizualizacja zbioru danych za pomocą ggplot

  • Tworzymy wykres rozrzutu 2D z x1 na osi x i x2 na osi y
  • Klasy rozróżniamy kolorem (poniżej linii = czerwony; powyżej = niebieski)
  • Granica decyzyjna to prosta x1 = x2: przechodzi przez (0, 0) i ma nachylenie = 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
Maszyny wektorów nośnych w R

Rozdział 1.2 – liniowo separowalny zbiór danych

Maszyny wektorów nośnych w R

Wprowadzenie marginesu

  • Aby utworzyć margines, należy usunąć punkty leżące blisko granicy
  • Usuń punkty, dla których wartości x1 i x2 różnią się o mniej niż określona wartość
# 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
Maszyny wektorów nośnych w R

Rozdział 1.2 – liniowo separowalny zbiór danych z marginesem

Maszyny wektorów nośnych w R

Wizualizacja granic marginesu

  • Granice marginesu są:
    • równoległe do granicy decyzyjnej (nachylenie = 1).
    • oddalone o delta jednostek po obu jej stronach (delta = 0.05).
p <- p + 
     geom_abline(slope = 1, intercept = delta, linetype = "dashed") +
     geom_abline(slope = 1, intercept = -delta, linetype = "dashed")

p
Maszyny wektorów nośnych w R

Rozdział 1.2 – liniowo separowalny zbiór danych z granicą decyzyjną i marginesami

Maszyny wektorów nośnych w R

Czas na ćwiczenia!

Maszyny wektorów nośnych w R

Preparing Video For Download...