基于BigQuery ML的ALS矩阵分解推荐系统实践

基于BigQuery ML的ALS矩阵分解推荐系统实践

asl-ml-immersion This repos contains notebooks for the Advanced Solutions Lab: ML Immersion asl-ml-immersion 项目地址: https://gitcode.com/gh_mirrors/as/asl-ml-immersion

前言

推荐系统是现代互联网应用中不可或缺的核心技术之一,它通过分析用户历史行为数据,预测用户可能感兴趣的物品,为用户提供个性化推荐。本文将介绍如何利用BigQuery ML实现基于矩阵分解的协同过滤推荐系统,使用经典的MovieLens数据集进行实践。

数据集介绍

MovieLens数据集是由明尼苏达大学GroupLens研究实验室发布的电影评分数据集,广泛应用于推荐系统研究和算法验证。数据集包含:

  • 用户ID(userId):唯一标识用户
  • 电影ID(movieId):唯一标识电影
  • 评分(rating):用户对电影的评分(1-5分)
  • 电影标题(title):电影名称
  • 类型(genres):电影所属类型,多个类型用"|"分隔

环境准备

在开始之前,我们需要完成以下准备工作:

  1. 创建BigQuery数据集用于存储MovieLens数据
  2. 下载并加载MovieLens数据集到BigQuery中
  3. 预处理数据,特别是将电影类型从字符串转换为数组格式

数据探索

首先让我们对数据进行初步探索,了解数据的基本情况:

-- 查看评分数据样例
SELECT * FROM movielens.ratings LIMIT 10;

-- 统计用户、电影和评分总数
SELECT 
    COUNT(DISTINCT userId) numUsers,
    COUNT(DISTINCT movieId) numMovies,
    COUNT(*) totalRatings
FROM movielens.ratings;

通过查询我们可以了解到数据集包含约138,000名用户,27,000部电影和超过2,000万条评分记录。

矩阵分解模型

矩阵分解(Matrix Factorization)是协同过滤推荐系统中的经典算法,它将用户-物品评分矩阵分解为两个低维矩阵:

  • 用户因子矩阵:表示用户潜在特征
  • 物品因子矩阵:表示物品潜在特征

在BigQuery ML中,我们可以使用以下SQL创建矩阵分解模型:

CREATE OR REPLACE MODEL movielens.recommender
OPTIONS(model_type='matrix_factorization',
        user_col='userId', item_col='movieId', rating_col='rating')
AS
SELECT userId, movieId, rating
FROM movielens.ratings;

注意:矩阵分解模型的训练需要BigQuery的Flat Rate计费方式。

模型训练监控

我们可以查看模型训练过程中的损失变化情况:

SELECT iteration, loss, duration_ms
FROM ML.TRAINING_INFO(MODEL `cloud-training-demos.movielens.recommender`);

训练过程中,模型会不断迭代优化,损失值(loss)会逐渐降低,表示模型预测能力在提升。

个性化推荐

为单个用户推荐电影

假设我们要为用户ID为903的用户推荐喜剧电影:

SELECT * FROM
ML.PREDICT(MODEL `cloud-training-demos.movielens.recommender`, (
  SELECT 
    movieId, title, 903 AS userId
  FROM movielens.movies, UNNEST(genres) g
  WHERE g = 'Comedy'
))
ORDER BY predicted_rating DESC
LIMIT 5;

过滤已观看电影

更合理的做法是过滤掉用户已经观看过的电影:

SELECT * FROM
ML.PREDICT(MODEL `cloud-training-demos.movielens.recommender`, (
  WITH seen AS (
    SELECT ARRAY_AGG(movieId) AS movies 
    FROM movielens.ratings
    WHERE userId = 903
  )
  SELECT 
    movieId, title, 903 AS userId
  FROM movielens.movies, UNNEST(genres) g, seen
  WHERE g = 'Comedy' AND movieId NOT IN UNNEST(seen.movies)
))
ORDER BY predicted_rating DESC
LIMIT 5;

物品定向推荐

有时我们需要为特定电影寻找潜在的目标用户,例如为电影《American Mullet (2001)》(movieId=96481)寻找最可能喜欢的5个用户:

SELECT * FROM
ML.PREDICT(MODEL `cloud-training-demos.movielens.recommender`, (
  WITH allUsers AS (
     SELECT DISTINCT userId
     FROM movielens.ratings
  )
  SELECT 
    96481 AS movieId, 
    (SELECT title FROM movielens.movies WHERE movieId=96481) title,
    userId
  FROM allUsers
))
ORDER BY predicted_rating DESC
LIMIT 5;

批量预测

BigQuery ML提供了ML.RECOMMEND函数,可以方便地为所有用户-物品组合生成预测:

SELECT *
FROM ML.RECOMMEND(MODEL `cloud-training-demos.movielens.recommender`)
LIMIT 10;

总结

本文介绍了如何使用BigQuery ML实现基于矩阵分解的推荐系统,主要内容包括:

  1. MovieLens数据集的加载和预处理
  2. 矩阵分解模型的创建和训练
  3. 个性化推荐实现
  4. 物品定向推荐实现
  5. 批量预测方法

BigQuery ML提供了简单易用的SQL接口实现机器学习模型,使得推荐系统的开发变得更加高效。通过调整模型参数和优化数据预处理,可以进一步提升推荐效果。

asl-ml-immersion This repos contains notebooks for the Advanced Solutions Lab: ML Immersion asl-ml-immersion 项目地址: https://gitcode.com/gh_mirrors/as/asl-ml-immersion

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时泓岑Ethanael

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值