我想使用{e1071}包训练一个SVM分类器。我意识到class.weight是我想要调整的参数之一。例如,我想测试两种类别权重c(25, 50)与c(20, 55)。我想知道内置的tune函数是否能完成这项工作,如果可以,如何操作?
这是我的训练数据:
training.data = height0 height1 height2 weight0 weight1 gender class1 0 1 0 1 0 1 12 0 1 0 0 1 0 13 0 1 0 0 0 1 14 1 0 0 1 0 0 15 0 1 0 0 1 0 26 0 1 0 0 1 0 2
响应变量’class’有两个层次
training.data$class = [1] 1 1 1 1 2 2Levels: 1 2
我想使用类似这样的函数,
param.obj <- tune(svm, class ~., data = training.data, ranges = list("1" = c(25, 20), "2" = c(50,55) ), tunecontrol = tune.control(sampling = "cross", cross = 5) )
但我认为这不是正确的方法,因为如果我将”2″改为”3″,它仍然有效。
param.obj <- tune(svm, class ~., data = training.data, ranges = list("1" = c(25, 20), "3" = c(50,55) ), tunecontrol = tune.control(sampling = "cross", cross = 5) )
这不会给我报错。我在网上搜索了一番,但似乎找不到正确的方法…任何帮助都将不胜感激!
回答:
ranges
列表是一个命名参数列表,你想要调整的参数是class.weights
。我认为你的tune函数中的ranges行应该是这样的:
ranges=list (class.weights=list(c("1"=25, "2"=20), c("1"=50, "2"=55))