Смотреть аниме? Пытаетесь расширить свой портфель машинного обучения? Создайте рекомендателя аниме на основе машинного обучения для своих следующих просмотров!
Вы закончили новое аниме, которое вам понравилось. Лучший. Чувство. Всегда! Ну,вот проблема: вы только что закончили новое любимое аниме! Вам нечего сейчас смотреть!
Ну не надо плакать. Сегодня мы научимся создавать систему рекомендаций по аниме, что, по сути, является просто причудливым способом сказать, что мы создадим программу, предлагающую похожие аниме. Чтобы быть точным, мы будем использовать совместную фильтрацию на основе элементов для поиска предложений.
Что такое совместная фильтрация?
Совместная фильтрация относится к системам рекомендаций, которые используют действия пользователей для рекомендации других элементов. В этом случае на входе нашей программы будет название аниме, а на выходе — десять предложений похожих аниме. Вот пример:
Набор данных и подготовка данных
Данные, используемые в этой статье, будут извлечены из набора данных MyAnimeList, созданного Azathoth. После загрузки набора данных мы захотим исследовать наши данные. В этом случае, для простоты, мы хотим, чтобы рекомендатель предлагал только аниме сериалы. Таким образом, мы удалим OVA, фильмы и другие специальные предложения из нашего набора данных. Давайте проверим, сколько серий в большинстве сериалов.
Почему в аниме 0 серий? Что ж, мы должны удалить аниме, которые еще не вышли в эфир. После этого у нас все еще будут серии с 0 эпизодами, потому что кажется, что в этом наборе данных, если аниме в настоящее время транслируется, столбцу эпизодов присваивается значение 0. Это тип деталей, с которыми специалист по данным должен быть осторожен. при изучении данных.
Рекомендатель без машинного обучения
Прежде чем мы попытаемся использовать модель K-ближайших соседей, мы создадим решение без машинного обучения.
На этом этапе мы использовали фрейм данных обзоров, в котором были следующие столбцы: имя пользователя, название аниме и рейтинг, который пользователь дал этому аниме. Только с этими тремя столбцами мы можем создать простой рекомендатель. После создания сводной_таблицы мы создали простую функцию, которая принимает в качестве входных данных название аниме. После этого мы используем функцию панд .corrwith() для доступа к аниме, которые имеют наибольшую корреляцию с входными данными.
И только с этим у нас есть наш аниме Suggester! Иметь программу рекомендаций по аниме так просто.
Давайте посмотрим на несколько примеров работы программы:
Как видно из изображения выше, мы протестировали программу с тремя разными аниме, и результаты просто потрясающие! Если мы посмотрим на аниме, похожие на «Жемчуг дракона», он на самом деле рекомендует все другие серии «Жемчуг дракона» и другие сёнэн-аниме, которые были очень популярны в то время. То же самое происходит с Блич! Что касается One Outs, «спортивного аниме о бейсболе», рекомендации также имеют большой смысл! У нас есть не только психологические аниме о ставках, но и другие аниме о спорте и бейсболе! И все это БЕЗ машинного обучения!
Давайте посмотрим, как это решение справится с решением для машинного обучения.
Рекомендатель с машинным обучением — K-ближайшие соседи
Пора пачкать руки! Мы будем использовать алгоритм KNN, чтобы найти похожие аниме.
Алгоритм KNN создаст вектор оценок для каждого аниме. Другими словами, каждое аниме станет вектором, состоящим из оценок пользователей и NaN, если пользователь не видел аниме.
Модель KNN измеряет сходство между векторами (в данном случае один вектор соответствует одному аниме) и дает нам ближайшие векторы/соседи.
Для расчета расстояния между векторами у нас не может быть пропущенных значений. Таким образом, мы заполним все пропущенные значения 0. Наш фрейм данных теперь будет выглядеть так:
Как вы можете видеть, наш фрейм данных в основном равен нулю, потому что большинство пользователей в среднем видели только около 166 аниме, но есть 14478 уникальных аниме. Таким образом, чтобы мы не получили никаких ошибок с памятью и были (намного) более эффективными, мы сожмем наш набор данных в csr_matrix. Это будут входные данные нашей модели, которую мы затем запустим и подгоним данные.
Теперь мы можем создать простую функцию для получения предложений аниме! Функция получает название аниме, а затем возвращает 10 предложений:
Модель, кажется, работает очень хорошо! Есть некоторые различия, когда мы сравниваем его с решением без машинного обучения. Примерно за час мы построили две системы рекомендаций аниме! Как вы думаете, кто показал себя лучше?
В другой статье я могу объяснить, как измерять и сравнивать производительность двух решений. Я также сделаю вторую часть, в которой объясню, как мы можем использовать эти два рекомендателя для создания сайта с помощью Streamlit. На данный момент вы можете получить доступ к коду через этот репозиторий Github.
Использованная литература:
[1] aniketng21, Система рекомендаций фильмов с использованием алгоритма KNN
[2] Ник Беккер, Музыкальные рекомендации