Z poprawkami StompChickena (pomyliłem jeden produkt, ugh!) Odpowiedź brzmi "tak". Od tego czasu testowałem ten sam problem, używając wstępnie skompilowanego jądra o tych samych poprawnych wynikach. Jeśli używasz libsvm StompChickens jasne, zorganizowane obliczenia są bardzo miłym sprawdzianem.Czy libsvm jest dokładne?
Oryginalne pytanie: Za chwilę zacznę używać prekomputowanych jąder w libSVM. Zauważyłem, Vlad's answer na pytanie i myślałem, że byłoby mądre, aby potwierdzić, że libsvm dał prawidłowe odpowiedzi. Zacząłem od niekomputerowych jądra, po prostu proste liniowe jądro z 2 klasami i trzema punktami danych w przestrzeni trójwymiarowej. Kiedyś dane
1 1:3 2:1 3:0
2 1:3 2:3 3:1
1 1:7 3:9
Plik modelu generowane przez wywołanie svm-train -s 0 - t 0
zawiera
svm_type c_svc
kernel_type linear
nr_class 2
total_sv 3
rho -1.53951
label 1 2
nr_sv 2 1
SV
0.4126650675419768 1:3 2:1 3:0
0.03174528241667363 1:7 3:9
-0.4444103499586504 1:3 2:3 3:1
Jednak kiedy obliczyć rozwiązanie ręką, że nie jest to, co dostaję. Czy ktoś wie, czy libsvm cierpi z powodu błędów lub czy ktoś może porównać notatki i zobaczyć, czy robi to samo, co robi program libsvm?
Współczynniki a1
, a2
, a3
zwracane przez libsvm to powinno wartości, które czynią
a1 + a2 + a3 - 5*a1*a1 + 12*a1*a2 - 21*a1*a3 - 19*a2*a2/2 + 21*a2*a3 - 65*a3*a3
tak duża, jak to możliwe, z ograniczeniami, że a1 + a3 = a2
i każdy a1
, a2
, a3
wymagana jest leżą między 0 a 1 (domyślna wartość C).
Powyższy plik modelu mówi, że odpowiedź jest
a1 = .412665...
a2 = .444410...
a3 = .031745...
Ale po prostu musi zastąpić a2 = a1 + a3
do wielkiego wzoru powyżej potwierdzają obie pochodne cząstkowe są równe zeru, aby sprawdzić, czy to rozwiązanie jest prawidłowe (ponieważ żaden z a1
, a2
, a3
to 0 lub 1), ale nie są one zerowe.
Czy robię coś nie tak, czy też jest to niezgodne z prawdą, co daje złe wyniki? (Mam nadzieję, że coś robię nie tak).