You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何可视化SVM分类参数调优网格搜索的优化路径?

SVM网格搜索优化路径的静态可视化实现

我们用e1071包的径向核SVM完成iris数据集分类,通过tune()函数做5折交叉验证的网格搜索调优cost和gamma参数,现有代码已经生成了误差热力图并标记了最优参数。要实现类似Stack Overflow上的无动画网格搜索优化路径可视化,只需要在原有绘图基础上,添加搜索路径的连线和标记即可,具体实现如下:

完整代码

data("iris", package = "datasets")

# 加载/安装所需包
if (!require("e1071")) {install.packages("e1071")} else {library("e1071")}
if (!require("viridis")) {install.packages("viridis")} else {library("viridis")}

# 预处理数据:提取标签+PCA降维到2维
Data <- list(Lab = as.character(iris[,5]),
             Mat = prcomp(iris[,-5])$x[,1:2])

set.seed(240319) # 固定随机种子保证结果可复现

# 执行网格搜索调优
Data$svm.tune <- tune(svm, train.x = Data$Mat, train.y = as.factor(Data$Lab), 
                      ranges = list(cost = c(10**(-3:3)), 
                                    gamma = c(10**(-3:3))),
                      type = "C-classification", kernel = "radial", scale = FALSE,
                      tunecontrol = tune.control(sampling = "cross", cross = 5))

# 整理误差矩阵用于热力图绘制
Data$svm.tune$Mat <- Data$svm.tune$performances[,-ncol(Data$svm.tune$performances)]
Data$svm.tune$Mat_2 <- xtabs(error~., data = Data$svm.tune$Mat)

# 提取网格搜索的参数路径(按实际执行顺序)
tune_path <- Data$svm.tune$performances[,c("cost", "gamma")]
# 转换为log10刻度,和热力图坐标轴匹配
tune_path_log <- log10(tune_path)

# 绘制可视化图
par(pty = "m",
    mar = c(2,2,1,1),
    mgp = c(1,0,0),
    tck = -0.01, 
    cex.axis = 0.75, 
    font.main = 1)
# 绘制误差热力图
image(x = log10(as.double(rownames(Data$svm.tune$Mat_2))),
      y = log10(as.double(colnames(Data$svm.tune$Mat_2))), 
      z = Data$svm.tune$Mat_2,
      col = viridis::inferno(50),
      xlab = expression(log[10](c)),
      ylab = expression(log[10](gamma)))
# 绘制优化路径:白色线段连接每一步参数组合
lines(tune_path_log, col = "white", lwd = 1.5)
# 用黄色点标记路径上的每个搜索步骤
points(tune_path_log, pch = 16, col = "yellow", cex = 0.8)
# 用红色大点突出标记最优参数组合
points(log10(Data$svm.tune$best.parameters$cost),
       log10(Data$svm.tune$best.parameters$gamma),
       pch = 19,
       col = "red", cex = 1.2)
# 可选:添加步骤序号标注(若参数组合过多会拥挤,可注释)
# text(tune_path_log, labels = 1:nrow(tune_path_log), col = "white", cex = 0.6, pos = 3)

dev.off()

关键说明

  • tune()函数的performances数据框会按实际搜索的先后顺序保存所有参数组合的信息,直接提取这部分数据就能得到优化路径。
  • 将参数转换为log10刻度是为了和热力图的坐标轴保持一致,避免坐标错位。
  • 用lines()绘制路径连线,points()标记每个搜索步骤,红色点专门突出最优参数,让整个搜索过程的轨迹清晰可见。

内容的提问来源于stack exchange,提问作者Excelsior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 19:23:21