Трюк із ядром

Support Vector Machines в R

Kailash Awati

Instructor

Базова ідея

  • Придумайте перетворення, щоб зробити задачу лінійно відокремною.
  • Розглянемо, як зробити це для радіально відокремного набору даних.
Support Vector Machines в R

Розділ 3.3 — радіально відокремний набір даних з межею рішень

Support Vector Machines в R

Перетворюємо задачу

  • Рівняння межі: $x_1 ^ 2 + x_2 ^ 2 = 0.49$
  • Зіставте $x_1 ^ 2$ з новою змінною $X_1$, а $x_2 ^ 2$ — з $X_2$
  • Рівняння межі у просторі $X_1 - X_2$ стане...
  • $X_1 + X_2 = 0.49$ (пряма!!)
Support Vector Machines в R

Графік у просторі X1–X2 — код

  • Використайте ggplot() для відображення набору даних у просторі $X_1 - X_2$
  • Рівняння межі $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 в R

Розділ 3.3 — перетворений радіально відокремний набір даних з межею рішень

Support Vector Machines в R

Поліноміальне ядро — Частина 1

  • Поліноміальне ядро: (gamma * (u.v) + coef0) ^ degree
    • degree — ступінь полінома
    • gamma і coef0 — налаштовні параметри
    • u, v — вектори (точки даних) з набору даних
  • Можемо припустити, що потрібен поліном 2-го степеня (перетворення)
Support Vector Machines в R

Ядерні функції

  • Математична формулювання SVM вимагає перетворень із певними властивостями.
  • Функції, що їх задовольняють, називають ядерними функціями
  • Ядерні функції узагальнюють скалярний добуток векторів
  • Основна ідея — вибрати ядро, що добре відокремлює дані!
Support Vector Machines в R

Радіально відокремний набір даних — квадратичне ядро

  • Розбиття train/test 80/20
  • Побудуйте квадратичний SVM для радіально відокремного набору даних:
    • Встановіть degree = 2
    • Залиште типові значення cost, gamma і coef0 (1, 1/2 та 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 в R

Розділ 3.3 — радіально відокремний набір даних, типові значення cost, квадратичне ядро, графік через svm.plot

Support Vector Machines в R

Давайте потренуємось!

Support Vector Machines в R

Preparing Video For Download...