docs/algo/fm_on_angel.md
因子分解机(Factorization Machine, FM)是由Steffen Rendle提出的一种基于矩阵分解的机器学习算法。它可对任意的实值向量进行预测。其主要优点包括: 1) 可用于高度稀疏数据场景;2) 具有线性的计算复杂度。
其中:是两个k维向量的点乘:
模型参数为: 其中表示用k个因子表示特征i,k是决定因子分解的超参数。
FM可以被用于一系列的预测任务,比如说:
FM算法模型 FM算法的模型由两部分组成,分别是wide和embedding,其中wide就是典型的线性模型。最后的输出结果为wide和embedding两部分之和。
FM训练过程 Angel实现了用梯度下降方法优化,迭代得训练FM模型,每次迭代worker和PS上的逻辑如下:
FM预测结果:
数据格式 支持libsvm和dummy两种数据格式,其中libsvm格式举例如下:
1 1:1 214:1 233:1 234:1
dummy数据格式为:
1 1 214 233 234
参数说明
提交命令 可以通过下面的命令提交FM算法:
../../bin/angel-submit \
-Dml.epoch.num=20 \
-Dangel.app.submit.class=com.tencent.angel.ml.core.graphsubmit.GraphRunner \
-Dml.model.class.name=com.tencent.angel.ml.classification.FactorizationMachines \
-Dml.feature.index.range=$featureNum \
-Dml.model.size=$featureNum \
-Dml.data.validate.ratio=0.1 \
-Dml.data.type=libsvm \
-Dml.learn.rate=0.1 \
-Dml.reg.l2=0.03 \
-Daction.type=train \
-Dml.fm.field.num=11 \
-Dml.fm.rank=8 \
-Dml.inputlayer.optimizer=ftrl \
-Dangel.train.data.path=$input_path \
-Dangel.workergroup.number=20 \
-Dangel.worker.memory.mb=20000 \
-Dangel.worker.task.number=1 \
-Dangel.ps.number=20 \
-Dangel.ps.memory.mb=10000 \
-Dangel.task.data.storage.level=memory \
-Dangel.job.name=angel_l1