Извлечение коэффициентов / весов из файла модели libsvm
Я использую libsvm для создания классификатора 2 классов. Я хочу извлечь коэффициент / вес каждой функции, используемой моделью, сгенерированной ./svm-train training.training model.model
model.model
файл выглядит так:
svm_type c_svc
kernel_type rbf
gamma 8
nr_class 2
total_sv 442
rho 21
label 1 -1
nr_sv 188 254
SV
7080.357768871263 0:0 1:0.00643 2:0.01046 3:0.00963 4:0.02777 5:0.04338 19:0.04468
528.7111702760092 0:0 1:0.00058 3:0.00086 6:0.01158 7:0.0028 9:0.08991 13:0.0096
...
391.7649705739246 0:0 1:0.00055 3:0.00082 5:0.04615 7:0.06374 21:0.00374 31:0.00339 33:0.00395 38:0.16343
...
-564.1329424321915 0:0 1:0.00709 2:0.00384 3:0.00709 5:0.00399 9:0.01457 10:0.01244 11:0.0206 17:0.02124 20:0.00565 23:0.00846 27:0.04692 33:0.04271 35:0.02389 36:0.00859 39:0.02014
Как мне узнать, какие коэффициенты / веса будут использоваться svm-predict [options] test.test model.model out.out
? Те из последней строки?
Спасибо, М.
1 ответ
Файл модели, сгенерированный LIBSVM
Согласно официальной записи FAQ, состоит из следующей информации:
В файле модели после параметров и другой информации, такой как метки, каждая строка представляет опорный вектор. Векторы поддержки перечислены в порядке "меток", показанных ранее. (то есть те из первого класса в списке "меток" сгруппированы первыми и т. д.) Если k - общее количество классов, перед опорным вектором в классе j есть k-1 коэффициенты y* альфа, где альфа - двойное решение следующих двух классовых задач: 1 против j, 2 против j, ..., j-1 против j, j против j+1, j против j+2, ..., j против k и y=1 в первых коэффициентах j-1, y=-1 в оставшихся коэффициентах kj. Например, если есть 4 класса, файл выглядит так:
+-+-+-+--------------------+ |1|1|1| | |v|v|v| SVs from class 1 | |2|3|4| | +-+-+-+--------------------+ |1|2|2| | |v|v|v| SVs from class 2 | |2|3|4| | +-+-+-+--------------------+ |1|2|3| | |v|v|v| SVs from class 3 | |3|3|4| | +-+-+-+--------------------+ |1|2|3| | |v|v|v| SVs from class 4 | |4|4|4| | +-+-+-+--------------------+
Существует также пример того, как читать эти данные для того, чтобы вычислить w
для двоичного классификатора.