CastellanZhang / lambdaFM

Multi-thread implementation of lambdaFM with FTRL for ranking problem. LambdaFM is a learning-to-rank algorithm by combining LambdaRank and Factorization Machines.
MIT License
111 stars 31 forks source link

lambdaFM

前言:

安装方法:

直接在根目录make即可,编译后会在bin目录下生成两个可执行文件。如果编译失败,请升级gcc版本。

输入文件格式:

类似于RankLib和SVMrank的格式,但更加灵活:特征编号不局限于整数也可以是字符串;特征值可以是整数或浮点数(特征值最好做归一化处理,否则可能会导致结果为nan), 特征值为0的项可以省略不写;qid可以是数字也可以是字符串;label(即相关性分数)必须是0,1,2,3等非负整数;#后面是注释,注释也可为空。 相同qid的数据必须相邻在一起,且按照自然展现的顺序排列。举例如下:
1 qid:1 sex:1 age:0.3 f1:1 f3:0.9 # 1AAAAA
0 qid:1 sex:0 age:0.7 f2:0.4 f5:0.8 f8:1 # 1BBBBB
3 qid:1 sex:1 age:0.3 f1:1 f3:0.9 # 1CCCCC
2 qid:ab sex:0 age:0.2 f2:0.2 f8:1
1 qid:ab sex:1 age:0.5 f1:1 f3:0.3
4 qid:ab sex:0 age:0.1 f2:0.7 f5:0.2 f8:1
...

模型文件格式:

feature_name w v1 v2 ... vf w_n w_z v_n1 v_n2 ... v_nf v_z1 v_z2 ... v_zf

预测结果格式:

label qid score

参数说明:

lambdafm_train的参数:

-m \<model_path>: 设置模型文件的输出路径。
-dim \<k1,k2>: k1为1表示使用w参数,为0表示不使用;k2为v的维度,可以是0。 default:1,8
-init_stdev \<stdev>: v的初始化使用均值为0的高斯分布,stdev为标准差。 default:0.1
-w_alpha \<w_alpha>: w0和w的FTRL超参数alpha。 default:0.05
-w_beta \<w_beta>: w0和w的FTRL超参数beta。 default:1.0
-w_l1 \<w_L1_reg>: w0和w的L1正则。 default:0.1
-w_l2 \<w_L2_reg>: w0和w的L2正则。 default:5.0
-v_alpha \<v_alpha>: v的FTRL超参数alpha。 default:0.05
-v_beta \<v_beta>: v的FTRL超参数beta。 default:1.0
-v_l1 \<v_L1_reg>: v的L1正则。 default:0.1
-v_l2 \<v_L2_reg>: v的L2正则。 default:5.0
-core \<threads_num>: 计算线程数。 default:1
-im \<initial_model_path>: 上次模型的路径,用于初始化模型参数。如果是第一次训练则不用设置此参数。
-fvs \<force_v_sparse>: 为了获得更好的稀疏解。当fvs值为1, 则训练中每当wi = 0,即令vi = 0;当fvs为0时关闭此功能。 default:0
-rank \<ranking_loss>: pairwise或ndcg,支持两种排序算法,ndcg即lambdaRank算法。 default:pairwise
-fast_mode \<fast_mode>: 提供了一种快速训练模式,在v较大时速度能有一定提升,但效果可能会变差,谨慎使用。1表示开启,0表示关闭。 default:0

lambdafm_predict的参数:

-m \<model_path>: 模型文件路径。
-dim \<factor_num>: v的维度。 default:8
-core \<threads_num>: 计算线程数。 default:1
-out \<predict_path>: 输出文件路径。

评测工具: