[计算机毕业设计]关联挖掘的服装推荐系统

news2025/1/13 15:30:27

前言

    📅大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

🚀对毕设有任何疑问都可以问学长哦!

本次分享的课题是

🎯关联挖掘的服装推荐系统

课题背景与意义

推荐系统是建立在海量数据挖掘基础上,高效地为用户提供个性化的决策支持和信息服务,以提高用户体验及商业效益。常见的推荐应用场景如:

  • 资讯类:今日头条、腾讯公众号等新闻、广告、文章等内容推荐;

  • 电商类:淘宝、京东、拼多多、亚马逊等商品推荐;

  • 娱乐类:抖音、快手、爱奇艺等视频推荐;

  • 生活服务类:美团、大众点评、携程等吃喝玩乐推荐;

  • 社交类:微信、陌陌等好友推荐;

课题实现技术思路

1.2 推荐系统的目标

构建推荐系统前,首先要根据业务目标确定推荐系统的优化目标,对于不同的应用场景,推荐系统(模型学习)关注的是不同的业务指标,比如:

  • 对于电商推荐,不仅要预测用户的点击率(CTR),更重要的是预测用户的转化率(CVR);

  • 对于内容推荐,业务关心的除了CTR,还有阅读/观看时长、点赞、转发、评论等指标;

由于不同的业务指标可能存在一些联系,技术实现上,大多数时候都会设计一个多目标优化的框架(如:CTR和CVR模型进行Cotrain),共同进行模型的训练与预测,各个任务之间能够更好地共享信息。

二、推荐系统的技术架构

2.1 推荐系统的层次组成

推荐系统基于海量的物品数据的挖掘,通常由 召回层→排序层(粗排、精排、重排)组成,不同的层次的组成,其实也就是信息筛选的漏斗,这也是工程上效率的需要,把意向对象的数量从粗犷到精细化的筛选过程(这过程就像是找工作的时候,HR根据简历985/211粗筛出一部分,再做技能匹配及面试精准筛选,最终敲定合适的人选):

  • 召回层:从物品库中根据多个维度筛选出潜在物品候选集(多路召回),并将候选集传递给排序环节。在召回供给池中,整个召回环节的输出量往往以万为单位。召回层主要作用是在海量的候选做粗筛,由于召回位置靠前且输入空间较大,所以时延要求较高,偏好简单方法,简单快速地确定候选集。

    常用方法有:召回策略(如推荐热门文章、命中某类标签的文章等等)、双塔模型(学习用户及物品的embedding,内积表示预测意向概率)、FM及CF等模型做召回、知识图谱(知识图谱表示学习,知识推理用户对物品的兴趣程度)、用户(多兴趣)行为序列预测做召回等等。

  • 粗排层:利用规则或者简单模型对召回的物品进行排序,并根据配额进行截断,截取出 Top N 条数据输出给精排层,配额一般分业务场景,整个粗排环节的输出量往往以千为单位。

  • 精排层:利用大量特征的复杂模型,对物品进行更精准的排序,然后输出给重排层,整个精排环节的输出量往往以百为单位。粗排、精排的环节是推荐系统最关键,也是最具有技术含量的部分,使用的方法有深度学习推荐模型(Deep& Cross、NFM等)、强化学习等等。

  • 重排层:主要以产品策略为导向进行重排(及融合),常见策略如去除已曝光、去重、打散、多样性、新鲜度、效益优先等策略,并根据点击回退在列表中插入新的信息来提升体验,最后生成用户可见的推荐列表,整个融合和重排环节的输出量往往以几十为单位。

2.2 冷启动方法

对于完整的推荐系统结构,还需要考虑一个问题是:对于新的用户、新的物品如何有效推荐的问题,也就是“冷启动”的问题,因为没有太多数据和特征来学习召回及排序模型,所以往往要用一些冷启动方法替代来达到目的(这个目的不只是提高点击等消费指标,更深层的可能会极大的带动业务增长)。

冷启动一般分为三类,用户冷启动、物品冷启动还有系统冷启动,常用的冷启动方法如:

  • 提供热门及多样性内容推荐。即使用统计的方法将最热门的物品进行推荐,越热门且品类丰富的内容被点击的可能性越大;

  • 利用新用户基本信息关联到相关内容(利用领域、职位、工作年龄、性别和所在地等信息给用户推荐感兴趣或者相关的内容,如年龄-关联电影表、收入-关联商品类型表,性别-文章关联表等等);

  • 利用新物品的内容关联到相似物品,并对应相关用户。

三、推荐系统的相关技术

纵观推荐技术的发展史,简单来说就是特征工程自动化的过程,从人工设计特征+LR,到模型实现自动特征交互:如基于LR的自动特征交互组合的因式分解机FM及FFM 以及 GBDT树特征+LR ,到自动提取高层次特征的深度学习模型(DNN)。

推荐系统整体技术栈可以分为传统机器学习推荐及深度学习推荐,而不同的推荐层偏好不同(复杂度、精确度)的模型或策略(图来源:王喆老师的专栏):

3.1 传统机器学习推荐模型

传统机器学习推荐可以简单划分为协同过滤算法及基于逻辑回归的序列算法:

3.1.1 协同过滤的相关算法

协同过滤算法可以简单划分为基于用户/物品的方法:

  • 基于用户的协同过滤算法(UserCF)

通过分析用户喜欢的物品,我们发现如果两个用户(用户A 和用户 B)喜欢过的物品差不多,则这两个用户相似。此时,我们可以将用户 A 喜欢过但是用户 B 没有看过的物品推荐给用户 B。基于用户的协同过滤算法(UserCF)的具体实现思路如下:

(1)计算用户之间的相似度;(2)根据用户的相似度,找到这个集合中用户未见过但是喜欢的物品(即目标用户兴趣相似的用户有过的行为)进行推荐。

  • 基于物品的协同过滤算法(ItemCF)

通过分析用户喜欢的物品,我们发现如果两个物品被一拨人喜欢,则这两个物品相似。此时,我们就会将用户喜欢相似物品中某个大概率物品推荐给这群用户。基于物品的协同过滤算法的具体实现思路如下:

(1)计算物品之间的相似度;(2)就可以推荐给目标用户没有评价过的相似物品。

  • 矩阵分解法

对于协同过滤算法,它本质上是一个矩阵填充问题,可以直接通过相似度计算(如基于用户的相似、基于物品的相似等)去解决。但有一问题是现实中的共现矩阵中有绝大部分的评分是空白的,由于数据稀疏,因此在计算相似度的时候效果就会大打折扣。这里我们可以借助矩阵分解方法,找到用户和物品的表征向量(K个维度,超参数),通过对用户向量和物品向量的内积则是用户对物品的偏好度(预测评分)。

由于矩阵分解引入了隐因子的概念,模型解释性很弱。另外的,它只简单利用了用户对物品的打分(特征维度单一),很难融入更多的特征(比如用户信息及其他行为的特征,商品属性的特征等等)。而这些缺陷,下文介绍的逻辑回归的相关算法可以很好地弥补。

3.1.2 逻辑回归的相关算法

逻辑回归(LR)由于其简单高效、易于解释,是工业应用最为广泛的模型之一,比如用于金融风控领域的评分卡、互联网的推荐系统。它是一种广义线性的分类模型且其模型结构可以视为单层的神经网络,由一层输入层、一层仅带有一个sigmoid激活函数的神经元的输出层组成,而无隐藏层。

LR模型计算可以简化成两步,“通过模型权重[w]对输入特征[x]线性求和 ,然后sigmoid激活输出概率”。其中,sigmoid函数是一个s形的曲线,它的输出值在[0, 1]之间,在远离0的地方函数的值会很快接近0或1。

由于LR是线性模型,特征表达(特征交互)能力是不足的,为提高模型的能力,常用的有特征工程的方法或者基于模型的方法。

  • 基于特征工程的优化

通过人工结合业务设计特征、特征衍生工具(如FeatureTools)暴力生成特征 以及 特征离散化编码等特征工程的方法,为LR引入非线性的表达。

  • 基于模型的优化

另外还可以基于模型的方法提升特征交互的能力。如POLY2、引入隐向量的因子分解机(FM)可以看做是LR的基础上,对所有特征进行了两两交叉,生成非线性的特征组合。

但FM等方法只能够做二阶的特征交叉,更高阶的,可以利用GBDT自动进行筛选特征并生成特征组合,也就是提取GBDT子树的特征划分及组合路径作为新的特征,再把该特征向量当作LR模型输入,也就是经典的GBDT +LR方法。(需要注意的,GBDT子树深度太深的化,特征组合层次比较高,极大提高LR模型拟合能力的同时,也容易引入一些噪声,导致模型过拟合)

3.2 深度学习推荐模型

深度学习能够全自动从原有数据中提取到高层次的特征,深度学习推荐模型的进化趋势简单来说是 Wide(广)及  Deep(深)。Wide部分善于处理大量稀疏的特征,便于让模型直接“记住”大量原始的特征信息,Deep部分的主要作用有更深层的拟合能力,发现更高层次特征隐含的本质规律。

3.2.1 深度矩阵分解(双塔结构)

深度矩阵分解模型(Deep Matrix Factorization Model,DMF)是以传统的矩阵分解(MF)模型为基础,再与 MLP 网络组合而成的一种模型,其中 MF 主要负责线性部分,MLP 主要负责非线性部分,它主要以学习用户和物品的高阶表征向量为目标。

DMF 模型的框架图如下所示:该模型的输入层为交互矩阵 Y,其行、列分别对应为对用户和对物品的打分,并采用 multi-hot 形式分别表征用户和物品。

我们将用户表征 Yi* 和物品表征 Y*j 分别送入 MLP 双塔结构,生成用户隐向量表征 Pi 和物品隐向量表征 qj。最后对二者使用余弦点积匹配分数。

3.2.2 Wide&Deep

与其说广深(Wide&Deep)模型是一种模型,倒不如说是一套通用的范式框架。Wide&Deep 模型由 LR+MLP 两部分并联组成,综合了传统机器学习和深度学习的长处。

  • Wide 部分根据历史行为数据推荐与用户已有行为直接相关的物品;

  • Deep 部分负责捕捉新的特征组合,从而提高推荐的多样性。

3.2.3 深度因子分解机(DeepFM)模型

深度因子分解机(Deep Factorization Machine,DeepFM)模型是从广深(Wide&Deep)框架中演化出来的一种模型。它使用 FM 模型替换掉了 LR 部分,从而形成了 FM&Deep 结构。

3.2.4 Deep&Cross

深度和交叉网络(Deep & Cross Network,DCN)模型是从广深(Wide&Deep)框架中演化出来的一个模型。DCN 模型将 Wide 部分替换为由特殊网络结构实现的特征交叉网络,它的框架如下图所示:左侧的交叉层除了接收前一层的输出外,还会同步接收原始输入层的特征,从而实现特征信息的高阶交叉。

3.2.5 注意力因子分解机(AFM)

注意力因子分解机(Attentional Factorization Machine,AFM)模型也是Wide&Deep 框架中的一种,它通过添加 Attention 网络,自动学习不同特征之间交互的重要性。

3.2.6 神经因子分解机(NFM)

神经因子分解机(Neural Factorization Machine)模型也是 Wide&Deep 框架中的一种。NFM 模型把 Wide 部分放到一边不做变化,Deep 部分在 FM 的基础上结合了 MLP 部分。其中,FM 部分能够提取二阶线性特征,MLP 部分能够提取高阶非线性特征,从而使模型具备捕捉高阶非线性特征的能力。

NFM 模型框架的 Deep 部分如下图所示,NFM 模型是在 Embedding 层后将 FM 的输出进行 Bi-Interaction Pooling 操作(将表征向量的两两元素相乘后,再将所有组合的结果进行求和),然后在后面接上 MLP。

🚀海浪学长的作品示例:

大数据算法项目

机器视觉算法项目

 

微信小程序项目

Unity3D游戏项目

最后💯

🏆为帮助大家节省时间,如果对开题选题,或者相关的技术有不理解,不知道毕设如何下手,都可以随时来问学长,我将根据你的具体情况,提供帮助。

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

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

相关文章

OS>>多线程

文章目录绪论SIGCHLDvolatile概念执行流并行与并发临界资源与临界区互斥和同步线程线程定义线程独立性线程优点线程缺点线程ID线程操作线程创建线程等待线程终止线程分离线程替换线程互斥与同步互斥同步原子性互斥锁/互斥量原理使用抢票情景模拟未加锁前加锁后代码锁使用规范重…

【毕业设计】14-基于单片机的健康检测仪/心跳/温度/血压设计(原理图+源码+仿真工程+论文)

【毕业设计】14-基于单片机的健康检测仪/心跳/温度/血压设计(原理图源码仿真工程论文) 文章目录【毕业设计】14-基于单片机的健康检测仪/心跳/温度/血压设计(原理图源码仿真工程论文)资料下载链接任务书设计说明书摘要设计框架架构…

Android BLE HIDS Data ,从问询DB 到写入Android 节点的flow 之五

问题点 7: 关于BLE HIDS data 写入到Android 节点"/dev/uhid"的flow; 关于BLE中的HIDS,首先我们需要理解好角色的定义: GATT Server 作为HID Service 提供者,对应HID Device角色; GATT Client…

maven大全(概述、安装配置、使用步骤)

一、概述 1.什么是maven? 答: 全称是Apache Maven。专门用于管理和构建项目的工具 2.maven有什么作用? (1)提供了一套标准化的项目结构 官方: 就是使用的idea,eclipse编译器的项目结构不统…

基于Matlab的高压直流输电系统仿真研究

目录 摘要 I Abstract II 第1章 绪论 1 1.1 高压直流输电系统 1 1.2 高压直流输电系统的历史 1 1.3 高压直流输电系统的特点 1 1.4 我国高压直流输电系统的现状 2 1.5 高压直流输电技术的发展前景 5 第2章 高压直流输电控制基本原理 6 2.1 高压直流输电控制系统分层结构 6 2.2 …

领夹直播麦克风常规的使用方法及方案说明

麦克风多对我们来说并不陌生,但领夹式麦克风我们日常可能会用的比较少,像做自媒体、采访等会用到的比较多,它能收到人说话的声音,避开外界嘈杂的声音。接下来我们一起来了解一下领夹式麦克风的相关知识吧! 一、领夹式麦…

Win11系统启动文件夹是空的怎么解决?

Win11系统启动文件夹是空的怎么解决?有用户发现自己系统的启动文件夹里面没有任何的文件,这样可能会导致我们的电脑出现问题,导致无法正常的启动桌面程序。那么如何去解决这个问题,一起看看具体的解决方法分享吧。 解决方法&#…

从I/O的视角看DPU

计算的流动性 随手翻开一个公有云,都会发现有不同的计算实例,搭配不同的CPU、内存、网络和存储来应对不同业务的需求. 当云原生和大量的新技术出现后,作为公有云考虑的最重要的一件事情就是提供这些丰富服务的成本: 青云、Ucloud也都在A股上…

[Redis] Spring Boot 使用Redis---RedisTemplate泛型约束乱码问题

✨✨个人主页:沫洺的主页 📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专…

牛客网-《刷C语言百题》第五期

✅作者简介:嵌入式入坑者,与大家一起加油,希望文章能够帮助各位!!!! 📃个人主页:rivencode的个人主页 🔥系列专栏:《C语言入门必刷百题》 &#x…

计算机毕业设计ssm+vue+elementUI高校志愿者服务招募网站

项目介绍 随着我国教育制度的改革和社会的进步,越来越多的人希望加入志愿者这个行列从而贡献自己的一份爱。加入志愿者不仅能够更好的锻炼自己,也可以帮助那些需要帮助的人,从而让社会变的更加温暖和美好,尤其是对比较发达的地区…

基于matlab创建基于物理统计的雷达模型(附源码)

目录 一、前言 二、、定义场景 三、定义用于检测生成的雷达 四、生成统计雷达检测 五、定义用于 IQ 信号生成和处理的雷达 六、IQ 信号和处理仿真 七、总结 八、程序 一、前言 此示例演示如何以编程方式从统计雷达模型创建基于物理的雷达模型。 雷达是一种感知系统&…

Zookeeper的功能简介

1.ZooKeeper是什么? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终&#xff…

超神之路 数据结构 2 —— Queue队列实现和循环队列和普通队列的性能比较

接上一篇继续往下挖,在上一篇,我们实现了一个属于自己的动态数组。利用这个动态数组,我们来实现一个基于动态数组,一个属于自己的普通队列Queue。 Queue 是一种它许我们从表的一段进行删除,表的另一端进行插入的线性表…

Docker—苹果Mac安装Docker的两种方式

文章目录Docker简介方式一:官网dmg安装方式二:homebrew安装前置条件brew安装docker关注微信公众号:CodingTechWork,一起学习进步。Docker简介 &emsp docker就是集镜像、容器和仓库三个概念于一身的集装箱,应用于…

GPO:组策略与系统配置

1、所有的服务器不需要按ctrl+alt+del交互式登录; 2、关闭所有机器的睡眠功能 3、所有计算机都不允许登录Microsoft账户; 4、允许IT组进行系统时间修改 5、设定所有职务为managers的用户为本地管理员,除了域控制器 GPO:组策略与系统配置 所有的服务器不需要按ctrl+alt+del;…

基于ELK搭建的本地社工库

简介 ELK原本是一个开源实时日志分析平台。 ELK是三个开源软件的缩写,分别为:Elasticsearch 、 Logstash以及Kibana 。目前又新增了一个Beats,是一个轻量级的日志收集处理工具,Beats占用资源少,适合于在各个服务器上…

Greenplum GPKafka【实践 01】使用GPKafka实现Kafka数据导入Greenplum数据库踩坑问题记录(不断更新ing)

1.说明 Kafka 是分布式消息订阅系统,有非常好的横向扩展性,可实时存储海量数据,是很常用的流数据处理中间件。物联网设备采集的数据很多时候就是通过 Kafka 进行处理的。当 Kafka 数据要入库分布式数据库 Greenplum 时,我们就需要…

二、IAR新建一个工程

之前录制了无线传感网综合项目实战课程,这个课程非常适合应届毕业生和想转行Linux的朋友,用来增加项目经验。 其中一部分内容是关于CC2530zigbee的知识,后面会更新几篇关于cc2530的文章,敬请关注! 下面是该系列文章链…

gcc 好玩的 builtin 函数

gcc 好玩的 builtin 函数 前言 在本篇文章当中主要想给大家介绍一些在 gcc 编译器当中给我们提供的一些好玩的内嵌函数 (builtin function)🤣🤣🤣 。 __builtin_frame_address 使用内嵌函数实现 __builtin_frame_address(x) // 其中 x 一…