我是靠谱客的博主 英俊云朵,最近开发中收集的这篇文章主要介绍libffm with ftrl updater,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

这个东西之前就听说过,在某些特定场景效果很好,

看到一个开源项目,所以把要点翻译了一些,同时实践了一下;

大部分内容与libffm相同

开源项目:

https://github.com/guestwalk/libffm

https://github.com/CNevd/libffm-ftrl

一个libffm的python wapper https://github.com/turi-code/python-libffm


全名

Factorization Machines with Follow-The-Regularized-Leader


论文

Factorization Machines with Follow-The-Regularized-Leader for CTR prediction in Display Advertising]

http://www0.cs.ucl.ac.uk/staff/w.zhang/rtb-papers/fm-ftrl.pdf

libFFM 本身用的是SGD, 参考http://www.csie.ntu.edu.tw/~r01922136/slides/ffm.pdf


FFM
比较容易过拟合,目前的处理方法是early stopping

一个例子:

> ffm-train -p va.ffm -l 0.00002 tr.ffm iter tr_logloss va_logloss 1 0.49738 0.48776 2 0.47383 0.47995 3 0.46366 0.47480 4 0.45561 0.47231 5 0.44810 0.47034 6 0.44037 0.47003 7 0.43239 0.46952 8 0.42362 0.46999 9 0.41394 0.47088 10 0.40326 0.47228 11 0.39156 0.47435 12 0.37886 0.47683 13 0.36522 0.47975 14 0.35079 0.48321 15 0.33578 0.48703

可以看到第7轮 validation loss就达到最小了,接着训练就是过拟合了,

同时需要注意到加大正则参数是不管用的

> ffm-train -p va.ffm -l 0.0002 -t 50 -s 12 tr.ffm iter tr_logloss va_logloss 1 0.50532 0.49905 2 0.48782 0.49242 3 0.48136 0.48748 ... 29 0.42183 0.47014 ... 48 0.37071 0.47333 49 0.36767 0.47374 50 0.36472 0.47404

推荐的方法是用-p带验证集,同时使用--auto-stop

> ffm-train -p va.ffm -l 0.00002 --auto-stop tr.ffm iter tr_logloss va_logloss 1 0.49738 0.48776 2 0.47383 0.47995 3 0.46366 0.47480 4 0.45561 0.47231 5 0.44810 0.47034 6 0.44037 0.47003 7 0.43239 0.46952 8 0.42362 0.46999 Auto-stop. Use model at 7th iteration.



libffm数据格式:

<label> <field1>:<index1>:<value1> <field2>:<index2>:<value2> ...
其中field 和 index必须是非负整数


libffm和libffm-ftrl的主要区别是几个参数:

libffm的-l <lambda>: set regularization parameter (default 0.00002)

在libffm-ftrl中没有了,取代的是

    -L1 <L1>: set L1 regularization parameter (default 0.)
    -L2 <L2>: set L2 regularization parameter (default 0.)
    -alpha <alpha>: set Per-Coordinate Learning Rate alpha (default 0.3)
    -beta <beta>: set Per-Coordinate Learning Rate beta (default 1.0)


反映到源代码中就是ffm_parameter结构体

libffm:

variable         meaning                             default
    ============================================================
。。。
    lambda           regularization cost                       0

libffm-ftrl:

    variable         meaning                             default
    ============================================================
    alpha            Per-Coordinate Learning Rate            0.3
    beta             Per-Coordinate Learning Rate            1.0
    L1               L1 regularization cost                    0
    L2               L2 regularization cost                    0

最后

以上就是英俊云朵为你收集整理的libffm with ftrl updater的全部内容,希望文章能够帮你解决libffm with ftrl updater所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部