Vowpal Wabbit: факторизация матрицы низкого ранга?

у меня есть очень простой вопрос. Я хотел бы сделать факторизацию матрицы низкого ранга, и я смотрел на машинного обучения Vowpal Кволик документации по теме. Мой вопрос:

есть ли разница между этими двумя подходами? (реализация или иное)

$ vw --lrq ab5

или

$ vw -q ab --rank 5

здесь a и b характеристика имен и 5-размерность латентного фактора.


возможно последующие действия:

если они эквивалентны, будет --rank также работают для взаимодействий более высокого порядка?

1 ответов


короткий ответ:

--rank и --lrq являются двумя отдельными и очень разными реализациями матричного факторизации / декомпозиции в Vowpal wabbit.

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

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

подробнее:

на наборах данных, которые трудно обобщить (например, movielens 1M, где пользователь имеет не более одного рейтинга на фильм),--lrq кажется, работают лучше. Кажется, что он использует лучшие значения по умолчанию, быстрее сходится, более эффективен и генерирует гораздо меньшие модели на диске. --rank может работать лучше на других наборах данных, где есть больше примеров для каждого пользователя/элемента для обобщения.

вы можете сказать, что две реализации создайте различные результаты, запустив пример. например, выберите набор данных под test каталог и запустите два algos на нем:

vw --lrq aa3       test/train-sets/0080.dat

versus:

vw --rank 3 -q aa  test/train-sets/0080.dat

не стесняйтесь добавлять: --holdout_off -c --passes 1000 чтобы они работали дольше, чтобы вы могли сравнить время выполнения между ними.

вы могли бы отметить, что эти два используют разное количество функций в Примере (--lrq является более минималистичным и будет смотреть только на подмножество, которое вы явно говорите ему), что сходимость, и конечная средняя потеря лучше с --lrq. Если вы храните модель с -f modelname - вы заметите, что он будет намного меньше с --lrq особенно на больших наборов данных.

OTOH, если вы попробуете набор данных, как test/train-sets/ml100k_small_train в дереве источника, с рангом 10 между пространствами имен u (пользователь) и i (пункт), вы получите лучшую потерю с --rank чем с --lrq. Это показывает, что какой из них лучше, зависит от набора данных.

высшее взаимодействия (например,--cubic)

на ваш второй вопрос: --rank не позволит более высокие взаимодействия. Если вы попытаетесь добавить --cubic вы получите сообщение об ошибке:

vw (gd_mf.cc:139): cannot use triples in matrix factorization

но это позволит несколько/дополнительные -q (квадратичной) взаимодействий.

--lrq менее суетливый, поэтому вы можете добавить к нему параметры взаимодействия более высокого порядка.

больше различий:

как правило, --lrq является более агностическим и независимым от других vw вариантов пока --rank использует свой собственный автономный SGD код и не принимает другие параметры (например,--normalized или --adaptive). Кроме того, требования к памяти --rank выше.

опять же, результаты будут зависеть от данных, дополнительных опций и конкретных взаимодействий.

более дальнеишее чтение

--ранг

--lrq