以下是一个基于内容和协同过滤混合推荐电影的Python代码示例。代码使用Word2Vec模型计算电影之间的相似度,并考虑了电影的主题词、标题、地区和类型等信息。

from gensim.models import Word2Vec
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.feature_extraction.text import CountVectorizer
import numpy as np

# 电影数据
movies = [
    [{'title': '铃芽之旅',
      'genre': ['爱情', ' 动画', ' 奇幻'],
      'region': ['日本'],
      'reviews': ["'猫猫'", " '爱情'", " '灾难'", " '椅子'", " '废墟'"]},
     {'title': '回廊亭',
      'genre': ['爱情', ' 犯罪', ' 悬疑'],
      'region': ['中国大陆'],
      'reviews': ["'逻辑'", " '管家'", " '推理'", " '律师'", " '尸体'"]},
     {'title': '小美人鱼',
      'genre': ['爱情', ' 奇幻', ' 冒险', ' 歌舞'],
      'region': ['美国'],
      'reviews': ["'肤色'", " '童话'", " '白人'", " '海王'", " '海底'"]}]
]

# 用户数据
users = [
    {'name': '用户1', 'watched_movies': ['电影A', '电影B'], 'ratings': [4, 3]},
    {'name': '用户2', 'watched_movies': ['电影C'], 'ratings': [5]},
    {'name': '用户3', 'watched_movies': [], 'ratings': []},
]

# 创建电影向量
def create_movie_vectors(movies):
    movie_vectors = []
    for movie_list in movies:
        for movie in movie_list:
            title = movie['title']
            genre = ' '.join(movie['genre'])
            region = ' '.join(movie['region'])
            reviews = ' '.join(movie['reviews'])
            movie_vectors.append(title + ' ' + genre + ' ' + region + ' ' + reviews)
    return movie_vectors

# 创建用户向量
def create_user_vector(user, movie_vectors):
    user_vector = np.zeros((len(movie_vectors),))
    for i, movie in enumerate(user['watched_movies']):
        if movie in movie_vectors:
            index = movie_vectors.index(movie)
            rating = user['ratings'][i]
            user_vector[index] = rating
    return user_vector

# 计算电影相似度矩阵
def calculate_similarity_matrix(movie_vectors):
    vectorizer = CountVectorizer().fit_transform(movie_vectors)
    vectors = vectorizer.toarray()
    similarity_matrix = cosine_similarity(vectors)
    return similarity_matrix

# 根据用户向量和相似度矩阵推荐电影
def recommend_movies(user_vector, similarity_matrix, movies, n=3):
    recommended_movies = []
    for i in range(n):
        max_similarity = np.max(similarity_matrix[user_vector > 0])
        max_index = np.argmax(similarity_matrix[user_vector > 0])
        recommended_movies.append(movies[max_index]['title'])
        similarity_matrix[user_vector > 0, max_index] = 0
        user_vector[max_index] = max_similarity
    return recommended_movies

# 创建电影向量
movie_vectors = create_movie_vectors(movies)

# 创建用户向量并推荐电影
for user in users:
    user_vector = create_user_vector(user, movie_vectors)
    similarity_matrix = calculate_similarity_matrix(movie_vectors)
    recommended_movies = recommend_movies(user_vector, similarity_matrix, movies, n=3)
    print(f"用户 {user['name']} 推荐的电影是: {recommended_movies}")

请注意,这只是一个简单的示例代码,实际应用中可能需要更复杂的模型和算法来提高推荐的准确性和个性化程度

数据集为# 电影数据movies = title 铃芽之旅 genre 爱情 动画 奇幻 region 日本 reviews 猫猫 爱情 灾难 椅子 废墟 title 回廊亭 genre 爱情 犯罪 悬疑 region 中国大陆 reviews 逻辑 管家 推理 律师 尸体 title 小美人鱼 genre 爱情 奇幻 冒险 歌舞 region

原文地址: https://www.cveoy.top/t/topic/iCKm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录