Матричная факторизация с SVD
Матрица пользователей и объектов, разложение SVD, латентные факторы, реализация с библиотекой Surprise
«Матричная факторизация с SVD» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.
Почему факторизация матриц
Матрица пользователей и объектов огромна и в основном пуста. Факторизация матриц сжимает её в две меньшие матрицы скрытых факторов: одну для пользователей и одну для объектов. Их произведение восстанавливает и заполняет оценки. Такой подход гораздо лучше справляется с разреженностью, чем методы на основе соседей.
Интуитивное понимание скрытых факторов
Каждый пользователь и объект описывается коротким вектором скрытых признаков — например, склонностью к боевикам или комедиям для фильмов. Предсказанная оценка — это скалярное произведение вектора пользователя и вектора объекта, которые модель обучает исключительно по данным.
SVD в рекомендательных системах
Модели в стиле SVD обучают эти факторы, минимизируя ошибку предсказания для известных оценок и добавляя регуляризацию. Библиотека surprise предоставляет готовую модель SVD, оптимизированную для рекомендаций и ставшую популярной благодаря конкурсу Netflix Prize.
Библиотека Surprise
Импортируйте нужные компоненты: алгоритм, оболочку набора данных и средство чтения, описывающее формат данных.
from surprise import SVD, Dataset, Reader
from surprise.model_selection import cross_validateСредство чтения и шкала оценок
Средство чтения сообщает Surprise допустимый диапазон оценок с помощью шкалы оценок. Согласуйте его с вашими данными, например задайте диапазон от 1 до 5 звёзд, иначе предсказания будут неправильно откалиброваны.
reader = Reader(rating_scale=(1, 5))Загрузка DataFrame
Загрузите DataFrame, содержащий ровно три столбца в таком порядке: пользователь, объект, оценка.
data = Dataset.load_from_df(
df[["user_id", "item_id", "rating"]],
reader
)Перекрёстная проверка
cross_validate оценивает модель на нескольких блоках данных и сообщает метрики ошибок, чтобы вы могли объективно оценить точность на отложенных данных.
results = cross_validate(
SVD(), data,
measures=["RMSE", "MAE"],
cv=5,
verbose=True
)RMSE и MAE
- RMSE (среднеквадратичная ошибка) сильно штрафует за большие ошибки.
- MAE (средняя абсолютная ошибка) показывает среднее абсолютное отклонение и проще для интерпретации.
Для обеих метрик меньшие значения лучше; RMSE — основной показатель при предсказании оценок.
Обучение на полном наборе
После проверки обучите модель на всём наборе данных, прежде чем использовать её для выдачи предсказаний.
trainset = data.build_full_trainset()
algo = SVD()
algo.fit(trainset)Создание предсказаний
algo.predict(uid, iid) возвращает объект предсказания, поле .est которого содержит оценку для данной пары пользователя и объекта.
pred = algo.predict(uid="user_42", iid="item_99")
print(pred.est) # estimated ratingНастройка гиперпараметров
Основные параметры SVD: n_factors (размерность скрытого пространства), n_epochs, lr_all (скорость обучения) и reg_all (регуляризация). Используйте GridSearchCV, чтобы найти лучшую комбинацию по RMSE.
from surprise.model_selection import GridSearchCV
grid = {"n_factors": [50, 100], "reg_all": [0.02, 0.1]}
gs = GridSearchCV(SVD, grid, measures=["rmse"], cv=3)
gs.fit(data)
print(gs.best_params["rmse"])Проверка знаний
Проверьте свои знания о факторизации матриц.
Итоги
Вы изучили факторизацию матриц с помощью SVD: скрытые векторы пользователей и объектов, скалярное произведение которых предсказывает оценки. С помощью surprise вы задали шкалу оценок, загрузили данные, выполнили cross_validate с использованием RMSE/MAE, применили fit и вызвали algo.predict(uid, iid). Далее: фильтрация на основе содержимого.
Часто задаваемые вопросы
Урок «Матричная факторизация с SVD» бесплатный?
Да — полный текст урока «Матричная факторизация с SVD» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.
Чему я научусь в уроке «Матричная факторизация с SVD»?
Матрица пользователей и объектов, разложение SVD, латентные факторы, реализация с библиотекой Surprise Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Learn AI with Python?
Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Матричная факторизация с SVD»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Learn AI with Python?
Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Коллаборативная фильтрация: на основе пользователей и объектов
- Матричная факторизация с SVD
- Фильтрация на основе содержания
- Гибридные системы и метрики оценки