als recall 召回
来源:9-2 离线推荐:基于用户角度召回策略筛选候选集(上)

森垚27
2021-02-21
第九章 als recall 召回
val Array(training, test) = data.randomSplit(Array(0.8, 0.2))
training 只包含了80%的数据, 而且可能漏掉部分用户的行为数据;
例如某个用户 user_a, 他在原始的数据集中 有且只有一条浏览的pv记录, 那这个随机的 training dataset 可能没有包含这条记录, 我们用这个 training dataset 来训模型
val model = als.fit(training)// 找到一个最优的
最后我们用这个model 来进行召回, 召回的结果写入hbase
val list = model.recommendForAllUsers(20)
召回的结果list 会包含 user_a 的结果吗?
老师帮忙解释一下这个原理, 谢谢!
2回答
-
小简同学
2021-02-22
同学你好,val Array(training, test) = data.randomSplit(Array(0.8, 0.2)),这个式子的意思是将数据集80%作为训练数据,20%作为参考数据,然后将训练数据训练模型,再将模型结果和参考数据对比,比较误差,来检验模型的效果,所以这种训练方式不会只进行一次,要生成多个模型,从中取最好的那个作为最终模型,als有封装这个比较的方法,所以你说的是否会漏掉了某条数据,首先这不重要,因为推荐是个概率的问题,1,2条数据不会影响到整体的概率,其次作为训练数据,数据量要有一定的量才有效果,数据量太小训练出来的模型没有什么意义的。祝学习愉快!
142021-02-23 -
小简同学
2021-02-22
还有你提到的例子,user_a有且只有一条数据,在召回的list是否包含user_a的数据,首先肯定包含,但你这个例子没有意义,user_a的数据量太小,训练出来的模型没有意义。正如上面所说的,随机取80%的数据作为训练数据,如果担心训练数据量小,那就取90%,而且不止取一次,然后根据模型的评估指标,例如均方差,来取最优的模型。祝学习愉快!
00
相似问题