DeepFM tensorflow 实践

  • A+
所属分类:机器学习

论文地址

参考

实践

本次笔者用tensorflow在movieLen-100k上面对DeepFM进行了多次实验。

数据集处理

数据集的分析与处理参见此处

DeepFM tensorflow 实践

特征处理

特征采用user的年龄 职业等身份特征,和电影的分类、上映时间等特征,删除user_id和item_id特征。分类特征采用onehot编码,年龄、上映时间等连续特征采用MinMaxScalar处理。

训练集与测试集划分

本实验用了两种训练集与测试集划分的方式:

  1. 按照评分时间划分,划分的时间节点为1998/3/1(即timestamp为888721510)在此时间之前评价,作为训练集,其他的作为测试集。
  2. 按照数据集已经给出的划分策略:使用ua.base作为训练集 ua.test作为测试集。

评价指标

本实验使用rmse和auc作为评价指标。

  1. 回归预测电影评分时采用rmse作为指标
  2. 作为CTR预估时,将4分5分的评分作为1,其他评分作为0,使用auc作为CTR预估的指标。

实验

DeepFM.py

建立一个简单的DeepFM网络。模型参数为:

DeepFM tensorflow 实践

采用按照时间划分数据集的方式,auc作为指标。

 

DeepFM tensorflow 实践

DeepFM_2.py

训练集测试集划分采用第二种方式,其他参数与DeepFM.py相同

DeepFM tensorflow 实践DeepFM tensorflow 实践

 

DeepFM.py与DeepFM_2.py对比,可以看出第二种训练集/测试集划分方式要优于第一种划分方式,第一种划分方式,训练集 测试集的用户交集很少,只占总用户的13%,相当于冷启动问题。


DeepFM_3.py

加入L2正则化,强度为0.01,其他参数与DeepFM.py相同。

DeepFM tensorflow 实践

DeepFM.py有过拟合现象,加入正则化减轻过拟合现象。


DeepFM_4.py

只使用FM,其他参数与DeepFM_3.py相同

DeepFM tensorflow 实践

在此数据集、目标和参数设置上,deep部分没有提升模型的表现。


DeepFM_5.py

deep部分采用三层神经网络,每层32个节点。

DeepFM tensorflow 实践

DeepFM_6.py

deep三层,每层64

DeepFM tensorflow 实践DeepFM_7.py

deep三层,每层128

DeepFM tensorflow 实践

改变deep层参数没有提上模型效果。


DeepFM_8.py

deep网络加入dropout,keep_prob为0.5

DeepFM tensorflow 实践

DeepFM_8_2.py

参数与DeepFM_8.py相同,训练集/测试集的划分采用第二种方式。

DeepFM tensorflow 实践

Deep_9.py

l2_reg缩小为0.0001,训练集/测试集的划分采用第一种方式。

DeepFM tensorflow 实践

Deep_9_2.py

l2_reg改为0.001

DeepFM tensorflow 实践

正则化强度过小,过拟合效果较差,过大,则会减慢loss下降速度(DeepFM_8.py和DeepFM_9_2.py对比)


DeepFM_1.py

参数与DeepFM.py相似,加入dropout和l2正则化

DeepFM tensorflow 实践

结果:

DeepFM tensorflow 实践

综上实验,选中一种最优的参数方案进行实验。


DeepFM_10.py

测试指标改为rmse

DeepFM tensorflow 实践结果:

DeepFM tensorflow 实践

没有达到最好的结果且过拟合(trainloss降,testloss升),陷入了局部最优。


DeepFM_10_1.py

只使用FM

DeepFM tensorflow 实践

能达到目前的最优解,但收敛速度慢


DeepFM_10_2.py

增大学习率为0.001

DeepFM tensorflow 实践

能达到目前的最优解,且速度快(epoch500)


DeepFM_10_3.py

增大学习率为0.01

DeepFM tensorflow 实践

能达到目前最优解,且速度最快 但loss下降曲线不平滑,毛刺多


DeepFM_11.py

embedding_size 改为3,其他参数与DeepFM_10_2相同

DeepFM tensorflow 实践

表现效果也DeepFM_10_2类似。

DeepFM_12.py

参数与DeepFM_2.py相似

DeepFM tensorflow 实践DeepFM tensorflow 实践

减小deep的层数和神经元的数目,没有降低模型的表现,反而加快了模型的收敛。可见:在数据量小时,上深度网络,意义不大,数据量小不能支撑参数的学习。

 

以上代码,可以在这里找到。

LTXU

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: