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

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

时间:2024-07-23 18:42:46浏览次数:10  
标签:10 transformer Python self 用户 推荐 课程 col 个性化

全文链接: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.    
  2.    
  3.   plt.ylabel("NDCG")
  4.   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.    
  6.   for col in (courses_col, stu_col, ratings_col):
  7.   data[col] = data[col].astype('category')
  8.    
  9.   ratings = csr_matrix((data[ratings_col],
  10.   (data[stu_col].cat.codes, data[courses_col].cat.codes)))
  11.   ratings.eliminate_zeros()
  12.   return ratings, data
 

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

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

构造 BPR 类

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

标签:10,transformer,Python,self,用户,推荐,课程,col,个性化
From: https://www.cnblogs.com/tecdat/p/18319308

相关文章

  • 知识清单|Python入门必备基础知识点
    1.数据类型和变量1.1缩进和注释的规则Python使用缩进来表示代码块,通常使用四个空格或一个制表符。注释使用#开头。1.2基本数据类型Python支持多种基本数据类型,包括整数、浮点数、字符串、布尔值和空值。1.3变量的动态类型和赋值Python是动态类型语言,变量可......
  • 使用 Python 进行 A/B 测试
    使用Python进行A/B测试的简介A/B测试,也称为拆分测试,是一种统计方法,用于比较网页、电子邮件、产品等的两个版本,以确定哪个版本效果更好。目标是改善用户体验、参与度、转化率或其他关键指标。Python是一种流行的编程语言,用于实现A/B测试,因为它具有广泛的数据分析库和灵活......
  • Transformer-Embedding
    导包#导入包importtorchfromtorchimportnnimporttorch.nn.functionalasfimportmathTokenEmbedding#首先定义tokenembaddingfromtorchimportTensor"""将输入词汇表的索引转换成指定维度的Embedding"""classTokenEmbedding(nn.Embedding......
  • Python返回类型注释
    声明函数时,我们应该使用返回注释吗?defgenerate_nine()->int:return9或者我们可以简单地这样写:defgenerate_nine():return9Python中的返回类型注解对代码的功能没有直接影响,但它们提供了几个重要的好处:优点:增强可读性:......
  • 为 mixins 中返回 self 的方法注释返回类型
    我正在使用构建器模式,其中(大)类上的大多数方法返回其标识(self),因此被注释为返回它们所属类的类型:classTextBuilder:parts:List[str]#omittedrender:Callable[[],str]#forbrevitydeftext(self,val:str)->"TextBuilder":......
  • Python - 检查签名注释是否属于特定类
    使用forsigininspect.signature.parameters.items():ifisinstance(sig[1].annotation,inspect._empty):print("empty")时,我从来没有让控制台说打印“空”。即使在if子句之前使用print(sig[1].annotation)时给出的输出是:<class'inspect._e......
  • 从代码调用 alembic 命令后,Python 记录器不再记录
    我在代码中使用alembic在应用程序启动时应用数据库迁移。我还使用Python的内置logginglib来登录终端。应用迁移后(或运行任何打印到alembic的命令),我的记录器停止工作。stdout代码:预期输出:importloggingimportalembic.commandfr......
  • python 使用 random模块生成随机测试数据
    前言python中可以使用random模块生成随机测试数据常用函数说明random.seed(a)设置初始化随机种子,可输出相同随机数序列;a取整数或浮点数,不设置时默认以系统时间为种子random.random()生成一个0.0到1.0之间的随机浮点数random.uniform(a,b)生成一个[a,b]之间......
  • Python 上债券的内部收益率
    在Excel中,有一个公式(IRR.Payment:https://support.microsoft.com/fr-fr/office/fonction-tri-paiements-de1242ec-6477-445b-b11b-a303ad9adc9d)计算债券的IRR。我正在尝试在python算法上重现这一点,以便能够在我的代码中计算它。我在网上找到了这段代码:importnumpy......
  • 使用Python连接ftps服务器时nlst返回错误
    我可以使用TotalCommander登录服务器:ftps://publishedprices.co.il用户名:“奥舍拉德”密码为空并带有lftp-uosherad:publishedprices.co.il但是当我尝试登录并使用Python获取文件列表时nlst函数返回超时代码:fromftplibimportFTP_TLS......