申请R的问题

时间:2015-06-23 09:14:26

标签: r svm apply

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

1 个答案:

答案 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

因为ccostcoef0class.weightscachesize匹配。