应用 R 的问题

Problems with apply R

我在 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

您调用了参数 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)
> 

因为不匹配的参数被困在 ... 参数中。

如果你走得太远,你会得到:

> 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 匹配 costcoef0class.weightscachesize