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

Прочитайте полную статью с исходным кодом здесь —https://machinelearningprojects.net/movie-recommendation-system-1st-way/

Давай сделаем это…

Шаг 1 — Импорт пакетов, необходимых для системы рекомендаций фильмов.

import pandas as pd

Шаг 2 — Чтение входных данных.

df1 = pd.read_csv('u.data',sep='\t')
df1.columns = ['user_id','item_id','rating','timestamp']
df1.head()

Шаг 3 — Чтение названий фильмов.

df2 = pd.read_csv(‘Movie_Id_Titles’)
df2.head()

Шаг 4 — Объединение данных фильмов и названий фильмов.

df = pd.merge(df1,df2,on=’item_id’)
df.head()

Мы объединяем оба фрейма данных в «item_id», который присутствует в обоих фреймах данных.

Шаг 5 — Сгруппируйте одинаковые записи фильмов.

rating_and_no_of_rating = pd.DataFrame(df.groupby(‘title’)[‘rating’].mean().sort_values(ascending=False))
rating_and_no_of_rating
  • Здесь мы группируем фильмы и берем среднее значение всех оценок, присвоенных им, а затем сортируем их по среднему рейтингу.
  • Вы можете видеть, что в результате ниже отображается дерьмовый фильм Они создали преступника, который мог получить оценку только от одного человека, и это тоже 5 звезд. Вот почему его среднее также равно 5.

Шаг 6 — Добавление столбца №. рейтингов.

rating_and_no_of_rating[‘no_of_ratings’] = df.groupby(‘title’)[‘rating’].count()
rating_and_no_of_rating
  • Добавление столбца нет. рейтингов.
  • Мы вычисляем нет. рейтингов с помощью метода подсчета фрейма данных.

Шаг 7 — Сортировка по номеру. рейтингов.

rating_and_no_of_rating = rating_and_no_of_rating.sort_values(‘no_of_ratings’,ascending=False)
rating_and_no_of_rating.head()
  • Просто отсортируйте по номеру. рейтингов.
  • И теперь мы видим некоторые реальные результаты.
  • Очень известный фильм «Звездные войны» получил в среднем 4,35 балла от 583 пользователей.

Шаг 8 — Создание сводной таблицы.

pt = df.pivot_table(index=’user_id’,columns=’title’,values=’rating’)
pt.head()
  • Создание сводной таблицы.
  • В этой сводной таблице пользователи перемещаются по строкам, а фильмы — по столбцам.
  • Нэн представляет, что этот пользователь не дал никакой оценки этому фильму.

Шаг 9 — Проверка названий фильмов.

rating_and_no_of_rating.index
  • Просто распечатайте все названия фильмов, которые у нас есть.

Шаг 10 — Живой прогноз.

test_movie = input('Enter movie name --> ')

movie_vector = pt[test_movie].dropna()
similar_movies = pt.corrwith(movie_vector)

corr_df = pd.DataFrame(similar_movies,columns=['Correlation'])
corr_df = corr_df.join(rating_and_no_of_rating['no_of_ratings'])

corr_df = corr_df[corr_df['no_of_ratings']>100].sort_values('Correlation',ascending=False).dropna()
corr_df.head(10)
  • Во время тестирования я добавил «Звездные войны (1977)» в качестве тестового фильма.
  • Выберите его вектор из сводной таблицы выше.
  • Используйте этот вектор и сопоставьте его с другими фильмами, используя corrwith(), и он даст свою корреляцию с другими фильмами на основе пользовательских оценок и сохранит ее в Similar_movies.
  • После этого создайте фрейм данных, как показано ниже, и снова объедините в нем no_of_ratings, чтобы взять не менее 100 оценок в качестве порога.
  • Отсортируйте результаты на основе корреляций, и BOOM вот результаты.
  • Мы видим результаты, все эти фильмы так или иначе связаны со «Звездными войнами».
  • «Империя наносит ответный удар», «Возвращение джедая» — оба связаны со «Звездными войнами».

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

Чтобы узнать больше о машинном обучении, глубоком обучении, компьютерном зрении, НЛП и проектах Flask, посетите мой блог.



Для дальнейшего объяснения кода и исходного кода посетите здесь



Итак, это все для этого блога, ребята, спасибо за то, что прочитали его, и я надеюсь, что вы возьмете что-то с собой после прочтения этого и до следующего раза 👋…