Прежде всего, я прошу прощения за общий заголовок, но я не могу понять, в чем моя проблема.классификация libSVM не работает
Я только что создал libSVM 3.17, и я пытаюсь использовать его, я заметил, что он не может предсказать что-либо на моем тестовом наборе. Так что я сделал несколько тестов с очень маленькой проблемой. Вот что я делаю:
3 класса, 2-мерные векторы признаков, в основном 3 кластера точек. Это обучение файл:
1 0:1 1:1
1 0:1.1 1:0.9
1 0:1 1:1.2
2 0:10 1:11
2 0:9 1:10
2 0:10 1:12
3 0:50 1:52
3 0:49 1:50
3 0:48 1:49
физкультура модель с
libsvm-train.exe -t 0 data.txt model
(так, используя линейное ядро, которое должно быть более чем достаточно здесь) дает следующий файл модели:
svm_type c_svc
kernel_type linear
nr_class 3
total_sv 4
rho -1.26244 -1.04645 -1.58585
label 1 2 3
nr_sv 1 2 1
SV
0.01414027149321267 0.000445053674077491 0:1 1:1.2
-0.01414027149321267 0 0:9 1:10
-0 0.0007109847138286527 0:10 1:12
-0.000445053674077491 -0.0007109847138286527 0:48 1:49
Теперь, предскажите: это тестовый файл:
1 1
10 11
49 49
И выход
1
1
1
с точностью до 33%.
Я совершенно не знаком с libSVM, и я явно делаю что-то не так, читая LibSVM FAQ, мне действительно не помогает.
Спасибо за любой предоставленный ввод.
Если это ваш тестовый файл, формат неправильный. Попробуйте использовать учебный файл в качестве тестового файла. Вам нужно выбрать подходящее значение параметра '-c cost', попробовав разные значения с данными валидации. Прочитайте http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf – Bull
Да, спасибо, я только что понял, что тестовый формат был совершенно неправильным. Единственное, чего я не понимаю, почему я должен предоставлять метки в первом столбце тестового файла? У меня их нет для всех моих тестов, моя истинная правда довольно ограничена. – powder
Метки в тестовых данных используются для расчета точности. Если вы не знаете, что этикетки просто помещают любое значение в поле метки, но тогда, конечно, точность не имеет смысла. У немаркированных тестовых данных по-прежнему есть поле с меткой, чтобы сделать вещи немного проще, так что libsvm не должен знать, как читать два разных формата, и поэтому вам не нужно указывать, какой формат. – Bull