Cross Validated Asked by siegfried on September 5, 2020
I would like to fit a radial SVM onto the data. The tuning parameters cost and gamma are chosen by CV with the tune function. However the summary of the optimal model does not show the optimal gamma value.
The summary where gamma is not shown:
> svmult= svmcv$best.model
> svmult
Call:
best.tune(method = svm, train.x = type ~ ., data = wheat[tr,
], ranges = list(cost = seq(0.001, 1, length.out = 50)),
kernel = "radial", gamma = c(0.1, 1, 2, 3, 4, 5))
Parameters:
SVM-Type: C-classification
SVM-Kernel: radial
cost: 0.2864286
Number of Support Vectors: 171
Meanwhile when I try to plot the data and the SVM hyperplanes, I received this error:
Error in plot.svm(svmult, wheat) : missing formula.
. Please help me with the CV and plotting. Thanks in advance!
The data:
> head(wheat)
class density hardness size weight moisture type
1 hrw 1.313662 73.32533 2.19946 26.3070 6.97526 Healthy
2 srw 1.233610 31.06556 1.84809 28.4400 12.51565 Healthy
3 srw 1.203221 -23.43620 3.15953 40.0530 12.36660 Sprout
4 hrw 1.279238 70.97478 3.09405 25.0035 7.53971 Healthy
5 srw 1.341604 60.25526 2.14827 30.0990 12.22773 Healthy
6 hrw 1.384803 53.07190 2.42810 26.5440 7.22400 Healthy
> dim(wheat)
[1] 275 7
rm(list=ls())
wheat= read.csv('Wheat.csv')
wheat= na.omit(wheat)
head(wheat)
wheat$class= factor(wheat$class)
attach(wheat)
library(e1071)
x= model.matrix(type~., data= wheat)[,-1]
y= wheat$type
tr= sample(1:nrow(wheat), floor(nrow(wheat)*2/3))
trainX= x[tr,]
testX= x[-tr,]
trainY= y[tr]
testY= y[-tr]
svmcv= tune(svm, type~., data = wheat[tr,], kernel= 'radial', ranges = list(cost=seq(0.001, 1, length.out = 50)), gamma= c(0.1,1,2,3,4,5))
summary(svmcv)
svmult= svmcv$best.model
plot(svmult, wheat)
I believe gamma should be put inside the ranges list. The same goes for kernel if you want to tune for different kernels.
As for the plotting problem, you are missing a formula for the plot, and since it is a 2D-plot, you probably need to specify a slice for the other variables so that it is visualizable in 2D. Try something like this:
plot(svmModel, data=wheat, type~Variable2ChosenAsFree,
slice=list(
Variable3ChosenAsConstant=3,
Variable4ChosenAsConstant=8
)
Where you need to provide the correct variable names instead of my made up variable names.
Answered by dekuShrub on September 5, 2020
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP