You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于内容的电影推荐系统:纯Python实现余弦相似度计算求助

解决方案

1. 重写余弦相似度函数(适配稠密向量)

原函数针对字典结构设计,现在需要处理CountVectorizer生成的稠密数组向量,修改后的函数如下:

from math import sqrt

def cosine_similarity(vec1, vec2):
    dot_product = 0
    norm1 = 0
    norm2 = 0
    # 遍历向量的每个维度,计算点积与范数
    for v1, v2 in zip(vec1, vec2):
        dot_product += v1 * v2
        norm1 += v1 ** 2
        norm2 += v2 ** 2
    # 处理零向量情况,避免除以0错误
    if norm1 == 0 or norm2 == 0:
        return 0.0
    return dot_product / (sqrt(norm1) * sqrt(norm2))

2. 适配本地数据的推荐生成函数

不再依赖外部API,直接使用你已有的movievector和newdata数据框生成推荐:

def generate_recommendations(movie_index, movievector, movie_data):
    # 获取目标电影的特征向量
    target_vec = movievector[movie_index]
    similarities = []
    
    # 计算所有电影与目标电影的相似度
    for idx, vec in enumerate(movievector):
        if idx == movie_index:
            continue  # 跳过电影自身
        sim_score = cosine_similarity(target_vec, vec)
        similarities.append({
            'movie_index': idx,
            'movie_details': movie_data.iloc[idx].to_dict(),
            'similarity': sim_score
        })
    
    # 按相似度降序排序,取前5个推荐
    similarities.sort(key=lambda x: x['similarity'], reverse=True)
    return similarities[:5]

3. 使用示例

方式1:通过电影索引获取推荐

假设你想获取第0行电影的推荐:

# 生成推荐
top_recommendations = generate_recommendations(0, movievector, newdata)

# 打印结果
for rec in top_recommendations:
    print(f"相似度: {rec['similarity']:.4f}")
    print(f"电影信息: {rec['movie_details']}\n")

方式2:通过电影ID获取推荐(如果newdata包含movie_id列)

先添加一个辅助函数根据ID查找索引:

def get_movie_index_by_id(target_id, movie_data):
    return movie_data[movie_data['movie_id'] == target_id].index[0]

然后调用:

target_movie_id = 123  # 替换为你的目标电影ID
target_index = get_movie_index_by_id(target_movie_id, newdata)
top_recommendations = generate_recommendations(target_index, movievector, newdata)

关键说明

  • 适配了CountVectorizer生成的稠密数组向量,利用zip遍历对应维度计算点积与范数
  • 增加零向量判断,避免除以0的运行时错误
  • 直接使用本地数据,无需依赖外部API接口

内容的提问来源于stack exchange,提问作者Yyagya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 09:55:13