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

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

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

$ vw --lrq ab5

or

$ vw -q ab --rank 5

Здесь a и b — это пространства имен функций, а 5 — размерность скрытого фактора.


Возможное продолжение:

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


person Kris    schedule 19.08.2016    source источник


Ответы (1)


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

--rank и --lrq - две отдельные и очень разные реализации матричной факторизации/декомпозиции в vowpal wabbit.

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

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

Более подробно:

  • --rank была первой реализацией MF в vw Джейком Хофманом. Он был основан на SVD (Singular Value Decomposition).
  • --lrq был реализован несколько лет спустя Полом Минейро. Он был вдохновлен libfm.

На наборах данных, которые трудно обобщить (например, кинообъектив 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
comment
наконец, один из парней vw хочет поделиться ответом на этот вопрос :-) - person avocado; 24.06.2017
comment
хорошо, так что lrq оптимизирует целевую функцию, которая должна быть похожа на fm, тогда как rank оптимизирует другую? - person avocado; 24.06.2017
comment
Да, я считаю, что --rank N выполняет итеративную аппроксимацию SVD, где вычисляются только первые N диагональных членов. . - person arielf - Reinstate Monica; 25.06.2017
comment
Спасибо за подробный ответ @arielf, очень признателен! - person Kris; 25.06.2017
comment
Спасибо @Kris и @avocado. Основная причина, по которой я заметил этот старый вопрос, заключалась в том, что он появился в столбце «Связанные» с 0 ответами, когда я ответил на новый связанный вопрос. Обычно я пытаюсь ответить на вопросы с тегом vowpal-wabbit, когда чувствую, что знаю ответ, что не всегда так. За прошедшие годы vw расширился, чтобы охватить множество алгоритмов, о которых я недостаточно знаю, чтобы помочь. Просмотр исходного кода может помочь, а добавление опции --audit к небольшим данным может стать отличным разъяснением. - person arielf - Reinstate Monica; 25.06.2017