生成线性可分数据集

R 中的支持向量机

Kailash Awati

Instructor

课程概览

  • 创建一个用于说明 SVM 关键原理的数据集。
  • 数据集含两个变量,且具有线性决策边界。
R 中的支持向量机

使用 runif() 生成二维数据集

  • 生成包含 200 个点的二维数据集
  • 变量 x1 和 x2 在 (0,1) 上均匀分布。
# 预备...
# 设置所需数据点数量
n <- 200
# 设定随机种子以保证可复现
set.seed(42)

# 生成两个自变量 x1 和 x2(范围 (0,1))的数据框 df <- data.frame(x1 = runif(n), x2 = runif(n))
R 中的支持向量机

创建两个类别

  • 创建由直线决策边界 x1 = x2 分隔的两个类别
  • 该直线过点 (0, 0),与水平线成 45°
  • 类别变量:直线下方 y = -1,上方 y = 1
# 将点分类为 -1 或 +1
df$y <- factor(ifelse(df$x1 - df$x2 > 0, -1, 1),
               levels = c(-1, 1))
R 中的支持向量机

使用 ggplot 可视化数据集

  • 绘制二维散点图,x 轴为 x1,y 轴为 x2
  • 用颜色区分类别(直线下方 = 红;上方 = 蓝)
  • 决策边界为 x1 = x2:过 (0, 0),斜率 = 1
library(ggplot2)

# 构建图形
p <- ggplot(data = df, aes(x = x1, y = x2, color = y)) + 
     geom_point() +
     scale_color_manual(values = c("-1" = "red", "1" = "blue")) +
     geom_abline(slope = 1, intercept = 0)

# 显示图形  
p
R 中的支持向量机

第 1.2 章 - 线性可分数据集

R 中的支持向量机

引入间隔

  • 为创建间隔,需要移除靠近边界的点
  • 移除 x1 与 x2 差值小于指定阈值的点
# 在数据集中创建 0.05 的间隔
delta <- 0.05
# 仅保留位于间隔之外的点
df1 <- df[abs(df$x1 - df$x2) > delta, ]
# 检查剩余数据点数量
nrow(df1)

# 重新绘制含间隔的数据集(代码与之前完全相同) p <- ggplot(data = df1, aes(x = x1, y = x2, color = y)) + geom_point() + scale_color_manual(values = c("red", "blue")) + geom_abline(slope = 1, intercept = 0) # 显示图形 p
R 中的支持向量机

第 1.2 章 - 含间隔的线性可分数据集

R 中的支持向量机

绘制间隔边界

  • 间隔边界:
    • 与决策边界平行(斜率 = 1)。
    • 位于其两侧的 ±delta 处(delta = 0.05)。
p <- p + 
     geom_abline(slope = 1, intercept = delta, linetype = "dashed") +
     geom_abline(slope = 1, intercept = -delta, linetype = "dashed")

p
R 中的支持向量机

第 1.2 章 - 含决策与间隔边界的线性可分数据集

R 中的支持向量机

开始练习!

R 中的支持向量机

Preparing Video For Download...