如何调整R插入包中的最大迭代次数

时间:2016-05-03 23:57:21

标签: r iteration r-caret

我在R caret包中运行了一个带径向基内核函数的支持向量机。我的代码运行时没有错误或警告,但它会生成“达到最大迭代次数...”消息,我将其解释为该算法未收敛到解决方案。

使用小型大学入学数据集(4个要素, n = 400)作为示例:

# Load data & factor admit variable.
> mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")
  mydata$admit <- as.factor(mydata$admit)

# Create levels yes/no to make sure the the classprobs get a correct name.
 levels(mydata$admit) = c("yes", "no")


# Train SVM via 10-fold CV.
set.seed(123)
train_control <- trainControl( method="cv",
    number=10,
    classProbs = TRUE,
    savePredictions = TRUE)

model_rbfsvm<- train(as.factor(admit) ~ .,
    data=mydata,
    trControl=train_control,
    method="svmRadial", 
    family="binomial", 
    tuneGrid=expand.grid(C=c(.000001, .00001, .0001, .001, .01, .1, 1, 10), sigma=c(.00001, .0001, .001, .01, .1, 1, 10)), 
    metric="Accuracy", 
    preProcess=c("center","scale"))

成功执行但产生以下消息(我已经缩写 - 它继续多行):

maximum number of iterations reached 4.663775e-05 4.663771e-05maximum number of iterations reached 0.0003396917 0.0003396878...

使用train函数中的maxiter=语句调整最大迭代次数会产生相同的消息。

是否可以在caret中调整最大迭代次数,还是将其固定在特定级别?

1 个答案:

答案 0 :(得分:1)

无法调整迭代次数。如果指定callback=?,则会将其传递给基础kernlab maxiter = .....函数,但不是lssvm函数中的选项而会被忽略。

您的警告仅在您设置lssvm时发生,如果您将其保留为默认选项,则不会看到消息。这很有趣,因为该消息表明svm尚未达到收敛状态,并且在classProbs = TRUE时它会以某种方式表达。但我对此表示怀疑,因为模型结果完全相同。如果设置classProbs = FALSE,则会更好地显示消息。

verboseIter = TRUE

使用+ Fold1: C=0.001, sigma=0.001 maximum number of iterations reached 0.00024476 0.0002447579- Fold1: C=0.001, sigma=0.001 + Fold1: C=0.010, sigma=0.001 maximum number of iterations reached 0.002770727 0.002765972- Fold1: C=0.010, sigma=0.001 函数直接运行模型不会返回任何具有最大迭代次数的消息。您可能希望在github page of caret上删除一行。

P.S。:您不需要(并且不使用)在列车功能中指定的族选项。