Налаштування лінійних SVM

Support Vector Machines в R

Kailash Awati

Instructor

Лінійна SVM, стандартний cost

library(e1071)
svm_model <- svm(y ~ ., 
                data = trainset, 
                type = "C-classification", 
                kernel = "linear", 
                scale = FALSE)
# Print model summary
svm_model
Call:
svm(formula = y ~ .,
    data = trainset,
    type = "C-classification", 
    kernel = "linear",
    scale = FALSE)

Parameters:
SVM-Type:  C-classification 
 SVM-Kernel:  linear 
       cost:  1 
      gamma:  0.5 
Number of Support Vectors:  55
Support Vector Machines в R

Розділ 2.3 — лінійно роздільний набір даних, лінійне ядро зі стандартним cost: опорні вектори, межа рішення і поля

Support Vector Machines в R

Лінійна SVM із cost = 100

library(e1071)
svm_model <- svm(y ~ ., 
                data = trainset, 
                type = "C-classification", 
                kernel = "linear", 
                cost = 100,
                scale = FALSE)
# Print model summary
svm_model
Call:
svm(formula = y ~ .,
    data = trainset,
    type = "C-classification", 
    kernel = "linear",
    cost = 100,
    scale = FALSE)

Parameters:
SVM-Type:  C-classification 
 SVM-Kernel:  linear 
       cost:  100 
      gamma:  0.5 
Number of Support Vectors:  6
Support Vector Machines в R

Розділ 2.3 — лінійно роздільні дані, лінійне ядро з cost = 100: опорні вектори, межа рішення і поля

Support Vector Machines в R

Наслідок

  • Корисно звузити поле, якщо межа рішення точно лінійна
  • …але в реальних даних це буває рідко
Support Vector Machines в R

Розділ 2.3 — нелінійно роздільний набір даних

Support Vector Machines в R

Нелінійні дані, лінійна SVM (cost = 100)

  • Побудуйте модель з cost=100 на тренувальному наборі 80% даних
# Build model
library(e1071)
svm_model<- svm(y ~ ., 
                data = trainset, 
                type = "C-classification", 
                kernel = "linear", 
                cost = 100,
                scale = FALSE)
  • Обчисліть точність
# Train and test accuracy
pred_train <- predict(svm_model, trainset)
mean(pred_train == trainset$y)
0.8208333
pred_test <- predict(svm_model, testset)
mean(pred_test == testset$y)
0.85
  • Середня тестова точність за 50 випадкових поділів train/test: 82,9%
Support Vector Machines в R

Розділ 2.3 — нелінійно роздільний набір, лінійне ядро з cost=100: опорні вектори, межа рішення і поля

Support Vector Machines в R

Нелінійні дані, лінійна SVM (cost = 1)

  • Перебудуйте модель із cost = 1
# Trainset contains 80% of data
# Same train/test split as before.
# Build model
svm_model <- svm(y ~ ., 
                data = trainset, 
                type = "C-classification", 
                kernel = "linear", 
                cost = 1,
                scale = FALSE)
  • Обчисліть тестову точність
# Test accuracy
pred_test <- predict(svm_model, testset)
mean(pred_test == testset$y)
0.8666667
  • Середня тестова точність за 50 випадкових поділів train/test: 83,7%
Support Vector Machines в R

Розділ 2.3 — нелінійно роздільний набір, лінійне ядро з cost=1: опорні вектори, межа рішення і поля

Support Vector Machines в R

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

Support Vector Machines в R

Preparing Video For Download...