簡體   English   中英

如何調整 R 插入符包中的最大迭代次數

[英]How to tweak maximum number of iterations in R caret package

我正在 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的最大迭代次數還是固定在特定級別?

無法調整迭代次數。 如果您指定maxiter = ..... ,它會被傳遞到底層的 kernlab lssvm函數,但不是lssvm函數中的一個選項並且被忽略。

您的警告僅在您設置classProbs = TRUE時發生,如果您將其保留為默認選項,您將不會看到消息。 這很有趣,因為該消息表明 svm 尚未達到收斂,並且在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

直接使用lssvm函數運行模型不會返回任何具有最大迭代次數的消息。 您可能想在caretgithub 頁面上添加一行。

PS:您在 train 函數中指定的 family 選項不需要(也沒有使用)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM