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

  1. Сбор данных. Первым шагом в создании системы рекомендаций фильмов является сбор данных о фильмах и предпочтениях пользователей. Это можно сделать путем извлечения данных с веб-сайтов фильмов или с помощью общедоступных наборов данных.
  2. Очистка и предварительная обработка данных: после сбора данных следующим шагом является предварительная обработка данных, включая обработку отсутствующих значений, удаление дубликатов и выполнение разработки функций. Этот шаг необходим для обеспечения точности данных и их готовности для моделей машинного обучения.
  3. Выбор алгоритма машинного обучения. Следующим шагом является выбор подходящего алгоритма машинного обучения, который может предсказать предпочтения пользователя в отношении фильмов. Некоторыми из часто используемых алгоритмов являются совместная фильтрация, фильтрация на основе содержимого и гибридная фильтрация.
  4. Обучение модели: после выбора алгоритма пришло время обучить модель с использованием собранных данных. На этом этапе модель машинного обучения учится на шаблонах и отношениях, присутствующих в данных, чтобы делать точные прогнозы.
  5. оценка и настройка: после обучения модели следующим шагом является оценка производительности модели и внесение корректировок для повышения ее точности. Это можно сделать с помощью показателей производительности, таких как RMSE или MAE.
  6. Развертывание. Наконец, модель можно развернуть в производственной среде для создания персонализированных рекомендаций фильмов для пользователей на основе их предыдущего поведения.

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

Здесь приведен пример кода для запуска на вашем локальном компьютере — —

"""Use jupyter notebook to run each of these code blocks
one by one so that it can be done easily.
JUPYTER NOTEBOOK(recommanded)
""""

import pandas as pd
import numpy as np
import ast
import nltk
from nltk.stem.porter import PorterStemmer
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics.pairwise import cosine_similarity

movies=pd.read_csv("tmdb_5000_movies.csv")
data=pd.read_csv("tmdb_5000_credits.csv")

movies=movies.merge(data,on='title')
movies=movies[['movie_id','title','overview','genres','keywords','cast','crew']]

def convert(text):
    L = []
    for i in ast.literal_eval(text):
        L.append(i['name']) 
    return L 
movies['genres'] = movies['genres'].apply(convert)
movies['keywords'] = movies['keywords'].apply(convert)
ast.literal_eval('[{"id": 28, "name": "Action"}, {"id": 12, "name": "Adventure"}, {"id": 14, "name": "Fantasy"}, {"id": 878, "name": "Science Fiction"}]')
def convert3(text):
    L = []
    count=0
    for i in ast.literal_eval(text):
        if count != 3:
            L.append(i['name']) 
            count+=1
        else:
            break
    return L 
movies['cast'] = movies['cast'].apply(convert3)
def fetch_director(text):
    L = []
    for i in ast.literal_eval(text):
        if i['job'] == 'Director':
            L.append(i['name'])
    return L 
movies['crew'] = movies['crew'].apply(fetch_director)
def collapse(L):
    L1 = []
    for i in L:
        L1.append(i.replace(" ",""))
    return L1
movies['cast'] = movies['cast'].apply(collapse)
movies['crew'] = movies['crew'].apply(collapse)
movies['genres'] = movies['genres'].apply(collapse)
movies['keywords'] = movies['keywords'].apply(collapse)

movies['overview'] = movies['overview'].apply(lambda x:x.split())
movies['tags'] = movies['overview'] + movies['genres'] + movies['keywords'] + movies['cast'] + movies['crew']
new = movies.drop(columns=['overview','genres','keywords','cast','crew'])
new['tags'] = new['tags'].apply(lambda x: " ".join(x))
new['tags']=new['tags'].apply(lambda x:x.lower())

ps=PorterStemmer()

def stem(text):
    y=[]
    for i in text.split():
        y.append(ps.stem(i))
        
    return " ".join(y) 

new['tags']=new['tags'].apply(stem) 
cv = CountVectorizer(max_features=5000,stop_words='english')
vectors=cv.fit_transform(new['tags']).toarray()
similarity=cosine_similarity(vectors)

sorted(list(enumerate(similarity[0])),reverse=True,key=lambda x:x[1])[1:6]


# this is the main function which will be used for prediction by using streamlit library in pychram
def recommend(movie):
    movie_index=new[new['title']==movie].index[0]
    distances=similarity[movie_index]
    movies_list=sorted(list(enumerate(distances)),reverse=True,key=lambda x:x[1])[1:6]
    for i in movies_list:
        print(new.iloc[i[0]].title)


# Extra code used for dumping the data into pycharm using pickle 
import pickle
pickle.dump(new,open('movies.pkl','wb'))  # name the file by which you want to save
pickle.dump(new.to_dict(),open('movie_dict.pkl','wb'))
pickle.dump(similarity,open('similarity.pkl','wb'))
 

Здесь приведен код для запуска в Pycharm для запуска на вашем локальном хосте — —

import streamlit as st
import pickle
import pandas as pd
import requests

def fetch_poster(movie_id):
    response = requests.get('https://api.themoviedb.org/3/movie/'
                            '{}?api_key=98669e007387e1b3c9a4fdb6b0f1cf5d&language=en-US'.format(movie_id))
    data = response.json()

    return "https://image.tmdb.org/t/p/w500" + data['poster_path']


def recommend(movie):
    movie_index = movies[movies['title'] == movie].index[0]
    distances = similarity[movie_index]
    movies_list = sorted(list(enumerate(distances)), reverse=True, key=lambda x: x[1])[1:6]
    recommended_movies = []
    recommended_movies_posters = []

    for i in movies_list:
        movie_id = movies.iloc[i[0]].movie_id
        recommended_movies.append(movies.iloc[i[0]].title)
        # fetch poster images through API
        # API Key -- 98669e007387e1b3c9a4fdb6b0f1cf5d
        recommended_movies_posters.append(fetch_poster(movie_id))

    return recommended_movies, recommended_movies_posters


movies_dict = pickle.load(open('movie_dict.pkl','rb'))
movies = pd.DataFrame(movies_dict)

similarity = pickle.load(open('similarity.pkl','rb'))

st.title('Movie Recommender System')

selected_movie_name = st.selectbox(
 'Which Movie you like To Watch the Same',
    movies['title'].values)
if st.button('Recommend'):
    names, posters = recommend(selected_movie_name)


    col1, col2, col3, col4, col5 = st.columns(5)

    with col1:
        st.text(names[0])
        st.image(posters[0])

    with col2:
        st.text(names[1])
        st.image(posters[1])

    with col3:
        st.text(names[2])
        st.image(posters[2])

    with col4:
        st.text(names[3])
        st.image(posters[3])

    with col5:
        st.text(names[4])
        st.image(posters[4])

Не забывайте постоянно учиться, расти и бросать вызов себе в постоянно развивающемся мире науки о данных. Если вы нашли эту статью полезной, обязательно подпишитесь на меня на Medium, чтобы получить больше информации и советов по науке о данных и развитию карьеры. Приятного обучения!