R语言训练SVM模型准确率94%但无法绘制决策边界求助
问题排查与解决方案
核心问题
- 你当前训练的SVM模型使用数据集中所有特征拟合,得到的是高维空间的分类超平面,无法直接在二维平面(仅展示两个特征的坐标系)中呈现
- 现有代码中的绘图逻辑完全没有涉及决策边界绘制:
plot(modfitsvm)是caret包输出的超参数调优结果图,fourfoldplot是混淆矩阵的可视化,都不会输出决策边界
实现双特征决策边界可视化的步骤
步骤1:使用目标双特征训练SVM模型
先选择你想要展示的两个特征(以乳腺癌数据集常用的radius_mean、texture_mean为例,可替换为你需要的特征),仅用这两个特征训练SVM:
# 构造仅包含目标特征和标签的训练子集,替换为你要使用的特征名 train_2d <- trainset[, c("diagnosis", "radius_mean", "texture_mean")] # 用双特征训练线性SVM,cost参数沿用你调优得到的0.18 mod_2d <- svm(diagnosis~., data = train_2d, kernel = "linear", cost = 0.18)
步骤2:生成网格预测数据
在两个特征的取值区间内生成密集网格点,预测每个网格点的分类结果:
# 生成两个特征的取值序列 x_seq <- seq(min(train_2d$radius_mean), max(train_2d$radius_mean), length.out = 150) y_seq <- seq(min(train_2d$texture_mean), max(train_2d$texture_mean), length.out = 150) # 构造网格数据集 grid_df <- expand.grid(radius_mean = x_seq, texture_mean = y_seq) # 预测网格点的分类 grid_df$pred <- predict(mod_2d, newdata = grid_df)
步骤3:绘制决策边界
基础绘图代码如下:
# 绘制样本点,按真实分类上色 plot(train_2d$radius_mean, train_2d$texture_mean, col = as.factor(train_2d$diagnosis), pch = 16, xlab = "半径均值", ylab = "纹理均值") # 叠加决策边界 contour(x_seq, y_seq, matrix(as.numeric(grid_df$pred), length(x_seq), length(y_seq)), levels = 1.5, add = T, drawlabels = F, lwd = 2, col = "black")
补充说明
如果需要基于全特征训练的模型绘制二维决策边界,需要先通过PCA等降维方法将所有特征投影到二维空间,再基于降维后的特征绘制边界,操作复杂度更高,新手建议先从双特征模型入手理解决策边界逻辑。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

