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

基于K-means聚类如何根据选定电影实现同簇电影推荐?

KMeans聚类电影动态推荐实现方案

核心逻辑拆为两步:首先获取输入对象(已有电影/自定义虚拟电影)对应的聚类簇编号,再从对应簇内筛选排序得到目标长度的推荐列表,不需要修改原有聚类结果。


场景1:选定数据集内已有电影做推荐

所有电影已经完成聚类打标,不需要重新调用模型预测,直接查询目标电影的簇号即可,可直接复用如下函数:

import pandas as pd

def get_recommend_by_exist_movie(movie_primary_key: str, top_n: int = 20):
    """
    针对数据集内已有的电影生成同簇推荐
    :param movie_primary_key: 目标电影在prediction_result表中的唯一标识,比如IMDB的tconst字段
    :param top_n: 返回推荐结果数量
    """
    # 定位目标电影所属簇
    target_row = prediction_result[prediction_result['tconst'] == movie_primary_key].iloc[0]
    target_cluster_id = target_row['cluster']
    
    # 筛选同簇内容、排除目标电影本身,按评分、投票数倒序
    recommend_list = prediction_result[
        (prediction_result['cluster'] == target_cluster_id) &
        (prediction_result['tconst'] != movie_primary_key)
    ].sort_values(by=['averageRating', 'numVotes'], ascending=False)
    
    return recommend_list.head(top_n)

调用示例:要获取电影tt0111161(肖申克的救赎)的同簇20部推荐,直接执行get_recommend_by_exist_movie('tt0111161')即可。


场景2:输入自定义构造的虚拟电影特征做推荐

之前虚拟特征输入模型得到错误结果,基本都是特征预处理流程和训练阶段不一致导致的,只要严格复用训练阶段的预处理逻辑、保证特征维度/顺序完全对齐即可正常预测。

注意:训练阶段用到的特征编码器、标准化/归一化器必须是训练时fit完成的持久化对象,不能针对虚拟输入重新fit,否则特征分布会完全错位。

示例代码如下,假设你训练时已经保存了:

  • 训练好的KMeans模型对象kmeans_model
  • 数值特征标准化用的scaler对象feature_scaler
  • 训练集特征的列顺序列表train_feature_order(保证输入特征和训练时顺序完全一致,避免列错位)
def get_recommend_by_custom_movie(custom_feature: dict, top_n: int =20):
    """
    针对自定义构造的虚拟电影特征生成同簇推荐
    :param custom_feature: 构造的电影特征字典,key要和训练时的特征名完全一致
    :param top_n: 返回推荐结果数量
    """
    # 构造输入特征,对齐训练集列顺序
    input_df = pd.DataFrame([custom_feature])[train_feature_order]
    # 复用训练时的预处理逻辑做特征转换
    input_scaled = feature_scaler.transform(input_df)
    # 预测所属簇
    target_cluster_id = kmeans_model.predict(input_scaled)[0]
    
    # 筛选同簇内容排序返回
    recommend_list = prediction_result[
        prediction_result['cluster'] == target_cluster_id
    ].sort_values(by=['averageRating', 'numVotes'], ascending=False)
    
    return recommend_list.head(top_n)

优化提示

如果需要更高的推荐匹配度,不要仅按平均评分、投票数做热度排序,可以在同簇内计算输入电影和簇内所有电影的特征余弦相似度,按「相似度0.7 + 归一化后评分0.3」的加权分排序,结果会比纯热度排序更贴合输入电影的特征。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:57:24