2015-04-14 125 views
1

我想要使用包{e1071}来训练svm分类器。我意识到class.weight是我想要调整的参数之一。例如。我想测试两个类的权重c(25,50)和c(20,55),我想知道调优函数中的构建是否可以完成这项工作,如果是这样的话,怎么样?R:调整{e1071}包中的SVM参数 - class.weights

这里是我的训练数据:

training.data = 

    height0 height1 height2 weight0 weight1 gender class 
1  0  1  0  1  0  1  1 
2  0  1  0  0  1  0  1 
3  0  1  0  0  0  1  1 
4  1  0  0  1  0  0  1 
5  0  1  0  0  1  0  2 
6  0  1  0  0  1  0  2 

,并有2个级别的响应变量 '类'

training.data$class = 

[1] 1 1 1 1 2 2 
Levels: 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)) 

不会给我一个错误。我谷歌搜索,但似乎无法找到正确的方法...任何帮助表示赞赏!

回答

3

ranges列表是一个已命名的参数列表,您要调整的参数是class.weights。我相信你的范围线在曲调将是这样的:

ranges=list (class.weights=list(c("1"=25, "2"=20), c("1"=50, "2"=55)) 
+0

没问题。谢谢! (更像'ranges = list(class.weights = list(c(“1”= 25,“2”= 50),c(“1”= 20,“2”= 55))''但它绝对是我正在寻找的东西!) –