/alphaPLM

Multi-thread implementation of Piece-wise Linear Model(PLM) or Mixture of LR(MLR) with FTRL for binary-class classification problem.

Primary LanguageC++

alphaPLM

前言:

  • alphaPLM是Large Scale Piece-wise Linear Model(LS-PLM)的一个单机多线程版本实现,用于解决二分类问题,比如CTR预估,优化算法采用了FTRL。

  • LS-PLM据说是之前阿里广告主要的ctr预估模型,早期应该叫做MLR,具体算法原理见盖坤大神最近放出的论文: Learning Piece-wise Linear Models from Large Scale Data for Ad Click Prediction,代码实现所用优化方法见我的博客文章:http://castellanzhang.github.io/2017/06/01/mlr_plm/

  • 此代码基于之前的alphaFM修改实现,且正赶上alphaGo再次完虐人类,便仍然冠以alpha前缀。

  • 安装方法和使用方法跟alphaFM非常类似,不再详述。

模型文件格式(假定分片数为f):

第一行是bias的参数:
bias u1 u2 ... uf w1 w2 ... wf u_n1 u_n2 ... u_nf w_n1 w_n2 ... w_nf u_z1 u_z2 ... u_zf w_z1 w_z2 ... w_zf
其他行的格式为:
feature_name u1 u2 ... uf w1 w2 ... wf u_n1 u_n2 ... u_nf w_n1 w_n2 ... w_nf u_z1 u_z2 ... u_zf w_z1 w_z2 ... w_zf

预测结果格式:

label score
其中label为1或-1,score等于预测为正样本的概率值。

参数说明(可以直接执行./plm_train和./plm_predict查看参数列表):

plm_train的参数:

-m: 设置模型文件的输出路径。
-u_bias: 1或0表示u是否有偏置项。 default:1
-w_bias: 1或0表示w是否有偏置项。 default:1
-piece_num: 分片数。 default:4
-u_stdev: u的初始化使用均值为0的高斯分布,u_stdev为标准差。 default:0.1
-w_stdev: w的初始化使用均值为0的高斯分布,w_stdev为标准差。 default:0.1
-u_alpha: u的FTRL超参数alpha。 default:0.05
-u_beta: u的FTRL超参数beta。 default:1.0
-u_l1: u的L1正则。 default:0.1
-u_l2: u的L2正则。 default:5.0
-w_alpha: w的FTRL超参数alpha。 default:0.05
-w_beta: w的FTRL超参数beta。 default:1.0
-w_l1: w的L1正则。 default:0.1
-w_l2: w的L2正则。 default:5.0
-core: 计算线程数。 default:1
-im: 上次模型的路径,用于初始化模型参数。如果是第一次训练则不用设置此参数。

plm_predict的参数:

-m: 模型文件路径。
-piece_num: 分片数。 default:4
-core: 计算线程数。 default:1
-out: 输出文件路径。