我在使用R中的apply函数时遇到问题。我做了以下函数:
TrainSupportVectorMachines <- function(trainingData,kernel,G,C){
####train het model
fit<-svm(Device~.,data=trainingData,kernel=kernel,probability=TRUE,
gamma =G, costs=C)
return(fit);
}
我想用不同的Cost(c)值训练模型。因此,我尝试了以下表达:
cst = matrix(2^(-4:-2),ncol=3)
kernl = "sigmoid"
fitSVMBP <- apply(cst,2,function(x)TrainSupportVectorMachines(dtr1,kernl,0.625,x))
我的观点是,fitSVMBP成为具有不同SVM模型的列表,具有不同的成本值。但是我得到了一个包含不同SVM模型的列表,但它们的成本都是1。
有人知道我做错了吗?
编辑:
我使用e1071包。 数据集看起来像:
> head(dtr1)
Device Geslacht Leeftijd Invultijd Type Maanden.geleden
1 pc M 45 16.0 A 15
2 pc V 43 27.5 A 3
3 pc V 28 16.0 A 15
4 pc V 17 10.0 A 13
5 pc M 56 16.0 A 15
6 pc M 50 27.5 A 3
答案 0 :(得分:1)
您已调用参数costs
而非cost
。以下是?svm
中使用示例数据的示例,您可以尝试这样做:
model <- svm(Species ~ ., data = iris, cost=.6)
model$cost
# [1] 0.6
model <- svm(Species ~ ., data = iris, costs=.6)
model$cost
# [1] 1
R将执行部分匹配(因此在这种情况下cos=.6
会起作用)但是如果你过度指定一个它不匹配的参数。
如果你给它一个不值得期待的论点,它也不会总是抱怨:
> model <- svm(Species ~ ., data = iris, costs=.6, asjkdakjshd=1)
>
因为在...
参数中捕获了不匹配的args。
如果你走得太远,你会得到:
> model <- svm(Species ~ ., data = iris, c=.122)
Error in svm.default(x, y, scale = scale, ..., na.action = na.action) :
argument 4 matches multiple formal arguments
因为c
与cost
,coef0
,class.weights
和cachesize
匹配。