краткий ответ:
--rank
и --lrq
- две отдельные и очень разные реализации матричной факторизации/декомпозиции в vowpal wabbit.
«Матричная факторизация», иногда называемая «матричной декомпозицией», является общим термином в ML, существует множество способов аппроксимации матрицы с использованием более простых факторов (иногда с потерей информации).
Хотя они имеют некоторое сходство в том, что оба пытаются уловить самые сильные скрытые взаимодействия между двумя подмножествами признаков, они не эквивалентны ни по реализации, ни по качеству модели, которую они создают. Их эффективность сильно зависит от решаемой проблемы.
Более подробно:
На наборах данных, которые трудно обобщить (например, кинообъектив 1M, где у пользователя есть не более одной оценки на фильм), --lrq
работает лучше. Кажется, что он использует лучшие значения по умолчанию, быстрее сходится, более эффективен и генерирует гораздо меньшие модели на диске. --rank
может работать лучше с другими наборами данных, где есть больше примеров для каждого пользователя/элемента для обобщения.
Вы можете сказать, что две реализации дают разные результаты, запустив пример. например выберите набор данных в каталоге test
и запустите на нем два алгоритма:
vw --lrq aa3 test/train-sets/0080.dat
против:
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
person
arielf - Reinstate Monica
schedule
24.06.2017