【DSW Gallery】交替最小二乘算法解决推荐相关问题

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,100CU*H 3个月
简介: ALS (Alternating Lease Square)交替最小二乘法是一种model based的协同过滤算法, 用于对评分矩阵进行因子分解,然后预测user对item的评分。 它通过观察到的所有用户给产品的打分,来推断每个用户的喜好并向用户推荐适合的产品。

直接使用

请打开交替最小二乘算法解决推荐相关问题,并点击右上角 “ 在DSW中打开” 。

image.png


ALS 电影推荐

ALS (Alternating Lease Square)交替最小二乘法是一种model based的协同过滤算法, 用于对评分矩阵进行因子分解,然后预测user对item的评分。 它通过观察到的所有用户给产品的打分,来推断每个用户的喜好并向用户推荐适合的产品。
本文将介绍如何使用Alink的ALS算法在pai-dsw中进行电影推荐。

运行环境要求

1. PAI-DSW 官方镜像中默认已经安装了 PyAlink,内存要求 4G 及以上。
2. 本 Notebook 的内容可以直接运行查看,不需要准备任何其他文件。
from pyalink.alink import *
useLocalEnv(2) # 设置并行度为 2
Use one of the following commands to start using PyAlink:
 - useLocalEnv(parallelism, flinkHome=None, config=None): run PyAlink scripts locally.
 - useRemoteEnv(host, port, parallelism, flinkHome=None, localIp="localhost", config=None): run PyAlink scripts on a Flink cluster.
 - getMLEnv(): run PyAlink scripts as PyFlink scripts, support 'flink run -py xxx.py'.
Call resetEnv() to reset environment and switch to another.
JVM listening on 127.0.0.1:58422
MLEnv(benv=<pyflink.dataset.execution_environment.ExecutionEnvironment object at 0x7fbb6a99dc10>, btenv=<pyflink.table.table_environment.BatchTableEnvironment object at 0x7fbb6a99df90>, senv=<pyflink.datastream.stream_execution_environment.StreamExecutionEnvironment object at 0x7fbb6a99dd10>, stenv=<pyflink.table.table_environment.StreamTableEnvironment object at 0x7fbb6a9ca210>)

扩展到更大规模的数据

在这个示例中,我们使用 useLocalEnv 在本地(也就是 DSW 的 container 内)运行 Alink 作业,使用多线程的方式模拟分布式计算。

对于更大规模的数据,可以使用 usePAIEnv 向大规模集群提交作业,详细使用可以通过 help(usePAIEnv) 查看。

准备数据

Movielens 数据来源:http://files.grouplens.org/datasets/movielens/ml-100k/

Als算法需要输入数据是三列(userId,itemId,ratings),也即用户ID,商品ID以及用户对商品的打分信息。

PATH = "http://alink-test.oss-cn-beijing.aliyuncs.com/yuhe/movielens/"
RATING_FILE = "ratings.csv"
PREDICT_FILE = "predict.csv"
RATING_SCHEMA_STRING = "user_id long, item_id long, rating long, ts long"
ratingsData = CsvSourceBatchOp() \
    .setFilePath(PATH + RATING_FILE) \
    .setFieldDelimiter("\t") \
    .setSchemaStr(RATING_SCHEMA_STRING)
predictData = CsvSourceBatchOp() \
    .setFilePath(PATH + PREDICT_FILE) \
    .setFieldDelimiter("\t") \
    .setSchemaStr(RATING_SCHEMA_STRING)
ratingsData.lazyPrint(5)
BatchOperator.execute()
user_id item_id rating ts
0 42 523 5 881107375
1 286 741 4 876521887
2 436 1058 4 887770547
3 514 48 4 875318114
4 621 584 5 874965094

训练 ALS 模型

算法相关文档:https://www.yuque.com/pinshu/alink_doc/alstrainbatchop

Als 算法通过对输入的三元组信息进行矩阵分解,得到每一个userId 和 itemId 对应的向量表示。

alsModel = AlsTrainBatchOp() \
    .setUserCol("user_id").setItemCol("item_id") \
    .setLambda(0.1).setRank(20).setNumIter(4) \
    .setRateCol("label").linkFrom(ratingsData.select("(case when rating>3 then 1 else 0 end) as label,*"));

使用 ALS 模型打分

算法相关文档:https://www.yuque.com/pinshu/alink_doc/alsraterecommender

使用 Als 模型为给定的(userId,itemId)对进行打分,通常用来判断一个用户对某一个电影的喜好程度。

als = AlsRateRecommender() \
            .setModelData(alsModel) \
            .setItemCol("item_id") \
            .setUserCol("user_id") \
            .setReservedCols(["user_id", "item_id"]) \
            .setRecommCol("prediction_score")
als.transform(predictData).lazyPrint(10)
BatchOperator.execute()
user_id item_id prediction_score
0 196 242 0.567872
1 186 302 0.548883
2 22 377 0.05246
3 244 51 0.544646
4 166 346 0.393879
5 298 474 0.714769
6 115 265 0.551989
7 253 465 0.556266
8 305 451 0.292035
9 6 86 0.635126

使用 ALS 模型为用户推荐电影

算法相关文档: https://www.yuque.com/pinshu/alink_doc/fmitemsperuserrecommender

为给定的某一个userId推荐相关的itemId list. 通常用来为某一个用户推荐他可能喜欢的若干部电影。

als = AlsItemsPerUserRecommender() \
            .setModelData(alsModel) \
            .setK(5) \
            .setReservedCols(["item_id"]) \
            .setUserCol("user_id") \
            .setRecommCol("recall_list")
als.transform(predictData).lazyPrint(5)
BatchOperator.execute()

image.png

使用 ALS 模型为一部电影找寻相似的电影

算法相关文档: https://www.yuque.com/pinshu/alink_doc/alssimilaritemsrecommender

为给定的某一个itemId推荐相关的itemId list. 通常用来为看过某一部电影的用户推荐他可能喜欢的若干部电影。

als = AlsSimilarItemsRecommender() \
            .setModelData(alsModel) \
            .setK(5) \
            .setReservedCols(["item_id"]) \
            .setItemCol("item_id") \
            .setRecommCol("recall_list")
als.transform(predictData).lazyPrint(5)
BatchOperator.execute()

image.png

使用 ALS 模型为用户推荐相似的用户

算法相关文档: https://www.yuque.com/pinshu/alink_doc/alssimilar

为给定的某一个 userId 推荐相关的 userId list. 通常用来为用户推荐和他兴趣相近的用户群,便于大家沟通交流。

als = AlsSimilarUsersRecommender() \
            .setModelData(alsModel) \
            .setK(5) \
            .setReservedCols(["user_id"]) \
            .setUserCol("user_id") \
            .setRecommCol("recall_list")
als.transform(predictData).lazyPrint(5)
BatchOperator.execute()

image.png

使用 ALS 模型为电影推荐潜在的用户

算法相关文档: https://www.yuque.com/pinshu/alink_doc/alsusersperitemrecommender

为给定的某一个 itemId 推荐相关的 itemId list. 通常用来为某一部电影推荐可能的观影者,用于新电影宣传推荐。

als = AlsUsersPerItemRecommender() \
            .setModelData(alsModel) \
            .setK(5) \
            .setReservedCols(["item_id"]) \
            .setItemCol("item_id") \
            .setRecommCol("recall_list")
als.transform(predictData).lazyPrint(5)
BatchOperator.execute()
相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
7月前
|
算法 Java
算法编程(三十):交替合并字符串
算法编程(三十):交替合并字符串
102 0
|
7月前
|
算法
基于最小二乘正弦拟合算法的信号校正matlab仿真,校正幅度,频率以及时钟误差,输出SNDR,SFDR,ENOB指标
基于最小二乘正弦拟合算法的信号校正matlab仿真,校正幅度,频率以及时钟误差,输出SNDR,SFDR,ENOB指标
|
2月前
|
算法
基于最小二乘递推算法的系统参数辨识matlab仿真
该程序基于最小二乘递推(RLS)算法实现系统参数辨识,对参数a1、b1、a2、b2进行估计并计算误差及收敛曲线,对比不同信噪比下的估计误差。在MATLAB 2022a环境下运行,结果显示了四组误差曲线。RLS算法适用于实时、连续数据流中的动态参数辨识,通过递推方式快速调整参数估计,保持较低计算复杂度。
|
7月前
|
算法
R语言中的偏最小二乘PLS回归算法
R语言中的偏最小二乘PLS回归算法
|
7月前
|
设计模式 算法 Java
【数据结构和算法】交替合并字符串
给你两个字符串word1和word2。请你从word1开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。返回合并后的字符串。
114 1
|
机器学习/深度学习 传感器 算法
【lssvm回归预测】基于变模态结合秃鹰算法优化最小二乘支持向量机VMD-BES-LSSVM实现数据预测模型(多输入单输出)含Matlab代码
【lssvm回归预测】基于变模态结合秃鹰算法优化最小二乘支持向量机VMD-BES-LSSVM实现数据预测模型(多输入单输出)含Matlab代码
|
机器学习/深度学习 算法
回归预测 | MATLAB实现BES-LSSVM秃鹰搜索算法优化最小二乘支持向量机多输入单输出回归预测(多指标,多图)
回归预测 | MATLAB实现BES-LSSVM秃鹰搜索算法优化最小二乘支持向量机多输入单输出回归预测(多指标,多图)
|
消息中间件 运维 算法
【DSW Gallery】IsolationForest算法解决异常检测问题
IsolationForest 是一种无监督的异常检测算法, 用于对无 label 的数据进行异常检测,并且支持将 IsolationForest 模型部署成一个流服务,用来对实时数据进行异常检测。该 Demo 将介绍如何在 DSW 中使用 IsolationForest 算法解决异常检测问题。
【DSW Gallery】IsolationForest算法解决异常检测问题
|
算法
偏最小二乘算法(PLS)回归建模 (Matlab代码实现)
偏最小二乘算法(PLS)回归建模 (Matlab代码实现)
408 0
|
存储 算法 索引
【力扣算法05】之 _1911_ 最大子序列交替和- python
【力扣算法05】之 _1911_ 最大子序列交替和- python
76 0