线性 SVM 处理径向可分数据

R 中的支持向量机

Kailash Awati

Instructor

线性 SVM,cost = 1

  • 将径向可分数据集划分为训练/测试(seed = 10)
# 在训练集上构建默认 cost 的线性 SVM

svm_model <- svm(y ~ ., data = trainset, type = "C-classification", kernel = "linear", cost = 1) svm_model
Number of Support Vectors:  126
# 计算测试集准确率

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

第 3.2 章 - 径向可分数据集,默认 cost 线性核,使用 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
# 准确率
pred_test <- predict(svm_model, testset)
mean(pred_test == testset$y)
0.6129032
plot(svm_model, trainset)
R 中的支持向量机

第 3.2 章 - 径向可分数据集,cost=100 线性核,使用 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...