Параметр Vowpal Wabbit inverted_hash выдает пустой вывод, но почему?

Я пытаюсь сохранить модель vowpal wabbit с перевернутыми хэшами. У меня есть действующая модель, созданная со следующим:

vw --oaa 2 -b 24 -d mydata.vw --readable_model mymodel.readable

который создает файл модели следующим образом:

Version 7.7.0
Min label:-1.000000
Max label:1.000000
bits:24
0 pairs: 
0 triples: 
rank:0
lda:0
0 ngram: 
0 skip: 
options: --oaa 2
:0
66:0.016244
67:-0.016241
80:0.026017
81:-0.026020
84:0.015005
85:-0.015007
104:-0.053924
105:0.053905
112:-0.015402
113:0.015412
122:-0.025704
123:0.025704
...

(и так далее для многих тысяч других функций). Однако, чтобы быть более полезным, мне нужно видеть имена функций. Казалось бы, довольно очевидная вещь, но я сделал

vw --oaa 2 -b 24 -d mydata.vw --invert_hash mymodel.inverted

и он создал такой файл модели (веса не создаются):

Version 7.7.0
Min label:-1.000000
Max label:1.000000
bits:24
0 pairs: 
0 triples: 
rank:0
lda:0
0 ngram: 
0 skip: 
options: --oaa 2
:0

Такое ощущение, что я явно сделал что-то не так, но я думаю, что использую параметры в задокументированный способ:

--invert_hash похож на --readable_model, но модель выводится в более удобном для человека формате с именами функций, за которыми следуют веса, вместо хэш-индексов и весов.

Кто-нибудь понимает, почему моя вторая команда не дает никакого результата?


person Ben Collins    schedule 26.06.2014    source источник


Ответы (1)


Это вызвано ошибкой в ​​VW, которая была недавно исправлена ​​(из-за этого вопроса), см. https://github.com/JohnLangford/vowpal_wabbit/issues/337.

Кстати, --oaa 2 использовать не имеет смысла. Если вам нужна бинарная классификация (также известная как логистическая регрессия), используйте --loss_function=logistic (и убедитесь, что ваши метки равны 1 и -1). OAA имеет смысл только для N>2 классов (рекомендуется использовать --loss_function=logistic с --oaa).

Также обратите внимание, что обучение с --invert_hash намного медленнее (и, конечно, требует больше памяти). Рекомендуемый способ создания модели с инвертированным хэшем, особенно с несколькими проходами, состоит в том, чтобы изучить обычную двоичную модель, а затем преобразовать ее в инвертированный хеш, используя один проход по обучающим данным с -t:

vw -d mytrain.data -c --passes 4 -oaa 3 -f model.binary
vw -d mytrain.data -t -i model.binary --invert_hash model.humanreadable
person Martin Popel    schedule 09.07.2014
comment
Интересный. Экспериментально я нахожу результаты, которые можно интерпретировать как противоречащие вашей точке зрения о --oaa. Только с -b 31 он сообщает о средней потере 0,6. С -b 31 --loss_function=logistic он сообщает о потере 0,48 (и игра с -l и --l1 и --passes на самом деле не сильно меняет ситуацию). С -b 31 --oaa 2 -c -k --passes 3 -l 0.25 vw сообщает только о потере 0,19. Если --oaa 2 не имеет смысла, то почему он работает намного лучше? Я не пытаюсь быть неприятным; Я просто хочу понять. - person Ben Collins; 10.07.2014
comment
Не следует сравнивать яблоки (потеря 0/1) и апельсины (потеря логистическая или квадратная). Для OAA VW всегда сообщает об убытках 0/1. Без OAA (или других многоклассовых сокращений) VW сообщает о запрошенных вами потерях (площадь, логистика, петля...). - person Martin Popel; 10.07.2014
comment
Вы можете заставить VW сообщить о потере 0/1 для двоичной классификации с помощью --binary. - person Martin Popel; 10.07.2014
comment
Я допускаю, что --oaa 2 иногда может давать немного лучшие результаты. См. stackoverflow.com/questions/24674880/ - person Martin Popel; 10.07.2014
comment
Хмм хорошо. если я использую --loss_function=logistic --binary вместе, это дает результаты, очень похожие на то, что дает --oaa 2. - person Ben Collins; 10.07.2014
comment
Я делаю vw -d train.data -c --passes 10 --loss_function=logistic -f model.binary Это работает. Затем я делаю vw -d train.data -t -i model.binary --invert_hash model.humanreadable. Я получаю эту ошибку `неопознанные параметры: --invert_hash model.humanreadable, завершение вызывается после создания экземпляра 'std::exception' what(): std::exception Aborted (дамп ядра). - person Satarupa Guha; 08.05.2015