2013-04-09 4 views
12

Anknüpfend von Invalid probability model for large support vector machines using ksvm in R:Linie Suche nicht in der Ausbildung ksvm prob.model

Ich trainiere eine SVM mit ksvm aus dem kernlab Paket in R. ich das Wahrscheinlichkeitsmodell verwenden will, aber während der S-förmige Beschlag ich die folgende Fehlermeldung:

line search fails -1.833726 0.5772808 5.844462e-05 5.839508e-05 -1.795008e-08 
-1.794263e-08 -2.096847e-12 

Wenn dies geschieht, ist der resultierende Wert von prob.model(m) ein Vektor aller Wahrscheinlichkeiten, anstatt der erwarteten Parameter einer Sigmoidfunktion über diese Wahrscheinlichkeiten versehen. Was verursacht diesen Fehler und wie kann ich es verhindern? Die Suche nach der Fehlermeldung ergab keine Ergebnisse.

Reproduzierbare Beispiel:

load(url('http://roelandvanbeek.nl/files/df.rdata')) 
ksvm(label~value,df[1:1000],C=10,prob.model=TRUE)->m 
prob.model(m) # works as it should, prints a list containing one named list 

# the below, non-working problem, unfortunately takes an hour due to the large 
# sample size 
ksvm(label~value,df,C=10,prob.model=TRUE)->m # line search fails 
prob.model(m) # just a vector of values 
+0

Haben Sie das herausgefunden? –

+4

Nein. Ich habe festgestellt, dass es auch bei kleineren Datensätzen vorkommt, konnte aber noch keine konsistente Erklärung finden. Oft wird durch das Reduzieren oder Erhöhen der Anzahl der Beobachtungen das Problem behoben, das zur Unregelmäßigkeit seiner Natur beiträgt ... – roelandvanbeek

+0

@roelandvanbeek, ich sehe das Problem, wenn ich versuche, die Lernkurve für mein Dataset zu zeichnen, aber wenn ich nur für bestimmte Splits 70/30 zum Beispiel, zeigt es nicht das Problem? meinst du damit, Beobachtungen zu reduzieren oder zu erhöhen? –

Antwort

1

auf den Quellcode der Suche, this is the line that throws that error.

Es ist auf der Methode .probPlatt mit der Newton-Methode, um die Funktion zu optimieren, in diesem Fall Platts Skalierung. Wenn Sie jedoch line 3007 überprüfen, sehen Sie einige Parameter, die sich auf die Methode beziehen.

Einer dieser Parameter ist minstep im Grunde der minimale numerische Schritt, den die Methode versuchen sollte, um die Funktion zu optimieren. Sie sehen, das ist genau die Bedingung des Fehlers in Zeile 3090: if (stepsize < minstep). Im Grunde genommen konvergiert die Funktion nicht, selbst wenn die minimale Schrittweite erreicht wird.

Sie können versuchen, minstep zu ändern, um Werte zu verringern, um es zu umgehen. Alexandros bemerkte sogar, dass diese Parameter wahrscheinlich in der Schnittstelle sein sollten.

+0

sagst du, dass wir den Code ändern und neu kompilieren sollten? –

+0

@EB Ja über das Ändern des Codes, Neukompilierung ist jedoch nicht unbedingt erforderlich. –

Verwandte Themen