СВД матрицы с пропущенными значениями

12

Предположим, у меня есть матрица рекомендаций в стиле Netflix, и я хочу построить модель, которая предсказывает потенциальные будущие рейтинги фильмов для данного пользователя. Используя подход Саймона Фанка, можно было бы использовать стохастический градиентный спуск, чтобы минимизировать норму Фробениуса между полной матрицей и пошаговой * пользовательской матрицей в сочетании с термином регуляризации L2.

На практике, что люди делают с пропущенными значениями из матрицы рекомендаций, в чем весь смысл расчета? Прочитав сообщение в блоге Саймона, я полагаю, что он использует ТОЛЬКО непропущенные термины (которые составляют (скажем) ~ 1% матрицы рекомендаций) для построения модели (с некоторым разумным выбором гиперпараметров и регуляризации) для прогнозирования. остальные 99% матрицы?

На практике вы действительно пропускаете все эти значения? Или вы сделаете как можно больше, прежде чем делать стохастический градиентный спуск? Каковы некоторые из стандартных лучших методов для работы с пропущенными значениями?

Вишал
источник
1
Похоже, тот же вопрос в этом . Я ответил на вопрос там.
d_ijk_stra
2
Я тоже ответил .
Stumpy Джо Пит
2
@d_ijk_stra «отвечал» немного щедро выражает то, что равносильно ссылке на PDF
ali_m

Ответы:

6

Да, на практике эти значения пропускаются. В вашем описании с точки зрения нормы Фробениуса это соответствует минимизации компонентов нормы, которые можно измерить, то есть тех, которые имеют известные рейтинги. Член регуляризации можно рассматривать как байесовский априор для компонентов векторов признаков, причем SVD вычисляет оценку максимального правдоподобия с учетом этого априора и известных значений.

Вероятно, лучше всего думать о SVD как о методе определения недостающих значений. Если у вас уже есть лучший способ сделать это, зачем вам SVD? Если вы этого не сделаете, тогда SVD с радостью заполнит пробелы для вас.

Мартин О'Лири
источник
1
Как вы используете SVD для вывода этих пропущенных значений? Пробовали ли вы другие методы для вывода пропущенных значений, скажем, с использованием не пропущенных значений для обучения классификатора случайных лесов, который затем можно использовать для угадывания ваших пропущенных значений? Вы получаете лучшие результаты, или это действительно зависит от проблемы?
Вишал
1
Пропущенные значения вы выводите так же, как и при прогнозировании будущих значений, используя соответствующие компоненты декомпозиции SVD. Прогнозирование будущих рейтингов - это точно такая же проблема, как вывод недостающих значений. Если у вас есть хороший способ вывести недостающие значения, просто используйте его, чтобы предсказать будущие рейтинги. Если нет, то для этого и нужен SVD.
Мартин О'Лири
«Вероятно, лучше всего думать о SVD как о методе определения недостающих значений». Ах, нет, на самом деле SVD зависит от пользователя, который предварительно выведет все пропущенные значения другим способом, прежде чем запускать SVD. СВД вообще ничего не вменяет.
Джеффри Андерсон,
1

На практике, что люди делают с пропущенными значениями из матрицы рекомендаций, в чем весь смысл расчета? Я думаю, прочитав сообщение в блоге Саймона, он использует ТОЛЬКО не пропущенные термины для построения модели.

Это верно - в этом смысл его и вашей модели предсказывать пропущенные термины, верно? Это важный момент, который многие на самом деле забывают. Они думают, что могут просто «предположить» заранее назначить константу для пропущенных данных без заботы в мире, и все будет волшебным образом работать достаточно хорошо от SVD. Мусор внутри, мусор снаружи: это реально, и тебе лучше посмотреть это. Вы не должны передавать ненужные данные в модель, если хотите получить что-то полезное.

Конечно, НЕ лучше «выводить какие-либо пропущенные значения» для большинства разреженных наборов данных, а затем запускать SVD для этого с некоторой надеждой приписать вам значения (которые вы уже вменяли перед запуском SVD, верно?). Как вы думаете, модель волшебна? Нет ни магии, ни технологии для преодоления большинства мусорных данных. Вы не можете лгать модели о том, что данные - это реальные данные, когда они вообще не реальны, а просто некий мусор, который вы просто составляете из воздуха.

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

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

Именно такая модель факторизации матрицы машинного обучения довольно хорошо представлена ​​преподавателями онлайн-курса Stanford Mining Massive Data Sets, в модуле 5. Они показывают вам математику и объясняют модель. Они не кодируют это для вас все же.

Это нормально, потому что вы можете сами его кодировать, если понимаете основы машинного обучения. Вы знаете, что такое функция потерь и функция затрат? Регуляризация? Градиентный спуск? Ты хорошо с матричным умножением и сложением? Ошибка смещения и ошибка дисперсии? Если так, то ты в порядке. Если нет, то вам стоит подумать о прохождении онлайн-курса Эндрю Нг « Машинное обучение в Coursera», которое является одним из многих хороших стартовых мест. Кроме того, вы также можете пройти онлайн-курс « Наборы массивных данных», в котором подробно рассказывается о факторизации матрицы и машинном обучении для создания рекомендательных моделей.

Достаточно сказать, что вы можете полностью спроектировать, а также кодировать свою собственную модель факторизации, которая очень хорошо обрабатывает пропущенные данные, как это делал Саймон Функ, и вы можете сделать это с нуля, но теперь это совсем не сложно, как будто он вернулся в свое время, потому что теперь вы можете использовать такой инструмент, как TensorFlow или Microsoft CNTK, который много для вас делает. Определите функцию потерь и функцию затрат, выберите оптимизатор, разделите ваш набор данных на обучение, разработайте, протестируйте данные, которые фактически доступны (помечены как данные), и дайте ему работать. Серьезно, это работает. Отладка TF и ​​ошибок построения графиков не так проста, но, в конце концов, она прекрасно работает и занимает менее одной страницы кода.

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

Джеффри Андерсон
источник
1

Существует тезис, который рассматривает многие системы рекомендаций и сравнивает их, но не говорит о долгосрочном отслеживании отсутствующих элементов, например, для проверки прогнозов. Это часть твоего вопроса? Используя компонент времени таким образом? Среди множества работ и методов обзоры диссертаций относятся к системам, чувствительным ко времени / чувствительности, таким как исследования в работах Рендла. Если ваш вопрос также касается обработки разреженных данных, это также подробно обсуждается на протяжении всей диссертации, и существует множество методов. разреженные матрицы и вменение с нулями или матричная факторизация, которая добавляет связующую матрицу кластеризации пользователей (пользователей, которые оценивают товары одинаково) или связующую матрицу кластеризации товаров.

Название диссертации: «Модели низкого ранга для рекомендательных систем с ограниченной информацией о предпочтениях», автор Евгений Фролов, https://www.skoltech.ru/app/data/uploads/2018/09/Frolov_Dis Диссертация_Final1.pdf.

Никол
источник