推荐算法工程师入坑第三课

这个博客主要用来记录自己毕业后入职的第一份工作的填坑经历,也想因此设立一个专栏记录未来自己的发展历程。希望能与和自己一样奋斗在算法一线的研发猿们或者努力进坑的童鞋们一起分享自己的成长经历

  • 以后这篇博客主要和大家分享自己的学习过程和踩过的各种坑。

最近感受

入职已经将近20天,大概了解了自己的部门职责,以及未来的一个工作方向。也有了很多体会:

  1. 学校是交学费去学习的,可以随便支配自己的学习时间,很多知识都可以自己系统的学习。企业是花钱请你来创造价值,所以没有让你系统的学习知识的时间,而且要学的东西太多了,所以要用到什么学什么。这是学生到职员转变的第一个槛,东西太多要针对性的学。当你认为有必要系统学,只能靠业余时间了
  2. 项目拿过来,不要着急看,要找熟悉的人或者自己将整个项目的目的、流程、大概背景先了解清楚,这无论对工作还是学习都是适用的,这里作者比较爱使用MindNode来制作思维流程图,特别方便整理思路和以后复习
  3. 学会利用一些记笔记软件(e.g. 印象笔记、oneNote、有道云笔记),公司中学习的事情太多了,有时候还会很杂,所以一定要做好整理,做好笔记,特别是整理时多级目录的问题,一定要细分,到时候也方便查找(作者以前用的时候,就有点乱,就不好找以前的文件,所以特意花了个周末去整理,舒服多了)。效率提高必备

学习内容

不得不说,每天学习的东西真的很多,很多都是学校中没有接触过的,零零散散的也很难做一个系统的总结,不过还是准备将一些小知识,做些个总结,方便其他和我一样的入门菜鸟,也可以加快入坑的时间

  1. Scala语言学习教程,比较类似于java语言。教程链接
  2. Spark-SQL之DataFrame;DataFrame类似于一张关系行数据表,我们会常用Spark-SQL来操作DataFrame,同时也可以以其他RDD对象、parquet文件、json文件、hive表等通过JBDC连接到其他关系型数据库作为数据源来生成DataFrame。Spark-SQL之DataFrame操作
  3. Spark RDD操作小结
  4. 利用服务器跑scala相关脚本代码,难免会jar包,有时候用原生的jar命令生成,总是会有些莫名的小错误,可以利用IDEA的sbt项目,来生成jar包
  5. Hadoop fs 常用命令 and 详细
  6. Spark-submit 相关参数和介绍
  7. Git命令的相关学习
  8. mac 用户必备:mentor作为资深程序员的良心推荐 TMUXVimplus以及iTerm2+schemes主题包,可以瞬间让你的shell看起来特别舒服
    -> iTerm2 打造舒适的终端体验
    -> Mac下iterm2配色方案(高亮)及显示分支,让你的终端与众不同
    -> 进阶vim,你的vimplus 必不可少
    -> TMUX:它最直观的好处就是, 通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“浪费”多余的终端来连接这台远程主机, 还有一个好处就是当终端关闭后该shell里面运行的任务进程也会随之中断,通过使用tmux就能很容易的解决这个问题。TMUX命令介绍
    -> grep 命令:在task中常常会查看log日志中的某些特定的内容,而grep的作用就是匹配文件中的指定内容,并打印出来相关命令
    -> yarn为一种hadoop的资源管理器,可以用来查看现有应用的使用情况,例如yarn application -list来查看当前的应用列表,yarn application相关命令

相关算法模型

相关背景:CTR预估
模型学习:FM模型 (因式分解机)
推荐系统框架:请求->召回->海选->粗排->精排->重排->策略机制 【召回+排序

  • 相关概念

  1. CTR(click-through rate)点击率:既然要讲的CTR预估模型,点击率就是最关键的了。而CTR预估模型就是为了预测特定场景(例如,feed流的相关短视频推荐)的点击率可能性。CTR的计算公式为:点击数目/展示数目。
  2. CVR(conversion rate)转化率:发生消费行为的数目/展示的数目
  • 工业中常用的估计CTR、CVR的模型

  1. 人工特征 + LR
  2. GBDT + LR
  3. FM模型
  4. FM + 深度学习(e.g DeepFM、Wide & Deep )

提供个相关链接

  • FM模型

FM最早由 Steffen Rendle 在2010年提出。该模型主要通过特征组合来解决大规模稀疏数据的分类问题,属于传统方法中的feature-based方法。在实际的CTR任务中,大量的特征都是categorical类型的。我们通常要对特征进行One-Hot Encoding处理。转换之后维度变得超大,特征矩阵也变得极其地稀疏。
之前线性模型的缺点:

  1. 一般来说一个特征可能有很多类别,而利用one-hot编码时,很多值可能都为0值,导致特征非常稀疏。而这种特征对于传统的线性模型的预测或产生负面效果,导致预测结果较差。
  2. 由于特征维度的加大,使得模型的训练量加大,训练变得困难
  3. 此外,传统模型也没有考虑特征之间的相互关联

在这里插入图片描述
FM很像在学习每一个经过one-hot encoding转化的特征的embedding,然后学习不同特征之间的embedding相似度对于最后预测结果的影响。由于可以将很大量的稀疏特征压缩到几百维的embedding向量,极大地减少了模型的参数量级,从而能获取较强的模型泛化能力,取得较好的预测效果。

  • LR -> SVM -> FM

早期推荐系统或计算广告CTR中,工业界都采用LR+人工特征工程的方式进行预测。LR模型简单,解释性强且易于扩展。但使用LR就需要大量的人工特征工程,非常耗时且人工密集。因此就产生了模型自身进行特征组合的需求。
多项式模型是包含特征组合最直观的模型。这个二阶特征组合相当于SVM的多项式核。在多项式模型中,特征 x i x_i xi x j x_j xj的组合采用 x i x j x_ix_j xixj表示,即 x i x_i xi x j x_j xj都非零时,组合特征 x i x j x_ix_j xixj才有意义。
在这里插入图片描述
n n n代表样本的特征数量, x i x_i xi 是第 i i i 个特征的值, w 0 w_0 w0, w i w_i wi , w i j w_ij wij是模型的参数。从上式可以看出,组合特征的参数共有 n ( n − 1 ) / 2 n(n-1)/2 n(n1)/2个,任意两个参数都是独立的。然而,在数据稀疏性普遍存在的实际应用场景中,二次项参数的训练是很困难的。其原因是,每个参数 w i j w_ij wij的训练需要大量 x i x_i xi x j x_j xj 都非零的样本;由于样本数据本来就比较稀疏,满足“ x i x_i xi x j x_j xj 都非零”的样本将会非常少。训练样本的不足,很容易导致参数 w i j w_ij wij不准确,泛化能力很差,最终将严重影响模型的性能。

FM模型此刻亮相。FM也引入了任意两个特征的二阶特征组合。但与SVM模型最显著的差异在于特征组合权重的计算方法上。对于每一个特征,FM学习了一个大小为k的一维向量,使得两两特征 x i x_i xi x j x_j xj 的特征组合的权重由对应特征的内积表示。这与embedding的思路就非常相似了。因此FM可以看做一种embedding方法,实际上它只是缺少几层MLP的加持。

在这里插入图片描述

那为什么FM能很好地处理稀疏数据,泛化能力强呢?举个例子,比如在SVM中,假如 x i x_i xi x j x_j xj从来没有一起出现过, w i j w_ij wij就不能被学习出来,就一直是0。但是在FM中,要学习的是单个特征的embedding,并不依赖与谁是否同时出现过,可以自己学习对应的embedding值。这样,即使在train set里 x i x_i xi x j x_j xj 没同时出现过,在预测时你依然可以对 x i x_i xi x j x_j xj 这个特征组合进行预测,因为他们都各自有各自的embedding值。这就是FM泛化能力的来源。

相关参考

  • 相关的所有参考已经在文中的超链接中,大家可以点击进行详细了解
基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值