• DeepCTR:易用可扩展的深度学习点击率预测算法包


    这个项目主要是对目前的一些基于深度学习的点击率预测算法进行了实现,如PNN,WDL,DeepFM,MLR,DeepCross,AFM,NFM,DIN,DIEN,xDeepFM,AutoInt等,并且对外提供了一致的调用接口。 关于每种算法的介绍这里就不细说了,大家可以看论文,看知乎,看博客,讲的都很清楚。

    DeepCTR的设计主要是面向那些对深度学习以及CTR预测算法感兴趣的同学,使他们可以利用这个包:

    1. 从一个统一视角来看待各个模型
    2. 快速地进行简单的对比实验
    3. 利用已有的组件快速构建新的模型

    统一视角

    DeepCTR通过对现有的基于深度学习的点击率预测模型的结构进行抽象总结,在设计过程中采用模块化的思路,各个模块自身具有高复用性,各个模块之间互相独立。 基于深度学习的点击率预测模型按模型内部组件的功能可以划分成以下4个模块:输入模块,嵌入模块,特征提取模块,预测输出模块。

    快速实验

    下面是一个简单的用DeepFM模型在criteo数据集上训练的的例子。

    1. import pandas as pd
    2. from sklearn.metrics import log_loss, roc_auc_score
    3. from sklearn.model_selection import train_test_split
    4. from sklearn.preprocessing import LabelEncoder, MinMaxScaler
    5. from deepctr.models import DeepFM
    6. from deepctr.feature_column import SparseFeat, DenseFeat, get_feature_names
    7. if __name__ == "__main__":
    8. data = pd.read_csv('./criteo_sample.txt')
    9. sparse_features = ['C' + str(i) for i in range(1, 27)]
    10. dense_features = ['I' + str(i) for i in range(1, 14)]
    11. data[sparse_features] = data[sparse_features].fillna('-1', )
    12. data[dense_features] = data[dense_features].fillna(0, )
    13. target = ['label']
    14. # 1.Label Encoding for sparse features,and do simple Transformation for dense features
    15. for feat in sparse_features:
    16. lbe = LabelEncoder()
    17. data[feat] = lbe.fit_transform(data[feat])
    18. mms = MinMaxScaler(feature_range=(0, 1))
    19. data[dense_features] = mms.fit_transform(data[dense_features])
    20. # 2.count #unique features for each sparse field,and record dense feature field name
    21. fixlen_feature_columns = [SparseFeat(feat, vocabulary_size=data[feat].nunique(),embedding_dim=4 )
    22. for i,feat in enumerate(sparse_features)] + [DenseFeat(feat, 1,)
    23. for feat in dense_features]
    24. dnn_feature_columns = fixlen_feature_columns
    25. linear_feature_columns = fixlen_feature_columns
    26. feature_names = get_feature_names(linear_feature_columns + dnn_feature_columns)
    27. # 3.generate input data for model
    28. train, test = train_test_split(data, test_size=0.2, random_state=2018)
    29. train_model_input = {name:train[name] for name in feature_names}
    30. test_model_input = {name:test[name] for name in feature_names}
    31. # 4.Define Model,train,predict and evaluate
    32. model = DeepFM(linear_feature_columns, dnn_feature_columns, task='binary')
    33. model.compile("adam", "binary_crossentropy",
    34. metrics=['binary_crossentropy'], )
    35. history = model.fit(train_model_input, train[target].values,
    36. batch_size=256, epochs=10, verbose=2, validation_split=0.2, )
    37. pred_ans = model.predict(test_model_input, batch_size=256)
    38. print("test LogLoss", round(log_loss(test[target].values, pred_ans), 4))
    39. print("test AUC", round(roc_auc_score(test[target].values, pred_ans), 4))

    快速构建新模型

    所有的模型都是严格按照4个模块进行搭建的,输入和嵌入以及输出基本都是公用的,每个模型的差异之处主要在特征提取部分。
    下面是DeepFM模型的特征提取核心代码,大家也可以利用这些已有的组件去构建自己想要的模型。

    1. fm_input = Concatenate(axis=1)(embed_list)#将输入拼接成FM层需要的shape
    2. deep_input = Flatten()(fm_input)#将输入拼接成Deep网络需要的shape
    3. fm_out = FM()(fm_input)#调用FM组件
    4. deep_out = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout,dnn_use_bn, seed)(deep_input)#调用Deep网络组件
    5. deep_logit = Dense(1, use_bias=False, activation=None)(deep_out)

    如何使用呢!?

    首先可以通过一下命令进行安装~

    1. pip install deepctr[cpu]#CPU版本
    2. pip install deepctr[gpu]#GPU版本

     DeepCTR:易用可扩展的深度学习点击率预测算法包 - 知乎

  • 相关阅读:
    spring framework 5.2 文档 - 概述
    [C++]:1.初识C++和C语言缺陷补充。
    【linux】linux实操篇之权限管理
    基于JAVA校园二手交易平台计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    振弦式测缝(位移)计表面裂缝监测
    模型推理后处理C++代码优化案例
    个人健康|个人健康管理小程序|基于微信小程序的个人健康管理系统设计与实现(源码+数据库+文档)
    因果推断 | 双重差分法笔记补充
    单调栈题目:移掉 K 位数字
    Spring Cloud OpenFeign系列:简介和使用
  • 原文地址:https://blog.csdn.net/u013250861/article/details/127915544