当前位置:   article > 正文

Python贝叶斯、transformer自注意力机制self-attention个性化推荐模型预测课程平台学生数据

Python贝叶斯、transformer自注意力机制self-attention个性化推荐模型预测课程平台学生数据

全文链接:https://tecdat.cn/?p=37090

原文出处:拓端数据部落公众号 

分析师:Kung Fu

近年来,在线课程凭借便捷的网络变得越来越流行。为了有更好的用户体验,在线课程平台想要给用户推荐他们所感兴趣的课程,以便增大点击率和用户黏性。

解决方案

任务/目标
根据学生所选的历史课程,预测出学生接下来可能选择的课程。

数据源准备


数据说明:
stu_id:学员证。
时间:学生首次报名相应课程的时间。
course_index:课程 ID。
名称:课程名称。
类型:课程的类型。
type_id:类型 id。

构造

这个是我所用到的数据集。在所给的数据特征中,我们需要用到的是学生的ID和课程的ID,每个学生所选的课已经按照时间顺序排列好了。

df = pd.read_csv("data.csv", encoding="gbk")

用户选择的课程的分布

用户选择的类型的分布

  1. top_course = top_course.sort_values('choosen_times', ascending = False)
  2. top_course.head(20)

用户选择的类型的分布

划分训练集和测试集和评价指标

我们是这样划分训练集和测试集的,把每个学生选的最后一门课作为测试集,剩下的课程作为训练集。Hit rate@10(推荐10门课程的命中率)和NDCG@10(推荐10门课程的归一化折损累计增益)是我们对模型的评价指标。Hit rate是指训练集是否在推荐的10门课程里,NDCG则是更关注推荐的课程在10门课程当中的具体位置,越是靠前,NDCG越大。

建模

非个性化推荐模型

这个模型是我们的baseline,采用非个性化的方式,也就是说,所有学生会收到一样的课程推荐,在这里,推荐的课程是基于课程的受欢迎程度,我们挑选出最受欢迎的10门课推荐给所有学生。

计算并绘制命中率与推荐课程数量的关系

计算并绘制 NDCG 与推荐课程数量的关系

  1. plt.ylabel("NDCG")
  2. plt.show()

贝叶斯个性化排序推荐模型

在这个算法中,我们将任意学生所选的课进行标记,如果一个用户u在选择j课程之前选择了i课程,我们得到一个三元组<u,i,j>,说明u更喜欢i。如果对于用户u来说我们有m组这样的反馈,那么我们就可以得到m组用户u对应的训练样本。然后这个算法基于矩阵分解的方式得到用户对于不同课程的排序,选出前10名。

创建稀疏学生-课程交互矩阵

  1. def create_matrix(data, stu_col, courses_col, ratings_col):
  2. """
  3. creates the sparse student-course interaction matrix
  4. """
  5. for col in (courses_col, stu_col, ratings_col):
  6. data[col] = data[col].astype('category')
  7. ratings = csr_matrix((data[ratings_col],
  8. (data[stu_col].cat.codes, data[courses_col].cat.codes)))
  9. ratings.eliminate_zeros()
  10. return ratings, data

将日期拆分为训练集和测试集

通过删除每个学生的一些交互,将学生与课程交互矩阵拆分为训练集和测试集,并假装我们从未见过它们

构造 BPR 类

贝叶斯个性化排名(BPR)来源于个性化排名,为用户提供排名项目列表的项目推荐。排名项目列表是根据用户的隐式行为计算得出的。BPR 基于矩阵分解。所选课程可以看作是正数据集,而其余课程可以是负值和缺失值的混合体。通常,课程推荐人会输出个性化分数Xin和

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/897661
推荐阅读
相关标签