Является ли libsvm точным?

С поправками StompChicken (я неправильно вычислил одно скалярное произведение, тьфу!), Ответ, похоже, будет положительным. С тех пор я тестировал ту же проблему, используя предварительно вычисленное ядро, с теми же правильными результатами. Если вы используете libsvm StompChickens, ясные, организованные вычисления - очень хорошая проверка.

Исходный вопрос: Я собираюсь начать использовать предварительно вычисленные ядра в libSVM. Я заметил Влад ответил на вопрос, и я подумал, что было бы разумно подтвердить, что libsvm дает правильные ответы. Я начал с предварительно вычисленных ядер, просто с простого линейного ядра с 2 классами и тремя точками данных в трехмерном пространстве. Я использовал данные

1 1:3 2:1 3:0
2 1:3 2:3 3:1
1 1:7 3:9

. Файл модели, сгенерированный вызовом svm-train -s 0 - t 0 содержит

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 

Однако когда я вычисляю решение вручную, это не то, что я получаю. Кто-нибудь знает, страдает ли libsvm ошибками, или кто-нибудь может сравнить заметки и посмотреть, получают ли они то же самое, что и libsvm?

Коэффициенты a1 , a2 , a3 , возвращаемые libsvm, должны быть значениями, которые делают

a1 + a2 + a3 - 5*a1*a1 + 12*a1*a2 - 21*a1*a3 - 19*a2*a2/2 + 21*a2*a3 - 65*a3*a3 

как можно больше с ограничениями, которые a1 + a3 = a2 и каждый из a1 , a2 , a3 должен находиться в диапазоне от 0 до 1 (значение C по умолчанию).

В приведенном выше файле модели говорится ответ будет

a1 = .412665...
a2 = .444410...
a3 = .031745...

. Но нужно просто подставить a2 = a1 + a3 в большую формулу выше и подтвердить, что обе частные производные равны нулю, чтобы увидеть, является ли это решение правильным (поскольку ни одно из a1 , a2 , a3 равно 0 или 1), но они не равны нулю.

Я что-то делаю неправильно, или libsvm дает плохие результаты? (Я надеюсь, что делаю что-то не так.)

7
задан Community 23 May 2017 в 12:18
поделиться