【deepctr】学习入门笔记01

了解

浅梦大神的这个写的还是就我而言 我觉得非常好了,非常值得操作一下
DeepCTR:易用可扩展的深度学习点击率预测算法包
首先下面两个链接是你最先需要了解的
github这个是这个包的开源代码(附数据集和例子)
知乎这个是包的中文解释和主要用法

github: link.
知乎: link.

准备工作

1.下载包

打开上述链接 找到红圈标记位置 点击 选择download zip
在这里插入图片描述下载完成,解压备用

2.导入pycharm

打开pycharm,选择file—>open…
在这里插入图片描述选择所在文件夹,点击OK
在这里插入图片描述导入后选择file -->setting

在这里插入图片描述点击下图下图深蓝色部分,右半部分添加自己的解释器
在这里插入图片描述

3.导入所需包

pycharm导入包不用cdm的话 有两种方式(仅代表我知道的本地的方法 (我也不确定python console那个位置可不可以))
见上篇文章: 链接.
重点讲一下那个deepctr包的下载,他不能用第一种方法直接下,但可以第二种方法下

在这里插入图片描述这里写完 pip install deepctr[cpu] 点击回车,等待下载

(我可是太小白了 这个位置我弄了两个点)

代码(例:run_classification_criteo.py)

里面有些自己的注解,我自己读着挺清晰,有问题欢迎一起探讨

导入所需包

import pandas as pd
from sklearn.metrics import log_loss, roc_auc_score
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, MinMaxScaler

from deepctr.models import DeepFM
from deepctr.feature_column import SparseFeat, DenseFeat, get_feature_names

数据预处理


if __name__ == "__main__":
    data = pd.read_csv('./criteo_sample.txt')
    # sparse-稀疏特征-c 稠密特征-i (列)
    sparse_features = ['C' + str(i) for i in range(1, 27)]
    dense_features = ['I' + str(i) for i in range(1, 14)]
    # 含有缺失值时 稀疏部分用-1代替  fataframe.fillna()------读出空值用‘数字’代替
    data[sparse_features] = data[sparse_features].fillna('-1', )
    data[dense_features] = data[dense_features].fillna(0, )
    target = ['label']

1.对稀疏特征进行标签编码,对稠密特征进行简单转换

  # feat稀疏特征 lbe标签? 特征吧 sklearn--(文本标签转化为数字)---转换器LabelEncoder()
  # .fit_transform() 训练转换后的文本会按照相同描述分到一个数字 (本方法只适合转换一列的文本数字,多列会报错,则用factorize())
  # MinMaxScaler( ) 自动归一化   feature_range=(0, 1) 要映射的区间
  # 对稀疏特征进行标签编码

  for feat in sparse_features:
      lbe = LabelEncoder()
      data[feat] = lbe.fit_transform(data[feat])
  # 对稠密特征进行简单转换
  mms = MinMaxScaler(feature_range=(0, 1))
  data[dense_features] = mms.fit_transform(data[dense_features])

2.计算每个稀疏字段的唯一特征数,并记录密集特征字段名称

    # linear_feature_columns 模型线性部分使用的所有特征的列表
    # dnn_feature_columns 模型深层部分使用的所有特征的列表
    # 计算每个特征中的不同特征值的个数 一阶+二阶
    fixlen_feature_columns = [SparseFeat(feat, vocabulary_size=data[feat].nunique(),embedding_dim=4 )
                           for i,feat in enumerate(sparse_features)] + [DenseFeat(feat, 1,)
                          for feat in dense_features]

    dnn_feature_columns = fixlen_feature_columns
    linear_feature_columns = fixlen_feature_columns

    feature_names = get_feature_names(linear_feature_columns + dnn_feature_columns)

3.为模型生成输入数据

    # 将数据集切分成训练集和测试集

    train, test = train_test_split(data, test_size=0.2, random_state=2020)
    train_model_input = {name:train[name] for name in feature_names}
    test_model_input = {name:test[name] for name in feature_names}

4.定义模型、培训、预测和评估

    #用deepfm进行训练
    model = DeepFM(linear_feature_columns, dnn_feature_columns, task='binary')
    model.compile("adam", "binary_crossentropy",
                  metrics=['binary_crossentropy'], )
    history = model.fit(train_model_input, train[target].values,
                        batch_size=256, epochs=10, verbose=2, validation_split=0.2, )
    # 使用deepfm进行预测
    pred_ans = model.predict(test_model_input, batch_size=256)

输出

    print("test LogLoss", round(log_loss(test[target].values, pred_ans), 4))
    print("test AUC", round(roc_auc_score(test[target].values, pred_ans), 4))
  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KryHan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值