温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

AI如何通过Python实现智能推荐系统

发布时间:2025-12-24 22:14:44 来源:亿速云 阅读:152 作者:小樊 栏目:编程语言

用 Python 构建智能推荐系统的实用路线

一、整体流程与数据准备

  • 明确业务目标与场景:如电商商品视频/音乐资讯流等,确定推荐是评分预测还是Top-N 列表
  • 数据收集与整合:汇聚用户行为日志(点击、浏览、购买、停留时长)、用户属性(年龄、性别、地域)、物品属性(类别、标签、价格、描述)。
  • 数据预处理与特征工程:去重、缺失处理、时间特征(如小时、星期)、文本特征(如TF-IDF)、类别编码等。
  • 数据建模与存储:构建用户-物品交互矩阵(行用户、列物品、值可为评分/点击),并做训练/验证/测试划分;稀疏场景可用稀疏矩阵存储与计算。
  • 评估与上线:离线指标(如RMSE/MAE、Precision@K、Recall@K、NDCG)+ 在线A/B 测试验证业务收益。

二、核心方法与 Python 实现要点

  • 基于内容的推荐(Content-Based)
    • 思路:用物品特征(文本、类别、标签等)表示项目,计算余弦相似度,为目标用户已交互物品的相似物品做推荐。
    • 关键工具:TfidfVectorizercosine_similarity(sklearn)。
  • 协同过滤(Collaborative Filtering)
    • 基于用户的协同过滤(UserCF):以用户相似度为权重,聚合相似用户对未评分物品的评分,生成推荐。
    • 基于物品的协同过滤(ItemCF):以物品相似度为权重,基于用户历史评分加权相似物品进行推荐。
    • 关键工具:cosine_similarity 计算相似度;稀疏数据建议用csr_matrix提升效率。
  • 矩阵分解与隐语义模型(Latent Factor)
    • 思路:将交互矩阵分解为用户隐向量物品隐向量,用内积预测缺失评分;常用算法有SVD/TruncatedSVD、NMF、SGD/ALS优化。
    • 关键工具:TruncatedSVD/NMF(sklearn),或采用Surprise、LightFM等库加速开发。
  • 混合推荐(Hybrid)
    • 思路:融合内容与协同结果,常见策略有加权法、级联法、特征组合法,以兼顾准确性覆盖率

三、端到端最小可行示例(基于 MovieLens,演示 ItemCF + 评估)

# pip install pandas scikit-learn
import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import numpy as np

# 1) 读取数据(示例:MovieLens 100K,列名: userId, movieId, rating, timestamp)
# ratings = pd.read_csv('ml-100k/u.data', sep='\t', names=['userId','movieId','rating','timestamp'])
# movies  = pd.read_csv('ml-100k/u.item', sep='|', encoding='latin-1',
#                     usecols=range(5), names=['movieId','title','release_date','video_release_date','imdb_url'])

# 为演示生成小样本(请替换为真实数据加载)
data = {'userId': [1,1,1,2,2,3,3,4,4,5],
        'movieId': [1,2,3,2,3,1,4,2,4,3],
        'rating': [5,3,4,4,5,3,2,4,5,4]}
ratings = pd.DataFrame(data)

# 2) 划分训练/测试
train, test = train_test_split(ratings, test_size=0.2, random_state=42)

# 3) 构建用户-物品评分矩阵(训练集)
user_item = train.pivot_table(index='userId', columns='movieId', values='rating')

# 4) 物品相似度(ItemCF)
item_sim = cosine_similarity(user_item.fillna(0).T)  # 转置为物品-物品
item_sim_df = pd.DataFrame(item_sim, index=user_item.columns, columns=user_item.columns)

# 5) 预测评分(对测试集中已评分的(user,item)做预测,便于RMSE评估)
def predict_ratings(train_ui, item_sim_df, test_df):
    preds = []
    for _, row in test_df.iterrows():
        u, i, r = row['userId'], row['movieId'], row['rating']
        if i not in train_ui.columns or u not in train_ui.index:
            preds.append(np.nan)
            continue
        rated_items = train_ui.loc[u].dropna()
        if rated_items.empty:
            preds.append(np.nan)
            continue
        # 加权平均:sim(i, j) * r(u, j) / sum(|sim(i, j)|)
        sims = item_sim_df[i].loc[rated_items.index]
        numer = (sims * rated_items).sum()
        denom = sims.abs().sum()
        pred = numer / denom if denom != 0 else np.nan
        preds.append(pred)
    return np.array(preds)

preds = predict_ratings(user_item, item_sim_df, test)
valid = ~np.isnan(preds)
rmse = np.sqrt(mean_squared_error(test['rating'].iloc[valid], preds[valid]))
print(f'ItemCF RMSE: {rmse:.4f}')

# 6) Top-N 推荐函数(示例:给用户1推荐5部)
def recommend_topn(user_id, train_ui, item_sim_df, k=5):
    if user_id not in train_ui.index:
        return []
    rated = train_ui.loc[user_id].dropna().index
    scores = pd.Series(0.0, index=train_ui.columns)
    for item in rated:
        sims = item_sim_df[item].drop(rated, errors='ignore')  # 排除已评分
        scores[sims.index] += sims
    # 过滤训练集中已评分,取Top-N
    scores = scores.drop(rated, errors='ignore').sort_values(ascending=False)
    return scores.head(k).index.tolist()

print('Top-5 for user 1:', recommend_topn(1, user_item, item_sim_df, k=5))
  • 要点
    • 稀疏矩阵可用csr_matrix与稀疏相似度计算优化性能。
    • 冷启动用户/物品可先用基于内容热门/规则兜底,积累交互后切换到协同或混合。

四、评估与优化实践

  • 离线评估
    • 评分预测任务:用RMSE/MAE衡量预测偏差。
    • Top-N 排序任务:用Precision@K、Recall@K、NDCG@K衡量命中与排序质量;可结合覆盖率、多样性、新颖性做多维评估。
  • 在线评估
    • 采用A/B 测试对比点击率(CTR)、转化率(CVR)、停留时长、GMV 等业务指标,避免“离线好、线上差”的偏差。
  • 优化路径
    • 算法层面:从ItemCF/UserCF演进到矩阵分解(SVD/NMF/SGD/ALS),再到混合推荐深度学习嵌入模型,逐步提升效果与泛化。
    • 工程层面:处理数据稀疏冷启动,做特征交叉时间权重衰减,并优化相似度计算与近邻检索的性能与可扩展性。
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI