FFM算法 Python实现

FFM算法 Python实现本算法是CTR中的系列算法之一,具体的原理就不说了。网上其他的博客一大堆。都是互相抄来抄去,写上去之后容易让人误会。因此我只传上代码实现部分。大家做个参考。这里我们的FFM算法是基于Tensorflow实现的。为什么用Tensorflow呢?观察二次项,由于field的引入,Vffm需要计算的参数有nfk个,远多于FM模型的nk个,而且由于每次计算都依赖于乘以的xj的field,所以…

大家好,又见面了,我是你们的朋友全栈君。

本算法是CTR中的系列算法之一,具体的原理就不说了。网上其他的博客一大堆。都是互相抄来抄去,写上去之后容易让人误会。因此我只传上代码实现部分。大家做个参考。

这里我们的FFM算法是基于Tensorflow实现的。

为什么用Tensorflow呢?观察二次项,由于field的引入,Vffm需要计算的参数有 nfk 个,远多于FM模型的 nk个,而且由于每次计算都依赖于乘以的xj的field,所以,无法用fm的计算技巧(ab = 1/2(a+b)^2-a^2-b^2),所以计算复杂度是 O(n^2)。

因此使用Tensorflow的目的是想通过GPU进行计算。同时这也给我们提供了一个思路:如果模型的计算复杂度较高,当不能使用CPU快速完成模型训练时,可以考虑使用GPU计算。比如Xgboost是已经封装好可以用在GPU上的算法库,而那些没有GPU版本的封装算法库时,例如我们此次采用的FFM算法,我们可以借助Tensorflow的GPU版本框架设计算法,并完成模型训练。

代码主要分三部分:

build_data.py

主要是完成对原始数据的转化。主要包括构造特征值对应field的字典。

FFM.py

主要包括线性部分及非线性部分的代码实现。

tools.py

主要包括训练集的构造。

这里我们主要分析 FFM.py,也就是模型的构建过程:

首先初始化一些参数,包括:

  • k:隐向量长度
  • f :field个数
  • p:特征值个数
  • 学习率大小
  • 批训练大小
  • 正则化
  • 模型保存位置等

代码如下图所示:

FFM算法 Python实现

然后,构造了一个model类,主要存放:

  • 初始化的一些参数
  • 模型结构
  • 模型训练op(参数更新)
  • 预测op
  • 模型保存以及载入的op

代码如下图所示:

FFM算法 Python实现

之后,对模型构造部分代码进行分析,可发现模型由两部分组成,第一部分是下图红框内容,其实就是线性表达式 w^Tx+b,其中:

  • b shape(None,1)
  • x shape (batch_size,p)
  • w1 shape(p,1)    注:p为特征值个数

定义变量及初始化后,就可以构造线性模型,代码如下图所示:

FFM算法 Python实现

然后,定义一个Vffm变量用来存放交叉项的权重,并初始化。因为我们已经了解到Vffm是一个三维向量,所以,v :shape(p,f,k) 。

之后是vi,fj、vj,fi的构造。因为v 有p行,代表共有p个特征值,所以vifj = v[i, feature2field[j]],说人话就是第i个特征值在第j个特征值对应的field上的隐向量。

vjfi 的构造方法类似,所以vivj就可以求出来.然后就是把交叉项累加,然后 reshape 成(batch_size,1)的形状,以便与线性模型进行矩阵加法计算。

代码如下图所示:

FFM算法 Python实现

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/131719.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 终极对决!Dubbo 和 Spring Cloud 微服务架构到底孰优孰劣?「建议收藏」

    终极对决!Dubbo 和 Spring Cloud 微服务架构到底孰优孰劣?「建议收藏」前言核心部件1总体架构2微服务架构核心要素通讯协议1支持协议2性能比较服务依赖方式组件运行流程微服务架构组成以及注意事项1架构分解2注意事项总结前言微服务架构是互联网很热门的话题,是互联网技术发展的必然结果。它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。虽然微服务架构没有公认的技术标准和规范或者草案,但业界已经有一些很有影

  • a4如何打印双面小册子需要排页码吗_a4纸如何打印四版的小册子

    a4如何打印双面小册子需要排页码吗_a4纸如何打印四版的小册子我来告诉你!!你手上这种册子的装订方式是骑马订!这种装订方式在adobepdf里面用拼版插件拼版非常快,不过非专业人士都不会用!有的打印机的打印驱动页面里面也有小册子打印的方式,可以直接打印出来!重点来了,以上的方法你都用不了的话,就只能用最费事的方法了!在word或者wps里面一张一张的排!1.页面数,骑马订册子的页面数必须是4的倍数,不够的话就得加空白页,空白页最好加在封二或者封三(封面…

  • idea插件安装和推荐插件

    idea插件安装和推荐插件idea安装lombok插件打开settings,进入插件页面,搜索lombok,安装安装完成先别重启,执行下图后重启

  • 蓝桥杯历年真题及详细解答

    蓝桥杯历年真题及详细解答这里是蓝桥杯历年的题目汇总,后面将会陆续更新将往年真题以及解答发布出来,目前先更新C语言B组的,欢迎各位小伙伴关注我吖,你们的关注就是给我最好的动力!!!蓝桥杯历年省赛真题Java语言A组省赛真题Java语言B组省赛真题C语言A组省赛真题C语言B组省赛真题Java语言A组省赛真题2012第三届JavaA组蓝桥杯省赛真题2013第四届JavaA组蓝桥杯省赛真题2014第五届JavaA组蓝桥杯省赛真题2015第六届JavaA组蓝桥杯省赛真题2016第七届JavaA组蓝.

  • BM3D算法相关笔记

    BM3D算法相关笔记三维矩阵主要原因就在于,三维矩阵中,第一维度代表行,第二维度代表列,第三维度代表页,当第三维度为1时,代表只有1页,自然缩减为二维。当第一维度为1时,代表只有一行,但是每页都有,所以,从物理的角度没有缩减为二维。http://blog.sina.com.cn/s/blog_7519cf530101ahsb.html

  • python udp发送数据(http视频传输)

    一、前言最近想写一个实时的视频传输程序,然后上网找了很久没有找到合适的我想用OpenCV进行图像采集,然后用pygame将视频信号转化为可通过UDP网络传输的字符流,然后到达终端后再通过pygame对字符流进行解析,进而将图像显示出来之所以使用UDP传输而不是TCP传输,是因为UDP在视频传输方面拥有快速、无需连接等优点,适合密集传送大量信息的场合但UDP传输有一个问题,…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号