1 简介
今天向大家介绍一个计算机专业毕业设计项目,基于协同过滤算法的在线视频学习答题自动化批改平台 习题问答系统。
使用协同过滤算法完成习题推荐,在线视频学习,试卷自动化组卷,批改评分
在网络技术的快速发展的今天,人类已经步入了信息化时代,网络与人们生产生活之间的关系越来越密切,人类越来越依赖网络化的生活,学生的学习也在从传统的线下教学向线上学习转变.在信息技术,网络科技高度发达的时代背景下,过去的课堂教学方式逐渐退出历史舞台,新型的学习思维,教学方法层出不穷,并逐渐应用到教育教学活动当中,使得人们的学习方式和工作模式发生发生了翻天覆地的变化.本文创新设计的远程在线自主学习平台能够构建一个自然,和谐,轻松的学习氛围,能够随时随地在线解答学习者的疑问,使得人们的学习活动更加个性,充分激发人们的学习兴趣,获得更好的学习成果.
2 设计概要
协同过滤算法(Collaborative Filtering) 是比较经典常用的[推荐算法],从1992年一直延续至今。所谓协同过滤算法,基本思想是根据用户的历史行为数据的挖掘发现用户的兴趣爱好,基于不同的兴趣爱好对用户进行划分并推荐兴趣相似的商品给用户。协同过滤算法主要分为两类:
- 基于物品的协同过滤算法:给用户推荐与他之前喜欢的物品相似的物品
- 基于用户的协同过滤算法:给用户推荐与他兴趣相似的用户喜欢的物品
2、基于用户的[协同过滤算法](UserCF)
UserCF,思想其实比较简单,当一个用户A需要个性化推荐的时候, 我们可以先找到和他有相似兴趣的其他用户, 然后把那些用户喜欢的, 而用户A没有听说过的物品推荐给A。如图:
UserCF算法两步骤:
- 找到与当前用户A相似的用户B;
- 将相似用户B喜欢的物品而用户A没有见过的物品推荐给用户A。
那这两步如何做呢?接下来,咱们来个例子具体看一下:
给用户推荐物品的过程可以形象化为给物品打分的过程上面表格里面是5个用户对于5件物品的一个打分情况,就可以理解为用户对物品的喜欢程度,分数越高,说明对这个物品越喜欢。
UserCF算法的两个步骤:
- 首先根据前面的这些打分情况(或者说已有的用户向量)计算一下Alice和用户1, 2, 3, 4的相似程度, 找出与Alice最相似的n个用户;
- 根据这n个用户对物品5的评分情况和与Alice的相似程度会猜测出Alice对物品5的评分, 如果评分比较高的话, 就把物品5推荐给用户Alice, 否则不推荐。
2.1计算相似度的几种方式
-
杰卡德(Jaccard)相似系数:
两个集合A和B交集元素的个数在A、B并集中所占的比例,称为这两个集合的杰卡德系数,用符号 J(A,B) 表示。杰卡德相似系数是衡量两个集合相似度的一种指标(余弦距离也可以用来衡量两个集合的相似度),jaccard值越大说明相似度越高。
![Q22$D383_{1[DPVOS`{)V3.png
-
余弦相似度:
如图公式所示,余弦相似度衡量了用户向量i和用户向量j之间的向量夹角大小。显然,夹角越小,证明余弦相似度越大,两个用户越相似。
![D68QZV1ZQ[)MUH09KZFU45.png公式中是向量表示,可以换成具体数值,假设用户i和用户j的向量都是n维,那么向量i(x11,x12,x13,…,x1n),j(x21,x22,x23,…,x2n),那么余弦相似度可以表示为
这个在具体实现的时候, 可以使用cosine_similarity进行实现:
本系统基于java技术,使用UML建模,采用springboot框架组合进行设计,Mysql数据库存储数据。
本系统的功能主要包括本系统的功能主要包括:
3、学生端:注册、登录、个人信息维护、教师信息、试题信息、试卷信息、试题推荐、错题本等功能 4、教师端:注册、登录、个人信息维护、学生信息、试题信息、试卷信息等功能 5、管理员端:登录、个人信息维护、学生信息、试题信息、试卷信息等功能 6、协同过滤推荐算法实现试题推荐功能
3 系统关键技术
使用springboot,vue,mysql, mybaties, typescript, html ,css, js 等进行开发
4 开发工具
开发工具主要有:idea、jdk1.8、maven、mysql5.7、Navicat等。
5 代码展示
@RequestMapping("/strategy")
@RestController
@Scope("prototype")
public class StrategyController {
@Autowired
private StrategyService strategyService;
@Value("${web.upload-path}")
private String path;
@RequestMapping("/findPage")
public ObjDat<Strategy> findPage(Strategy strategy, @RequestParam(value="page", defaultValue="1") int page, @RequestParam(value="limit", defaultValue="10") int limit){
return strategyService.findPage(strategy,page-1,limit);
}
@RequestMapping("/edit")
public JsonResult edit(HttpServletRequest request, Strategy strategy) throws IOException {
User user=(User)request.getSession().getAttribute("user");
if(user==null){
return JsonResult.error("请登录");
}
String str=strategyService.edit(request,strategy);
if(str.equals("成功")){
return JsonResult.success("操作成功");
}else{
return JsonResult.error("操作失败");
}
}
6 系统功能描述
项目功能演示
![)5[%%5VF66I3EEG6PD]T81.png
![F@JKEKN0$]~K@PEG132H(7C.png](https://upload-images.jianshu.io/upload_images/28807581-d9138d427273627b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)