可视化线性 SVM

R 中的支持向量机

Kailash Awati

Instructor

  • 使用 ggplot() 绘制训练数据。
# Visualize training data, distinguish classes using color
p <- ggplot(data = trainset, aes(x = x1, y = x2, color = y)) +
     geom_point() +
     scale_color_manual(values = c("red", "blue"))
# Render plot
p
  • 使用 svm_model 的 index 标出支持向量。
# Identify support vectors
df_sv <- trainset[svm_model$index, ]
# Mark out support vectors in plot
p <- p + geom_point(data = df_sv,
                    aes(x = x1, y = x2),
                    color = "purple",
                    size = 4, alpha = 0.5)
# Display plot
p
R 中的支持向量机

第 2.2 章——线性可分数据,默认 cost 线性核,含支持向量

R 中的支持向量机

求边界的斜率与截距:

  • 用 svm_model 的 coefs 与 SV 构造权重向量 w。
# Build weight vector
w <- t(svm_model$coefs) %*% svm_model$SV
  • 斜率 = -w[1] / w[2]
# Calculate slope and save it to a variable
slope_1 <- -w[1] / w[2]
  • 截距 = svm_model$rho / w[2]
# Calculate intercept and save it to a variable
intercept_1 <- svm_model$rho / w[2]
R 中的支持向量机
  • 使用上页计算的斜率与截距添加决策边界。
  • 用 geom_abline() 将决策边界加入图中。
# Plot decision boundary based on calculated slope and intercept
p <- p + geom_abline(slope = slope_1,
                     intercept = intercept_1)
  • 与决策边界平行的"间隔"位于其两侧,偏移 1 / w[2]。
# Add margins to plot
p <- p + 
    geom_abline(slope = slope_1,
                intercept = intercept_1 - 1 / w[2],
                linetype = "dashed") + 
    geom_abline(slope = slope_1,
                intercept = intercept_1 + 1 / w[2],
                linetype = "dashed")
# Display plot
p
R 中的支持向量机

第 2.2 章——线性可分数据,默认 cost 线性核,含支持向量与决策/间隔边界

R 中的支持向量机

软间隔分类器

  • 允许边界位置/形状存在不确定性
    • 从不完全线性
    • 通常未知
  • 我们的决策边界是线性的,因此可减小间隔
R 中的支持向量机

使用 svm plot() 可视化决策边界

  • e1071 中的 svm plot() 可轻松绘制决策边界。
# Visualize decision boundary using built in plot function
plot(x = svm_model,
     data = trainset)
R 中的支持向量机

第 2.2 章——线性可分数据,默认 cost 线性核,使用 svm.plot 绘图

R 中的支持向量机

Time to practice!

R 中的支持向量机

Preparing Video For Download...