我首先运行下面的代码来调整SVM:
tunecontrol <- tune.control(nrepeat=5, sampling = "fix",cross=5, performances=T)
tune_svm1 <- tune(svm,
Y ~ 1
+ X
, data = data,
ranges = list(epsilon = seq(epsilon_start
,epsilon_end
,(epsilon_end-epsilon_start)/10)
, cost = cost_start*(1:5)
, gamma = seq(gamma_start
,gamma_end
,(gamma_end - gamma_start)/5))
, tunecontrol=tunecontrol)
在tune_svm1$performances
我有330个观察结果,其中包含我在epsilon
部分中所述的cost
,gamma
和ranges
的所有值代码以及计算出的error
的其他列。
我希望为epsilon
,cost
,gamma
和error
使用三个变量生成3D表面图,如X,Y,Z和颜色的最后一个。我已经阅读了plot3d和persp的几个资源,但实施起来很困难。
如果我尝试按照提供的示例并使用mesh
生成网格图,我只能将来自tune_svm1$performances
的4个变量中的3个进行网格划分,并保存X,Y和如第一个链接所示的Z很难,因为网格被保存为数组,而不是矩阵。我尝试使用以下代码破解图形,但视觉效果是荒谬的(可能是因为订单不是通过逐个网格化来保留的:
M1 <- mesh(tune_svm1$performances$epsilon[1:nrow(tune_svm1$performances)]
,tune_svm1$performances$cost[1:nrow(tune_svm1$performances)])
M2 <- mesh(tune_svm1$performances$epsilon[1:nrow(tune_svm1$performances)]
,tune_svm1$performances$gamma[1:nrow(tune_svm1$performances)])
M3 <- mesh(tune_svm1$performances$epsilon[1:nrow(tune_svm1$performances)]
,tune_svm1$performances$error[1:nrow(tune_svm1$performances)])
x <- M1$x ; y <- M1$y ; z <- M2$y ; c <- M3$y
surf3D(x,y,c, colvar = c)
最好的方法是什么?谢谢。