2016-05-03 17 views
1

R caretパッケージの放射ベースカーネル機能をサポートするサポートマシンを実行しています。私のコードはエラーや警告なしで実行されますが、アルゴリズムが解決策に集中していないことを意味すると解釈する「最大反復回数に達する...」というメッセージが生成されます。小さな大学入学データセット使用Rキャレットパッケージの反復回数を調整する方法

例として、(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... 

同じメッセージを生成列車機能にmaxiter=ステートメントで反復の最大数を調整します。

caretに最大反復回数を調整することはできますか、それとも特定のレベルに固定されていますか?

答えて

1

反復回数を調整することはできません。 maxiter = .....を指定すると、それは基底のkernlab lssvm関数に渡されますが、lssvm関数のオプションではなく、無視されます。

警告は、classProbs = TRUEを設定すると発生します。デフォルトオプションのままにすると、メッセージは表示されません。興味深いのは、svmがまだコンバージェンスに達していないことを示すメッセージで、何とかしてclassProbs = FALSEとなったときです。しかし、モデルの結果はまったく同じなので、私はそれについて疑問を抱いています。 verboseIter = TRUEを設定すると、メッセージの表示が少し改善されます。 lssvm機能付きモデルを直接実行

+ 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 .:列車機能で指定したファミリオプションは不要(使用されない)です。

+0

ありがとう@phiver、これは非常に役に立ちます。そうです、 'lssvm'関数に' maxiter = '引数はありませんので、公差基準が満たされたときにアルゴリズムが終了すると仮定しています(デフォルト= .0001)。 「最大反復回数に達しました...」というメッセージが表示されているにもかかわらず、「キャレット」はまだSVM予測を出力していますので、これは偽の警告でなければなりません。 – RobertF

+1

もう少し掘り下げた後、私はこの記事に出会いました:http://stackoverflow.com/questions/15503027/why-are-probabilities-and-response-in-ksvm-in-r-not-consistent] 'classProbs = TRUE'(予測された応答が確率である場合)と' classProbs = FALSE'(予測された応答がはい/いいえのラベルである場合)の間にSVMを当てはめるための別個の方法論です。アルゴリズムが収束していないため、 'classProbs = TRUE'のときに最大反復メッセージが表示される可能性があります。 – RobertF

関連する問題