社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

【推荐解决方案四部曲】请查收——第三部:基于深度学习模型Wide&Deep的推荐

天池大数据科研平台 • 5 年前 • 689 次点击  

基于深度学习模型

Wide&Deep的推荐

上手难度:  ⭐ ⭐⭐  推荐效果:  ⭐⭐⭐

本实验选用数据为真实电商脱敏数据,

仅用于学习,请勿商用


篇首高能预警,不要错过文末有福利!有福利!有福利!(重要的事情说三遍🙂)


Wide&Deep推荐算法出自一篇论文《Wide&Deep Learning for RecommenderSystems》,Wide&Deep由两部分组成,分别是Wide和Deep。先来说wide,表示的是generalized的推荐系统,传统的推荐系统都是通过线性算法基于离散特征来做推荐的。


Wide推荐通常是这样的:系统通过获得用户的购物日志数据,包括用户点击哪些商品,购买过哪些商品,然后通过one-hot编码的方式构成离散特征或者通过对业务的理解衍生出一些特征,并进行计算,类似于本系列文章第二篇:基于对象特征的推荐。这种wide推荐方式有非常多的好处,比如对于大规模的稀疏数据有很好的效果,而且模型的解释性很强


什么叫模型的解释性呢?以逻辑回归为例,每个特征都对应模型中的一个权重值,每个特征的权重值的大小跟这个特征对结果的影响是有关的。那么wide方式同样有很多缺点,比如我们一直强调的,特征衍生需要很多人为操作,需要专家经验,另外这种推荐只对用户操作过的商品有效。


接着讲下deep,这里的deep表示的是通过深度学习学习出来的一些向量,这些向量是隐性特征,往往是没有明确可解释性的。这些向量也可以作为特征的一部分参与到训练中。通过deep方式产生的特征会有以下好处,其一可以拟补人为提取特征造成的人力思考维度的限制,试想下一个人可以轻易的思考出二阶乘法的结果,如果是五阶呢?其二这部分特征是深度学习框架自动生成的,无需人力干预。



既然Wide和Deep算法各有千秋,那如果可以将两种算法作为组合,那么一定可以生成更有效的推荐场景的模型,本文就介绍如何在PAI-DSW上实现基于Wide&Deep的预测。



一、业务场景描述


本节使用的是PAI-DSW云端深度学习训练平台和PAI-EAS模型服务平台,使用的是一份开源的基于人的各种背景的统计数据,解决的问题是基于人的各种基础数据预测每个人收入是否会超过50K。


本实验的全部代码和数据已经内置于PAI-DSW,只要打开DSW就可以安装下方的教程运行实验。


二、数据集介绍


数据源:引用UCI开源数据源

https://archive.ics.uci.edu/ml/datasets/Census+Income


具体特征字段如下:



目标字段:income是否超过50k


 

三、数据探索流程


首先进入PAI-DSW,找到左侧的Demo文件夹,下载Wide&Deep数据集及代码包。



1

工程描述

首先看下整个工程,


  • 包含一个census_data文件夹,里面包含一个训练数据和一个测试数据


  • official文件夹是一个工具包


  • census_main.py为训练脚本



2

模型训练

打开一个terminal环境,执行


python census_main.py--export_dir wide_deep_saved_model


wide_deep_saved_model为输出模型所在的文件夹,训练完在文件目录下会找到相应文件,打开后可以看到checkpoint:



把这个checkpoint的号记住。


3

模型预测

现在已经生成了模型的checkpoint输出,接下来进入terminal,运行以下脚本:


saved_model_cli run --dir wide_deep_saved_model/${模型checkpoint号码}/ --tag_set serve --signature_def="predict" --input_examples='${预测数据}'


根据本文的案例可以执行以下脚本拿到预测结果:

saved_model_cli run --dir wide_deep_saved_model/1542168326/ --tag_set serve --signature_def="predict" --input_examples='examples=[{"age":[46.], "education_num":[10.], "capital_gain":[7688.], "capital_loss":[0.], "hours_per_week":[38.]}, {"age":[24.], "education_num":[13.], "capital_gain":[0.], "capital_loss":[0.], "hours_per_week":[50.]}]'


输入了两条预测数据,最终拿到预测结果:



输入了两条预测数据,可以得到预测输出,第一条预测结果为1,第二条结果为0,可以通过output key probabilities判断(注:矩阵第一行对应第一个预测结果,第二列0.9599956>第一列0.04000434,所以第一个预测结果是1。同理第二个预测结果是0)。


可以通过代码

official/wide_deep/census_dataset.py来看具体的特征工程的特征和目标值的构建,目标列>50k时目标值为1,目标列<50k时目标值为0。

于是预测结果第一条的人的预测收入为>50k,预测结果第二条的人的预测收入<50k。


4

模型在线部署

生成的模型是Tensorflow的标准模型格式,可以通过PAI-EAS将模型部署成Http服务供调用。


后续流程可以参考在线预测文档:

https://help.aliyun.com/document_detail/92917.html


部署成在线服务之后,这样就可以做到模型跟用户自身的业务结合,完成PAI模型训练和业务应用的打通。


天池社区开发者福利年终巨献



机器学习PAI即将推出开发者版PAI-DSW(Data Science Workshop),该版本将为AI开发者提供极致的云上编程体验免费的计算资源与AI学习系列课程


池用户专享钜惠活动来袭!GPU资源现惊爆价火热秒杀中,活动价仅原价十分之一!👉戳阅读原文查看详情,现在就立刻下单吧~】


更多动态请及时关注天池官方公告,如有任何相关问题想要咨询官方人员,可立即扫码加入下方钉钉群,工作人员随时进行解答哦~




就连点赞,你都自带着宠溺模式鸭!


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/9e7LjlXUwI
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/27591
 
689 次点击