技术标签: CTR MLR python 推荐算法与Tensorflow 《Learning Piece-wise Linear Models 推荐算法
MLR 模型可以用于点击率CTR预估(二分类)。
可以先看一下原文下载地址 https://arxiv.org/pdf/1704.05194.pdf 。
数学模型写成了如下形式:
文中, σ ( x ) σ(x) σ(x)采用Softmax函数, η ( x ) η(x) η(x)采用sigmoid函数,同时, g ( x ) = x g(x)=x g(x)=x,那么上式可以转换成:
模型的损失函数为包含三部分:交叉熵损失,L2正则化,L1正则化。
代码部分如下:
import tensorflow as tf
from sklearn.metrics import roc_auc_score
from data import get_data
train_x,train_y,test_x,test_y = get_data()
import pandas as pd
x = tf.placeholder(tf.float32,shape=[None,108])
y = tf.placeholder(tf.float32,shape=[None])
m = 2
learning_rate = 0.3
# 计算Softmax部分
u = tf.Variable(tf.random_normal([108,m],0.0,0.5),name='u')
U = tf.matmul(x,u)
p1 = tf.nn.softmax(U)
# 计算sigmoid部分
w = tf.Variable(tf.random_normal([108,m],0.0,0.5),name='w')
W = tf.matmul(x,w)
p2 = tf.nn.sigmoid(W)
# 预测结果
pred = tf.reduce_sum(tf.multiply(p1,p2),1)
# 损失函数
cost1=tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=pred, labels=y))
cost=tf.add_n([cost1])
# 训练器,FtrlOptimizer作为优化器,可以给我们的损失函数加上正则项:
train_op = tf.train.FtrlOptimizer(learning_rate).minimize(cost)
"""
tf.train.FtrlOptimizer
更新方法主要用于广告点击预测,广告点击预测通常千万级别的维度,因此有巨量的稀疏权重.其主要特点是将接近0 的权重直接置0,
这样计算时可以直接跳过,从而简化计算.这个方法已经验证过在股票数据上较有效。
"""
result = []
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for epoch in range(0, 10000):
f_dict = {x: train_x, y: train_y}
_, cost_, predict_ = sess.run([train_op, cost, pred], feed_dict=f_dict)
auc = roc_auc_score(train_y, predict_)
if epoch % 100 == 0:
f_dict = {x: test_x, y: test_y}
_, cost_, predict_test = sess.run([train_op, cost, pred], feed_dict=f_dict)
test_auc = roc_auc_score(test_y, predict_test)
print("%d cost:%f,train_auc:%f,test_auc:%f" % (epoch, cost_, auc, test_auc))
result.append([epoch,auc,test_auc])
有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常方便的处理方式。一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄。如果不用with语句,代码如下:1 file = open("/tmp/foo.txt")2 data = file.read()3 file.close()这里有两个问...
通常而言,合理的代码注释应该占源代码的 1/3 左右。Python 语言允许在任何地方插入空字符或注释,但不能插入到标识符和字符串中间。python的注释是不会参与编码的,也就是说注释是不会被解释器解析的。在 Python 中,通常包括 3 种类型的注释,分别是单行注释、多行注释和中文编码声明注释。Python 中使用井号(‘#’)作为单行注释的符号,语法格式为:#注释内容也就是说,从符号‘#’...
引言之前已经介绍了如何搭建elasticsearch服务端和简单的索引创建,和中文分词的支持。今天我们来说一说如何实现elasticsearch同时实现中文分词和pinyin分词。并且实现类似百度搜索栏的搜索建议的功能。混合查询实现混合查询有很多方式,这里介绍我认为是一个偷懒的方法,就是为你要拼音搜索的字段提供两个额外的字段,一个是全拼字段,一个是首字母缩写字段。我这里用的是官网的Employee...
我想将谷歌广告添加到我的应用程序(这是我的第一次).我也添加了jar文件.这是xml.xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vert...
程序员的身体差,似乎已经是大家的共识。整天对着电脑不运动,长此以往导致各种疾病缠身。新闻里也时不时的报道些程序员加班猝死的新闻。本人虽然是程序员,但是还是比较热爱运动的。毕业后有4,5年了,每周还时不时的踢踢球、打打篮球。每天上下班都是骑自行车,来回有26公里。加上大学时候经常锻炼,身体底子还不错。只不过上班后吃的比以前好了,运动量也没以前大了,体重蹭蹭的往上涨,最重的时候已经达到了80kg。...
配置钩子文件自动更新开发环境提交更新至服务器时会出现每次在服务器端项目目录下必须手动更新SVN up才可以访问最新更新,通过钩子文件配置 则可以实现自动更新新建文件:vim /usr/local/svn/demo/hooks/post-commit添加如下文字:#!/bin/shexport LANG=en_US.UTF-8/usr/bin/svn update /var/www/html/dem...
折腾:期间,想要搞清楚:php-fpm.conf中的pm.max_children到底应该设置为多少因为:“错误三:资源耗尽LNMP 架构处理 php 时,是 nginx 直接调取后端的 php-fpm 服务,如果 nginx 的请求量偏高,而我们又没有给 php-fpm 配置足够的子进程,那么总有 php-fpm 资源耗尽的时候,一旦耗尽 nginx 则找不到 php-fpm,此时就会导致 50...
2019独角兽企业重金招聘Python工程师标准>>> ...
事务日志备份保留上次事务日志备份后发生的所有事务的痕迹;它还允许你把数据库恢复到数据库发生错误之前的一个时间点。事务日志备份按顺序发生,从而建立一个备份链。在把一连串事务日志备份恢复到一个时间点时,事务日志文件也必须按顺序恢复。当你使用一个数据库维护计划来建立事务日志备份时,事务日志文件名中往往包含一个时间指示器。下面的脚本使用NORECOVERY选项应用三个事务日志备份,最后一个语句把数据库恢复...
使用pm2启动静态文件服务器的方法如下:pm2 serve path portpm2 serve . 9001这样就可以把当前文件夹下的静态文件跑起来了,而且端口号是9001,同样也支持进阶的使用,如下pm2 serve . 9001 --name test --watch 这样就启动了一个名字为test,端口号为9001,且监听文件变化的静态文件服务器$ np...
server_list MODIFY COLUMN server_lip CHAR(25);报错信息:1 queries executed, 0 success, 1 errors, 0 warnings查询:alter table server_list modify column server_lip char(25)错误代码: 1833Cannot change column ‘server...
在上一篇文章中我们介绍了使用Adobe Illustrator制作SVG的操作流程,如果你按上面的步骤来创建SVG图像,现在你应该需要一种方法来将它导出为SVG文件。Adobe Illustrator对SVG有着非常好的支持。不论你使用的是什么版本的Illustrator,你只需要安装下面三个简单的步骤就可以导出为SVG文件。步骤1:保存文件将你的文件保存为.ai格式的文件。虽然Illustrat...