线性支持向量机

R 中的支持向量机

Kailash Awati

Instructor

划分训练集与测试集

  • 上一章生成的数据集在数据框 df 中。
  • 将数据集划分为训练集和测试集
  • 随机 80/20 划分
    # 设置随机种子,保证可复现
    set.seed(1)
    # 计算训练集的行数上限
    sample_size <- floor(0.8 * nrow(df))
    # 按 80/20 比例随机划分训练/测试集
    train <- sample(seq_len(nrow(df)), size = sample_size)
    # 划分训练集与测试集
    trainset <- df[train, ]
    testset <- df[-train, ]
    
R 中的支持向量机

决策边界与核函数

  • 决策边界可以是直线、多项式或更复杂的函数。
  • 决策边界的类型称为核函数。
  • 需预先指定核函数类型。
  • 本章聚焦线性核。
R 中的支持向量机

线性核的 SVM

  • 我们将使用 e1071 库中的 svm 函数。
  • 该函数有多个参数,我们将显式设置以下内容:
    • formula——指定因变量的公式,此处为 y。
    • data——包含数据的数据框,即 trainset。
    • type——设为 C-classification(分类问题)。
    • kernel——决策边界形式,此处为 linear。
    • cost 与 gamma——用于调参。
    • scale——是否缩放数据的布尔值。
R 中的支持向量机

构建线性 SVM

  • 加载 e1071 库并调用 svm() 函数
library(e1071)
svm_model<- svm(y ~ .,
                data = trainset, 
                type = "C-classification", 
                kernel = "linear", 
                scale = FALSE)
R 中的支持向量机

模型概览

  • 查看 svm_model 可得到:
    • 模型概览,包括分类类型与核函数类型
    • 调参取值
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
R 中的支持向量机
# 训练集中的支持向量索引
svm_model$index

# 支持向量 svm_model$SV
# 负截距(未加权) svm_model$rho
# 支持向量的权重系数 svm_model$coefs
4   8  10  11  18  37  38  39  47  59  60  74  76  77  78  80  83 ...

x1 x2 5 0.519095949 0.44232464
-0.1087075
[,1] [1,] 1.0000000
R 中的支持向量机
  • 获取训练集与测试集的类别预测。
  • 评估模型在训练集和测试集的准确率。
# 训练集准确率
pred_train <- predict(svm_model, trainset)
mean(pred_train == trainset$y)
1
# 测试集准确率
pred_test <- predict(svm_model, testset)
mean(pred_test == testset$y)
1
# 完美!
R 中的支持向量机

该练习啦!

R 中的支持向量机

Preparing Video For Download...