基于智能推荐的校园兼职招聘平台

3协同过滤算法简介

目前,推荐算法有很多种,可以应用于日常生活的许多领域,对大量数据进行处理和分析,然后进行分类。它将显示用户可能感兴趣的内容,这是推荐算法的主要功能之一[1]。

协同过滤算法通常包括两类:一类是基于用户的协同过滤算法,另一类是基于物品的协同过滤算法[2]。

3.1.1基于用户的协同过滤算法

根据用户的协同过滤算法的主要实现方式是,根据获取使用者的历史的一些活动统计(如使用者对职位的收集),并由此分析出使用者对某个工作类别的偏好,再根据判断用户偏好的重要程度,甚至是对某个工作类型的评价,把这种统计加以数字化,从而形成了使用者喜好的二维矩阵,同样的方法也可以用于其他应用,因此可以方便地使用找到相同的用户组,然后通过统计相似率计算用户之间的相似度,从而筛选出最相似的用户,类似用户首选且用户未收集的职位也推荐给用户[3]。然而⽤户有新⾏为,不⼀定会导致推荐结果的实时变化.

图3-1 基于用户的协同过滤原理

3.1.2基于物品的协同过滤算法

一个商品的协同过滤算法(ItemCF)是目前在业内运用得最为普遍的方法之一,在亚马逊、Netflix、以及YouTube的推荐方法的基本上都是采用ItemCF。它可以向客户介绍一个与他之前所感兴趣的东西类似的商品。比如:该方法会因你选择了《数据挖掘导论》而给你选择《机器学习》[4]。但是,ItemCF方法并不使用物体的内容属性统计物体内部的相似度,而主要是根据研究客户的行动记录统计物体内部的相似度。该方法还指出,商品A与商品B相互之间存在着较大相似度的原因,在于喜爱商品A的客户大都也喜爱商品B。

3.2 基于用户收藏的协同过滤算法实现

因为该课题是为了实现具有个性化推荐功能的校园兼职招聘平台,也因为利⽤用该⽤户的历史经验⾏为给⽤户提供了有理有据的推荐解释,如此才能够使⽤户⽐比较信服,所以本系统使用了基于物品的协同过滤算法,⽤户有新⾏为,它将导致用户的推荐结果发生实时变化[5]。基于物品的协同过滤算法的基础过程包括:

  1. 计算物品之间的相似度

基于余弦(Cosine-based)的计算方法,利用求二矢量间的角度余弦值来表达事物间的相似之处,方法为:其中分子是二矢量的内积,即二矢量相同距离的数字相乘。

公式 3-1

上述公式的分母是平均喜欢u项的用户数,分子是平均喜欢u项和v项的用户数。上述公式似乎非常合理,但如果V项非常流行,很多人都喜欢它,那么上面公式中的分子和分母将非常接近,w将非常接近1。也就是说,任何产品都是受欢迎的,即任何商品都和热门商品之间的相似度很高,这会导致ItemCF算法会总是推荐热门商品,这并不是一个好的设计[6]。因此可以采用下面的公式:

公式 3-2

  1. 按照商品的类似情况以及在校大学生的历史情况,给大学生形成选择清单

当构建起了物品的相似度矩阵以后,我们就要面对一个问题,便是怎样在多个相同的东西中选取用户最感兴趣的东西[7]。因此,ItemCF算法采用了下列公式方法统计用户u对物品j的感兴趣程度:

公式 3-3

上式中的N(u)是在校大学生喜欢的物品集合,S(j,K)是与物体j最接近的k个物体的组合,Wji是指物体j与i的接近程度,而Rui则是指在校大学生u对物体i的趣味。对上式的通俗意思是,对在校大学生u最喜欢的物品列表中的每一种物品i,都可以通过物品相似率矩阵找出与其最接近的K个物品,令为Kij,j=1,2,3,.K,然后通过物体的相同高度Wij来显示使用者对物体j的关心情况[12]。

最后将筛选出来的物品按照用户对其感兴趣程度逆序排序,取全体列表或者列表前K个物品推荐给用户,至此ItemCF算法完成[13]。

计算职位之间的相似度代码如下:

for(Recruit i:memberLove){
            for(Recruit j:allRecruits){

               if(i.getId()!=j.getId()){//去重(两集合相同的职位去除掉)
                  Search searchSim = new Search();
                  int loveInCommon = 0;
                  //计算共同喜欢职位ij的用户数
                  for(MemberCollect mci:i.getMemberCollect()){
                     for(MemberCollect mcj:j.getMemberCollect()){
                        if(mci.getMember().getId()==mcj.getMember().getId()){
                           loveInCommon++;
                        }}}
                  //职位相似度计算
                  double sim = (i.getMemberCollect().size()*j.getMemberCollect().size())==0?0:(loveInCommon/Math.sqrt(i.getMemberCollect().size()*j.getMemberCollect().size()));
                  matrix.add(new SimValue(i, j, sim));
               }}}

根据职位相似度计算各个职位的推荐度代码如下:

for(Recruit j:allRecruits){
            j.setTuimvalue(0);
            for(SimValue s:matrix){
               if(j.getId()==s.j.getId()){
                  j.setTuimvalue(j.getTuijianvalue()+s.sim);
               }}}

计算推荐集代码如下:

Collections.sort(allRecruits,new CompareItTuijian());
         int size=5;//推荐排名最高的5个
         if(allRecruits.size()<=size)size=allRecruits.size();
         int count=0;
         for(Recruit j:allRecruits){

获得所有用户收藏的职位集合A,去掉用户已收藏的职位形成集合B,建立职位相似度矩阵[14];计算共同喜欢职位i和j的用户数,再根据公式计算职位相似度。之后根据职位相似度计算各个职位的推荐度,计算并建立推荐集,按推荐度排序取前5个内容并且去除推荐度为0的职位。主要代码运行结果如下:

  1. 计算相似度部分,以一位用户为例

图3-2 相似度计算结果

  1. 计算推荐度部分过程,以一位用户为例

图3-3 推荐度计算结果

  1. 推荐结果,不同用户各不相同

第4章 概要设计

4.1 系统总体设计结构

此系统主要分为4个功能模块:

1、学生用户端模块

校园兼职招聘平台的学生用户模块包括新用户的注册登录,学生可以进行职位检索、查看详情、发布简历、收集职位、评估职位、创建和删除简历,以及查看已发布简历的状态与企业反馈的信息等操作。

2、企业用户端模块

校园兼职招聘平台的企业用户模块包括企业信息的编辑,职位的发布与删除,以及查看学生的求职简历,并且给予反馈等操作

3、系统管理员端模块

系统管理员可以控制所有用户的有关权限,同时对所有客户的有关资料和所有客户的有关资料进行控制,并能够对系统的行业信息进行控制

4、智能推荐模块

主要是协同过滤算法的实现,通过算法进行智能的为不同用户推送相应职位

功能模块图如图4-1所示:

图4-1 功能模块图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/2639.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解数据结构:栈

一、顺序栈 顺序栈的存储方式如下&#xff1a; 从图中可以看出&#xff0c;顺序栈需要两个指针&#xff0c;base指向栈底&#xff0c;top指向栈顶。 typedef struct SqStack {ElemType *base; //栈底指针ElemType *top; //栈顶指针}SqStack; 说明&#xff1a; ElemType是元…

【智能算法】水循环算法(WCA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2012年&#xff0c;H Eskandar等人受到自然水循环过程启发&#xff0c;提出了水循环算法&#xff08;Water Cycle Algorithm, WCA&#xff09;。 2.算法原理 2.1算法思想 WCA模拟了大自然水循环过…

稳态视觉诱发电位 (SSVEP) 分类学习系列 (1) :FFT-CNN-CCA

稳态视觉诱发电位分类学习系列:FFT-CNN-CCA 0. 引言1. 主要贡献2. 提出的方法2.1 数据处理2.2 卷积神经网络的结构 3. 结果3.1 健康参与者结果比较3.2 卒中患者结果比较 4. 总结欢迎来稿 论文地址&#xff1a;https://ieeexplore.ieee.org/document/8708243 论文题目&#xff1…

日志分析简单总结

1、分析日志的目的 误报&#xff1a;不是攻击而上报成攻击 漏报&#xff1a;是攻击而没有防御的情况 日志分析可以判断是否误判或者漏判&#xff0c;可以溯源攻击行为 在护网作为防守方必备的技能&#xff08;分析NGAF和态势感知&#xff0c;发现异常&#xff09; 2、攻击出现…

探索比特币符文热:市场趋势与持续性分析

在加密货币世界中&#xff0c;比特币一直是备受关注的焦点之一。然而&#xff0c;近年来&#xff0c;随着DeFi&#xff08;去中心化金融&#xff09;的兴起&#xff0c;一种新的潮流开始崭露头角——比特币符文。本文将探讨比特币符文的兴起&#xff0c;分析市场趋势&#xff0…

iOS 17上如何恢复数据?iOS 17 数据恢复软件

“您好&#xff0c;我正在为我的 iPhone 寻找一款iOS 17 数据恢复软件。升级到 iOS 17 后&#xff0c;我丢失了 iPhone 上的所有照片、联系人和消息。有什么建议吗&#xff1f;” ——丹尼 iOS 17数据恢复软件下载 升级到iOS 17后如何恢复丢失的数据&#xff1f;由于在 iPhone…

聊聊 Linux iowait

哈喽大家好&#xff0c;我是咸鱼。 我们在使用 top 命令来查看 Linux 系统整体 CPU 使用情况的时候&#xff0c;往往看的是下面这一列&#xff1a; %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 68.0 wa, 0.0 hi, 0.0 si, 0.0 st其中&#xff0c;man 手册解释 wa 表示 …

异地组网、内部网络需求同时满足,贝锐企业路由器G300开箱体验

由于公司最近新增了办事处&#xff0c;作为IT管理员的我不仅需要搞定办事处的网络&#xff0c;还需要解决远程访问公司内部办公系统以及文件存储服务器的问题。 在此之前&#xff0c;只有少量人员出差时&#xff0c;我们采用了虚拟专网方案来进行远程访问。然而&#xff0c;新…

深度学习基础之《TensorFlow框架(15)—神经网络》

一、神经网络基础 1、什么是神经网络 人工神经网络&#xff08;Artificial Neural Network&#xff0c;简写为ANN&#xff09;。也简称为神经网络&#xff08;NN&#xff09; 是一种模仿生物神经网络&#xff08;动物的中枢神经系统&#xff0c;特别是大脑&#xff09;结构和功…

电脑虚拟机有免费的吗?常见的虚拟机工具软件有哪些?Parallels Desktop19最新版本好用吗

PD虚拟机&#xff0c;即Parallels Desktop&#xff0c;是一款专为Mac用户设计的虚拟机软件&#xff0c;由Parallels公司开发&#xff0c;它允许用户在Mac操作系统上无缝运行Windows、Linux以及其他操作系统&#xff0c;并在这些系统中安装程序或者游戏&#xff0c;无需重启即可…

MySQL权限管理大揭秘:用户、组、权限解析

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 MySQL权限管理大揭秘&#xff1a;用户、组、权限解析 前言用户和组的概念用户和组的概念创建和管理用户创建和管理角色 权限的类型和分配MySQL中的权限类型分配不同类型的权限给用户和组 权限验证与日…

Unity系统学习笔记

文章目录 1.基础组件的认识1.0.组件继承关系图1.1.项目工程文件结构&#xff0c;各个文件夹都是做什么的&#xff1f;1.2.物体变化组件1.2.3.三维向量表示方向1.2.4.移动物体位置附录&#xff1a;使用变换组件实现物体WASD移动 1.3.游戏物体和组件的显示和禁用1.3.1.界面上的操…

【Linux】实现一个进度条

我们之前也学了gcc/vim/make和makefile&#xff0c;那么我们就用它们实现一个进度条。 在实现这个进度条之前&#xff0c;我们要先简单了解一下缓冲区和回车和换行的区别 缓冲区其实就是一块内存空间&#xff0c;我们先看这样一段代码 它的现象是先立马打印&#xff0c;三秒后程…

《QT实用小工具·三十八》QT炫酷的菜单控件

1、概述 源码放在文章末尾 非常飘逸的 Qt 菜单控件&#xff0c;带有各种动画效果&#xff0c;用起来也十分方便。 无限层级&#xff0c;响应键盘、鼠标单独操作&#xff0c;支持单快捷键。 允许添加自定义 widget、layout&#xff0c;当做特殊的 QDialog 使用。 项目demo演示…

大数据学习第四天

文章目录 yaml 三大组件的方式交互流程hive 使用安装mysql(hadoop03主机)出现错误解决方式临时密码 卸载mysql (hadoop02主机)卸载mysql(hadoop01主机执行)安装hive上传文件解压解决版本差异修改hive-env.sh修改 hive-site.xml上传驱动包初始化元数据在hdfs 创建hive 存储目录启…

pytorch-MNIST测试实战

目录 1. 为什么test2. 如何做test3. 什么时候做test4. 完整代码 1. 为什么test 如下图&#xff1a;上下两幅图中蓝色分别表示train的accuracy和loss&#xff0c;黄色表示test的accuracy和loss&#xff0c;如果单纯看train的accuracy和loss曲线就会认为模型已经train的很好了&a…

23年新算法,SAO-SVM,基于SAO雪消融算法优化SVM支持向量机回归预测(多输入单输出)-附代码

SAO-SVM是一种基于SAO雪消融算法优化的支持向量机&#xff08;SVM&#xff09;回归预测方法&#xff0c;适用于多输入单输出的情况。下面是一个简要的概述&#xff0c;包括如何使用SAO-SVM进行回归预测的步骤&#xff1a; 步骤&#xff1a; 1. 数据准备&#xff1a; 收集并准…

勾八头歌之RNN

一、RNN快速入门 1.学习单步的RNN&#xff1a;RNNCell # -*- coding: utf-8 -*- import tensorflow as tf# 参数 a 是 BasicRNNCell所含的神经元数, 参数 b 是 batch_size, 参数 c 是单个 input 的维数&#xff0c;shape [ b , c ] def creatRNNCell(a,b,c):# 请在此添加代码…

sprinboot+人大金仓配置

1. .yml 配置 spring:datasource:type: com.alibaba.druid.pool.DruidDataSource#driverClassName: dm.jdbc.driver.DmDriver## todo 人大金仓driverClassName: com.kingbase8.Driverdruid:## todo 人大金仓master:url: jdbc:kingbase8://111.111.111.111:54321/dbname?cu…

粘合聚酰亚胺PI塑料材料使用UV胶的优势有哪些? (三十四)

聚酰亚胺PI难于粘接&#xff0c;在PI粘接方法中使用UV胶粘剂粘接PI的优势有哪些&#xff1f; 聚酰亚胺&#xff08;PI&#xff09;是一种具有耐高低温性能、高绝缘性、耐化性、低热膨胀系数的材料&#xff0c;广泛用于FPC基材和各种耐高温电机电器的绝缘材料。然而&#xff0c;…