如何可视化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
相关产品推荐
相关产品推荐

