免规则采集器列表算法(推荐系统的初体验(关联规则,协同过滤)(图))
优采云 发布时间: 2022-02-19 08:22免规则采集器列表算法(推荐系统的初体验(关联规则,协同过滤)(图))
说到推荐系统问题,其实就是一个数据挖掘问题。输入是用户信息、物品信息和交互信息,输出是每个用户对应的物品列表。常用的推荐方法几乎都是从协同过滤和分类器方向演变而来,所做的工作也是基于相似度计算(UserCF和ItemCF),基于分类方法(矩阵分解和一系列LTR算法)。这两天刚翻了一篇CSDN博客《推荐系统初体验(关联规则,协同过滤)》,里面说:
从更接近本质的角度来看,两种方法的出发点和逻辑思路也大相径庭。一般来说,关联规则被归类为动态推荐,而协同过滤更多地被视为静态推荐。
所谓动态推荐,我的理解是:推荐是基于且仅基于当前(最近)的购买或点击。比如我在网站上看了赵立荣老师的一个小品,系统找到了这个小品相关的关联规则,然后按照这个规则推荐给我(比如另一个小品先生的小品)。赵丽蓉= =)。静态推荐是基于对用户的一定分析,建立用户在一定时期内的偏好排名,然后在此期间不断根据这个排名进行推荐。
这种动态推荐的方式其实有点类似于我们在处理时间序列问题时,下一刻的结果是根据前几次的输出结果来计算的,而不是根据变量本身的属性分析。因此,基于关联规则的推荐算法也是一种非用户个性化的推荐方法。但是,从推荐系统实践的角度来看,如何平衡个性化和非个性化推荐结果的使用是非常有争议的。我们在在线视频推荐方面有着非常深厚的经验。在超*敏*感*词*稀疏数据下,基于统计的人气排名往往比用户个性化方案指标高几个点,因为用户偏好的计算会有很大的偏差。
在离线数据集上,我们也简单地实现了一个基本模型。在做“CIKM 2019 EComm AI: User Behavior Prediction”时,我们在 Spark 上运行了 FPGrowth 模型。当然,结果并不是很有用,毕竟分析大多数稀疏数据是没有规则的。但是对于一小部分频繁交互的数据,我认为关联规则生成的结果会有很大概率会碰到真实的结果。
首先是初始化环境。我们使用scala语言,代码在notebook上运行。一方面方便看效果,另一方面方便远程实时运行任务。
%%init_spark
launcher.num_executors = 3
launcher.executor_cores = 5
launcher.driver_memory = '30g'
launcher.executor_memory = '30g'
launcher.master = "yarn"
launcher.conf.set("spark.sql.catalogImplementation", "hive")
launcher.conf.set("hive.metastore.uris","thrift://dn1:9083")
launcher.conf.set("spark.sql.warehouse.dir", "hdfs:///apps/hive/warehouse")
launcher.conf.set("spark.sql.broadcastTimeout", "60000")
launcher.conf.set("spark.driver.maxResultSize", "10g")
launcher.conf.set("spark.rpc.message.maxSize", "1024")
加载相关的库文件。
import org.apache.spark.sql.types._
import org.apache.spark.sql.SaveMode
import org.apache.spark.sql.functions._
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions
import org.apache.spark.sql.expressions.Window
import scala.io
读取数据,输入更多的关联规则,生成购物篮,即构造
<p>