《Learning Piece-wise Linear Models from Large Scale Data for Ad Click Prediction》阿里媽媽MLR模型與python代碼

MLR 模型可以用於點擊率CTR預估(二分類)。

可以先看一下原文下載地址 https://arxiv.org/pdf/1704.05194.pdf

數學模型寫成了如下形式:
在這裏插入圖片描述
文中,σ(x)σ(x)採用Softmax函數,η(x)η(x)採用sigmoid函數,同時,g(x)=xg(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])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章