С поправками StompChicken (я неправильно рассчитал одно точечное произведение, тьфу!) Ответ, кажется, да.С тех пор я тестировал ту же проблему, используя предварительно вычисленное ядро с такими же правильными результатами.Если вы используете libsvm StompChickens clear, организованные вычисления - очень хорошая проверка.
Оригинальный вопрос: Я собираюсь начать использовать предварительно вычисленные ядра в libSVM.Я заметил ответ Влада на вопрос, и я подумал, что было бы разумно подтвердить, что libsvm дал правильные ответы.Я начал с предварительно не вычисленных ядер, просто с линейным ядром с 2 классами и тремя точками данных в 3-мерном пространстве.Я использовал данные
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 дает плохие результаты?(Я надеюсь, что делаю что-то не так.)