2013-11-08 2 views
0

Прежде всего, я прошу прощения за общий заголовок, но я не могу понять, в чем моя проблема.классификация 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, мне действительно не помогает.

Спасибо за любой предоставленный ввод.

+1

Если это ваш тестовый файл, формат неправильный. Попробуйте использовать учебный файл в качестве тестового файла. Вам нужно выбрать подходящее значение параметра '-c cost', попробовав разные значения с данными валидации. Прочитайте http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf – Bull

+0

Да, спасибо, я только что понял, что тестовый формат был совершенно неправильным. Единственное, чего я не понимаю, почему я должен предоставлять метки в первом столбце тестового файла? У меня их нет для всех моих тестов, моя истинная правда довольно ограничена. – powder

+0

Метки в тестовых данных используются для расчета точности. Если вы не знаете, что этикетки просто помещают любое значение в поле метки, но тогда, конечно, точность не имеет смысла. У немаркированных тестовых данных по-прежнему есть поле с меткой, чтобы сделать вещи немного проще, так что libsvm не должен знать, как читать два разных формата, и поэтому вам не нужно указывать, какой формат. – Bull

ответ

1

Я думаю, что ваш формат данных вставлен неправильно. Формат данных LIBSVM состоит из пары:. Значение - целое число, начиная с 1. Поэтому я думаю, вы должны попытаться изменить количество. например, от 0 до 1 и от 1 до 2 .. что-то вроде этого.

Вот мое предложение!

1 1:1 2:1 
1 1:1.1 2:0.9 
1 1:1 2:1.2 
2 1:10 2:11 
2 1:9 2:10 
2 1:10 2:12 
3 1:50 2:52 
3 1:49 2:50 
3 1:48 2:49 

Также вы можете проверить README для libsvm в разделе «Установка и формат данных». Надеюсь, это поможет вашей проблеме.

Cheers !!

Смежные вопросы