對徑向可分資料的線性 SVM

R 的支援向量機

Kailash Awati

Instructor

線性 SVM,cost = 1

  • 將徑向可分的資料集切分為訓練/測試(seed = 10)
# Build default cost linear SVM on training set

svm_model <- svm(y ~ ., data = trainset, type = "C-classification", kernel = "linear", cost = 1) svm_model
Number of Support Vectors:  126
# Calculate accuracy on test set

pred_test <- predict(svm_model, testset) mean(pred_test == testset$y)
0.6129032
plot(svm_model, trainset)
R 的支援向量機

第 3.2 章-徑向可分資料集,預設 cost 的線性 kernel,使用 svm.plot 繪圖

R 的支援向量機

線性 SVM,cost = 100

svm_model <- svm(y ~ ., data = trainset, type = "C-classification", kernel = "linear", cost = 100)
svm_model
Number of Support Vectors:  136
# Accuracy
pred_test <- predict(svm_model, testset)
mean(pred_test == testset$y)
0.6129032
plot(svm_model, trainset)
R 的支援向量機

第 3.2 章-徑向可分資料集,cost=100 的線性 kernel,使用 svm.plot 繪圖

R 的支援向量機

更好的準確率估計

  • 在多組獨立的訓練/測試切分上計算平均準確率。
  • 檢查結果的標準差以了解變異程度。
R 的支援向量機

預設 cost 的 SVM 平均準確率

accuracy <- rep(NA, 100)
set.seed(10)
for (i in 1:100) {
  sample_size <- floor(0.8 * nrow(df))
  train <- sample(seq_len(nrow(df)), size = sample_size)
  trainset <- df[train, ]
  testset <- df[-train, ]
  svm_model<- svm(y ~ ., data = trainset, type = "C-classification", cost = 1, kernel = "linear")
  pred_test <- predict(svm_model, testset)
  accuracy[i] <- mean(pred_test == testset$y)}
mean(accuracy)
sd(accuracy)
0.544
0.04273184
R 的支援向量機

線性 SVM 的表現如何?

  • 只比擲硬幣好一點!
  • 善用我們對邊界的認識,可以做得更好。
R 的支援向量機

一起來練習吧!

R 的支援向量機

Preparing Video For Download...