推荐系统——GBDT+LR

[[逻辑回归模型]]

逻辑回归是在[[线性回归]]的基础上添加了一个Sigmoid函数(非线形)映射,从而可以使逻辑回归成为一个优秀的分类算法
逻辑回归假设数据服从[[伯努利分布]],通过[[极大化似然函数]]的方法,运用[[梯度下降]]来求解参数,来达到将数据二分类的目的。
相比于[[协同过滤]]和[[矩阵分解]]利用用户的物品“相似度”进行推荐,LR将问题看成一个分类问题,通过预测正样本的概率对物品进行排序,因此逻辑回归模型将推荐问题转化成了一个点击率预估问题。

逻辑回归做推荐的步骤

  1. 将用户年龄、性别、物品属性、物品描述、当前时间、当前地点等特征转成数值向量
  2. 确定逻辑回归的优化目标,比如把点击率预测转换成二分类问题,这样就可以得到分类问题常用的损失作为目标,训练模型
  3. 在预测的时候,将特征向量输入模型产生预测,得到用户“点击”物品的概率
  4. 利用点击概率对候选物品排序,得到推荐列表

![[Pasted image 20201030171926.png]]

对于LR模型而言,主要关键为求出每个特征的权重参数www,一般是使用梯度下降的方式

优点:

  1. LR模型形式简单,可解释性好,从特征的权重可以看到不同的特征可以看到不同的特征对最后结果的影响
  2. 训练时便于并行化,在预测时只需要对特征进行线性加权,所以性能比较好,适合处理海量id类特征,且使用id类特征有一个很重要的好处,即防止信息损失(相对于范化的CTR特征),对于头部资源会有更细致的描述
  3. 资源占用少尤其内存,在实际的工程应用中只需要存储权重比较大的特征及特征对应的权重
  4. 方便对输出结果调整。LR可以方便的得到最后的分类结果,因为输出的是每个样本的概率分数,我们可以很容易的对这个概率分数进行阈值的划分。

缺点:

  1. 无法进行特征交叉得到更多信息
  2. 准确率并不是很高
  3. 处理非线性数据比较麻烦,LR在不引入其他方法的情况下,只能处理线性可分的数据,如果想处理非线性,首先需要对连续特征的处理进行离散化
  4. LR需要进行人工特征组合

所以如何自动发现有效的特征、特征组合,弥补人工经验不足,缩短LR特征实验周期,可以交由[[GBDT]]来做,它可以自动发现特征并进行有效组合

[[GBDT]]模型

GBDT名为梯度提升树,是传统机器学习中对真实分布拟合最好的几种算法之一
GBDT通过采用加法模型(即基函数的线性组合),以及不断减小训练过程产生的误差来达到将数据分类或者回归的算法。
GBDT每轮产生一个弱分类器,每个分类器在上一轮分类器的残差基础上进行训练。GBDT对弱分类器的要求只要求足够简单,并且地方低方差高偏差(欠拟合)。由此,每个分类回归树的深度不会很深,最终的总分类器是将每轮训练得到的弱分类器加权求和得到。
GBDT来解决二分类和回归问题的本质一样,都是通过不断构建[[决策树]],使预测结果一步步接近目标值。
GBDT在回归问题上一般使用平方损失,而在二分类问题中,GBDT和逻辑回归一样,使用交叉熵

构建分类GBDT的过程:

  1. 初始化GBDT
    分类GBDT的初始状态只有一个叶子节点,该节点为所有样本的初始预测值:F0(x)=argmin⁡γ∑i=1nL(y,γ)F_0(x) = arg \min_{\gamma} \sum_{i=1}^n L(y, \gamma)F0(x)=argγmini=1nL(y,γ)
    其中,FFF代表GBDT模型,F0F_0F0是模型的初识状态,该式子的意思是找一个γ\gammaγ,使所有的样本的LossLossLoss最小,而γ\gammaγ表示节点的输出,即叶子节点,是一个log(ηi)log(\eta_i)log(ηi)形式的回归值,在初始状态,γ=F0\gamma = F_0γ=F0

    具体例子可以参考学习资料中例子P59

    GBDT的优缺点:
    对于GBDT而言,生成树的过程实际上就是自动进行多维度的特征组合的过程,从根节点到叶子节点上的整个路径(多个特征值判断),才能最终决定一棵树的预测值,另外,对于连续型特征的处理,GBDT可以拆分出一个临界阈值。
    而GBDT对于海量的id类特征,GBDT由于树的深度和树的数量限制(防止过拟合),不能有效存储;另外海量特征也会存在性能瓶颈,当GBDT的one hot特征大于100k维时,需要做分布式训练才能保证不爆内存,因此,GBDT通常配合少量的反馈CTR特征来表达,在带来一定范化能力的同时会有信息损失,对于头部资源无法有效表达。
    因此提出GBDT+LR

    GBDT+LR

    GBDT+LR:先利用GBDT进行特征筛选和组合进而生成新的离散特征向量,再把该特征向量当作LR模型的输入,来产生的最后的预测结果。
    在这里插入图片描述

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

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

相关文章

从燃尽图看项目管理:你的项目哪里出错了?(燃尽图类型全解析)

什么是燃尽图 燃尽图(burn down chart)是在项目完成之前,对需要完成的工作任务的一种可视化表示。理想情况下,该图表是一个向下的曲线,随着项目任务的逐渐完成“烧尽”至零。 燃尽图常常用于敏捷开发中,作为…

springtboot 引用子工程的文件_xmake从入门到精通11:如何组织构建大型工程

xmake是一个基于Lua的轻量级现代化c/c的项目构建工具,主要特点是:语法简单易上手,提供更加可读的项目维护,实现跨平台行为一致的构建体验。本文主要详细讲解下,如何通过配置子工程模块,来组织构建一个大规模…

bzoj 1024 [SCOI2009]生日快乐——模拟

题目&#xff1a;https://www.lydsy.com/JudgeOnline/problem.php?id1024 可以枚举这边放多少块、那边放多少块。 注意精度。不要每次用x*y/base算有多少块&#xff0c;传参较好。 #include<iostream> #include<cstdio> #include<cstring> #include<algo…

依赖项出现感叹号怎么办_SpringBoot中如何对依赖进行管理?

SpringBoot中的起步依赖(starter)是一组特定功能的依赖项集合&#xff0c;SpringBoot通过starter来进行项目的依赖管理&#xff0c;而不是直接基于单独的依赖项来进行依赖管理。starter其实就是特殊的Maven依赖项或者Gradle依赖项&#xff0c;它把常用的库组合到一起构成了一个…

5g理论速度_5G是什么?5G速度有多快?

原标题&#xff1a;5G是什么&#xff1f;5G速度有多快&#xff1f;5G到底是什么东西&#xff1f;今年5G网络会普及吗&#xff1f;5G网速到底有多快&#xff0c;背后又有哪些黑科技&#xff1f;近日&#xff0c;全球首个5G火车站在上海虹桥火车站启动建设。而根据三大运营商的时…

c++ new一个结构体_「C/C++」构造类型及应用:数组、结构体、共用体、枚举类型...

3.1数组同类型、同性质、按顺序存放的一组数据集合&#xff0c;易于批量处理。3.1.1一维数组定义int 1.数组名为常量&#xff0c;指向首地址&#xff0c;由系统指定。2.数组长度为整型常量,但不能为03.上例取值image[0]-image[255]&#xff0c;取值可以修改。初始化int 输入for…

FFT学习笔记

搬运一下之前在luogu blog写的。 参考http://picks.logdown.com/posts/177631-fast-fourier-transform 废话不写了。首先补零将多项式项数补为2的整数次幂。下标均从0开始。 DFT&#xff08;递归版&#xff09; 将系数表示转为点值表示。设项数为n&#xff0c;即求多项式将所有…

自动产生fsm代码的工具_代码自动生成工具

构建支持多种数据库类型的代码自动生成工具背景&#xff1a;一般的业务代码中写来写去&#xff0c;无外乎是先建好model&#xff0c;然后针对这个model做些CRUD的操作。(主要针对单表的业务操作)针对于数据库dao、mapper等的代码自动生成已经有了mybatisGenerator这种工具&…

gtest测试框架使用详解_测试框架TestNG使用介绍

近期接触到了一个比较全面的基于Java的接口自动化测试框架&#xff0c;作为一名Java小白&#xff0c;所以打算研究一下&#xff0c;顺带学习学习Java&#xff0c;该测试框架的逻辑控制层使用的HttpClient TestNG。在本期中&#xff0c;给大家分享一下TestNG测试框架的基础知识…

同期收治患者住院天数_(完整版)DDD值算法

有关DDD 值的计算问题根据卫生部开展的《抗菌药物临床应用专项整治活动实施方案》要求&#xff0c;抗菌药物使用强度应控制在40DDD 以下。抗菌药物使用强度&#xff0c;即限定日剂量(defined daily doses &#xff0c;DDD )&#xff0c;为药物主要适应症以成人每日常用剂量作为…

LOJ#6282. 数列分块入门 6

一个动态的插入过程&#xff0c;还需要带有查询操作。 我可以把区间先分块&#xff0c;然后每个块块用vector来维护它的插入和查询操作&#xff0c;但是如果我现在这个块里的vector太大了&#xff0c;我可能的操作会变的太大&#xff0c;所以这时候我需要把现在里面的数全部拿出…

fragment在activity中的静态和动态用法_使用Matlab修改压缩Gif动态图片制作微信表情...

脚本之家你与百万开发者在一起作者&#xff1a;theOwlAndPussyCat/焦旭光引言电脑里存了很多有意思的Gif动态图片&#xff0c;闲暇想把这些动图全导入微信表情&#xff0c;可是这些动图很多大小超过了微信表情大小1MB的限制&#xff0c;要制作成表情只能压缩图像文件大小。网上…

mysql命令_MySQL常用操作命令

MySQL常用操作命令PHP独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。欢迎大家阅读&#xff01;更多相关信息请关注相关栏目&#xff01;1、启动MySQL服务器实际上上篇已讲到如何启动MySQL。两种方法&#xff1a;一是用winmysqlad…

The 2018 ACM-ICPC上海大都会赛 J Beautiful Numbers (数位DP)

题意&#xff1a;求小于等于N且能被自己所有位上数之和整除的数的个数。 分析&#xff1a;裸的数位dp。用一个三位数组dp[i][j][k]记录&#xff1a;第i位&#xff0c;之前数位之和为j&#xff0c;对某个mod余数为k的状态下满足条件的个数。这里mod的值就是小于等于N的数中&…

mysql定时增量备份_Mysql日常自动备份和增量备份脚本

序你是否在寻找一个MySQL备份脚本?适合对象本文是在Linux下,mysql 4.1.14版本下测试的,经过适当修改可能适合mysql 4.0,5.0及其其他版本.本文适合于没有启动复制功能的mysql,如果启动了复制,可能不需要采取这种备份策略或者需要修改相关参数.每个人的备份策略都可能不同,所以请…

frontcon函数用不了_C++复制构造函数与析构函数

想用机器人赋能未来&#xff0c;少不了扎实的编程的基本功&#xff0c;让我们跟着清华大学的C语言程序设计课程一起过一遍C的语法知识吧&#xff01;当定义基本类型的变量时&#xff0c;经常会用已有的变量去初始化新定义的变量&#xff0c;当定义对象的时候也有类似的需求&…

在京东上买的手机然后申请退货的经历

在京东上买的手机&#xff0c;是支持7天无理由退货的类型的。试用了一下感觉不是太喜欢&#xff0c;就选择退货了。 具体情况如下&#xff1a;先在网上填申请&#xff0c;然后等电话通知什么时候把手机给负责人&#xff0c;给过负责人之后&#xff0c;负责人先检查外观等是否符…

mysql tungsten_使用tungsten将mysql的数据同步到hadoop

背景线上有很多的数据库在运行&#xff0c;后台需要一个分析用户行为的数据仓库。目前比较流行的是mysql和hadoop平台。现在的问题是&#xff0c;如何将线上的mysql数据实时的同步到hadoop中&#xff0c;以供分析。这篇文章就是利用tungsten-replicator来实现。环境由于tungste…

软件项目立项书_2019年度上海市软件和集成电路产业发展专项资金项目立项

上海艾瑞德生物科技有限公司荣获2019年上海市软件和集成电路产业发展专项资金(集成电路和电子信息制造领域)项目立项&#xff01;上海艾瑞德生物科技有限公司的【医用体外诊断动态光场图像采集电子模块的研发及产业化】喜获2019年上海市软件和集成电路产业发展专项资金(集成电路…

line-height:1.5和line-height:150%的区别

1. 给你个数&#xff0c;孩子自己算吧 line-height:1.5 父元素设置line-height:1.5会直接继承给子元素&#xff0c;子元素根据自己的font-size再去计算子元素自己的line-height。 2.老子说多大就是多大 line-height:150% 父元素设置line-height:150%是计算好了line-height值&…