2013-04-09 10 views
12

Kontynuując od Invalid probability model for large support vector machines using ksvm in R:Linia nie szukaj w treningu ksvm prob.model

ja trenuje się za pomocą ksvm SVM z pakietu kernlab w R. Chcę użyć modelu prawdopodobieństwa, ale podczas montażu otrzymuję esicy następujący komunikat o błędzie:

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

Kiedy to nastąpi, otrzymaną wartość prob.model(m) jest wektorem wszystkich prawdopodobieństw, zamiast oczekiwanych parametrów funkcji esicy wyposażonego w ciągu tych prawdopodobieństw. Co powoduje ten błąd i jak mogę temu zapobiec? Wyszukiwanie komunikatu o błędzie nie przyniosło żadnych wyników.

Powtarzalne przykład:

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

Udało ci się to rozgryźć? –

+4

Nie. Odkryłem, że występuje również w przypadku mniejszych zestawów danych, ale nie udało się jeszcze znaleźć spójnego wyjaśnienia. Często zmniejszenie lub zwiększenie liczby obserwacji rozwiązuje problem, co zwiększa nieregularność jego natury ... – roelandvanbeek

+0

@roelandvanbeek, widzę problem, gdy próbuję wykreślić krzywą uczenia się dla mojego zestawu danych, ale kiedy uruchamiam tylko dla niektóre podziały 70/30 na przykład nie pokazują problemu? czy to masz na myśli redukując lub zwiększając obserwacje? –

Odpowiedz

1

Patrząc na kod źródłowy, this is the line that throws that error.

Jest to metoda .probPlatt za pomocą metody Newtona do optymalizacji funkcji, w tym przypadku skalowania Platt. Jeśli sprawdzisz line 3007, chociaż zobaczysz kilka parametrów dotyczących tej metody.

Jednym z takich parametrów jest minstep zasadniczo minimalny krok numeryczny, który metoda powinna nadal próbować zoptymalizować funkcję. Widzisz, jest to dokładnie stan błędu w linii 3090: if (stepsize < minstep). Zasadniczo funkcja nie jest zbieżna, nawet po osiągnięciu minimalnego rozmiaru kroku.

Możesz spróbować zmienić wartość minstep, aby obniżyć wartości, aby go ominąć. Alexandros powiedział nawet, że te parametry powinny prawdopodobnie znajdować się w interfejsie.

+0

mówisz, że powinniśmy zmienić kod i przekompilować go? –

+0

@EB Tak, jeśli chodzi o zmianę kodu, rekompilacja nie jest wymagana. –