推荐算法学习笔记之DeepCrossing

DeepCrossing简介DeepCrossing于2016年由微软提出,主要应用于Bing搜索引擎中搜索广告推荐场景,用户在搜索引擎中输入搜索词后,搜索引擎除返回相关结果,还返回搜索词相应的广告,预测广告点击率(Click Through Rate),并以此作为排序指标,是该模型的优化目标,下图为DeepCrossing的模型结构:Layers及其各自的作用我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
摘要由CSDN通过智能技术生成

DeepCrossing简介

DeepCrossing于2016年由微软提出,主要应用于Bing搜索引擎中搜索广告推荐场景,用户在搜索引擎中输入搜索词后,搜索引擎除返回相关结果,还返回搜索词相应的广告,预测广告点击率(Click Through Rate),并以此作为排序指标,是该模型的优化目标,下图为DeepCrossing的模型结构:
图1

Layers及其各自的作用

1.Embedding层

该层的作用是将稀疏的类别型特征(如上图中的Feature#1)转换成稠密的Embedding向量,#Feature2中的数值型特征由于维度足够小,所以不需要Embedding。

2.Staking层

Staking层也被称为连接(concatenate)层,其作用是将不同的Embedding特征与数值型特征进行拼接,形成新的包含全部特征的特征向量。

3.Multiple Residual Units层

该层主要结构为多层感知机(MLP),DeepCrossing采用了多层残差网络作为MLP的实现方案,使特征向量各个维度充分交叉组合、模型能抓取更多非线性特征,从而提高模型的表达能力。
残差单元(Residual Unit)

4.Scoring层

Scoring层作为输出层,目的是为了拟合优化目标,对于CTR预估模型,往往是一个二分类问题,因此采用逻辑回归来对点击进行预测

TensorFlow代码实操

数据集导入

数据集

if __name__ == "__main__":
    # 读取数据
    data = pd.read_csv('./data/criteo_sample.txt')

    # 划分dense和sparse特征
    columns = data.columns.values
    dense_features = [feat for feat in columns if 'I' in feat]
    sparse_features = [feat for feat in columns if 'C' in feat]

    # 简单的数据预处理
    train_data = data_process(data, dense_features, sparse_features)
    train_data['label'] = data['label']

    # 将特征做标记
    dnn_feature_columns = [SparseFeat(feat, vocabulary_size=data[feat].nunique(),embedding_dim=4)
                            for feat in sparse_features] + [DenseFeat(feat, 1,)
                            for feat in dense_features]

模型搭建

# 构建DeepCrossing模型
    history = DeepCrossing(dnn_feature_columns)

    history.summary()
    history.compile(optimizer="adam", 
                loss="binary_crossentropy", 
                metrics=["binary_crossentropy", tf.keras.metrics.AUC(name='auc')])

    # 将输入数据转化成字典的形式输入
    train_model_input = {
   name: data[name] for name in dense_features + sparse_features}
    # 模型训练
    history.fit(train_model_input, train_data['label'].values,
            batch_size=64, epochs=5, validation_split=0.2, )

完整代码

import warnings
warnings.filterwarnings("ignore")
import itertools
import pandas as pd
import numpy as np
from tqdm import tqdm
from collections import namedtuple

import tensorflow as tf
from tensorflow import keras 
from tensorflow.keras.layers import *
from tensorflow.keras.models import *

from sklearn.model_selection import<
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值