因子分解机FM(Factorization Machines)是一种通用的预测模型,特别适合处理高维稀疏数据。FM算法通过引入隐向量的方式建模特征之间的交互,可以看作是矩阵分解技术的推广,广泛应用于推荐系统、广告点击率预测等领域。
算法说明
FM算法包括两个过程:FM训练和FM预测。这两个过程分别对应模型的构建和应用阶段。
FM训练:这一过程的核心目标是通过给定的训练数据集来学习模型参数,以便模型能够准确地预测目标变量。在此阶段,算法会对输入数据进行分析和参数优化,以确保模型的高效性和准确性。
FM预测:在这一过程中,已经训练好的模型被用来对新输入数据进行预测。在FM预测阶段,模型的参数已经被锁定,通过这些固定的参数,模型能够计算并输出新数据的预测结果。
配置组件
方式一:可视化方式
FM训练
在Designer工作流页面添加FM训练组件,并在界面右侧配置相关参数:
参数类型 | 参数 | 描述 | |
字段设置 | 特征列 | 根据输入数据表的特征选择特征列。支持STRING和DOUBLE类型的数据。 | |
标签列 | 根据输入数据表的特征选择标签列。仅支持DOUBLE类型。 | ||
高级选项 | 仅在Designer控制台,需要配置该参数。 如果选中高级选项复选框,则Flink配置项生效,需配置Flink计算引擎,详情请参见Flink配置。 | ||
参数设置 | 任务类型 | 支持以下取值:
| |
迭代数 | 总训练迭代次数,默认为10。 | ||
正则化系数 | 使用英文逗号(,)分隔的三个浮点数,分别表示0阶项、1阶项及2阶项的正则化系数。 | ||
学习率 | 如果训练发散,则降低该参数取值。 | ||
参数初始化标准差 | 参数初始化的标准差,用来归一化数据。DOUBLE类型,默认为0.05。 | ||
维度 | 使用英文逗号(,)分隔的三个正整数,分别表示0阶项、1阶项、2阶项的长度。 | ||
数据块大小 | 性能参数。 | ||
输出表生命周期 | 仅在原PAI-Studio控制台,需要配置该参数。 输出表的生命周期。 | ||
执行调优 | 底层Alink作业使用的计算资源 | MaxCompute | 使用MaxCompute/Flink计算资源,节点个数和单节点占用的内存大小配置方法请参见附录:如何预估资源的使用量。 |
Flink | |||
DLC | 使用DLC计算资源,请根据界面提示配置资源规格。 |
FM预测
在Designer工作流页面添加FM预测组件,并在界面右侧配置相关参数:
参数类型 | 参数 | 描述 | |
参数设置 | 预测结果列名 | 预测结果列的名称。 | |
详细预测信息列名 | 详细预测信息列的名称。 | ||
保持列 | 保存至输出结果表的列。 | ||
高级选项 | 仅在Designer控制台,需要配置该参数。 如果选中高级选项复选框,则每个Worker预测使用的线程数目、模型大小类型生效。 | ||
执行调优 | 底层Alink作业使用的计算资源 | MaxCompute | 使用MaxCompute/Flink计算资源,节点个数和单节点占用的内存大小配置方法请参见附录:如何预估资源的使用量。 |
Flink | |||
DLC | 使用DLC计算资源,请根据界面提示配置资源规格。 |
方式二:PAI命令方式
使用PAI命令配置FM训练/FM预测组件参数。您可以使用SQL脚本组件进行PAI命令调用,详情请参见场景4:在SQL脚本组件中执行PAI命令。
FM训练
参数 | 是否必选 | 默认值 | 描述 |
tensorColName | 是 | 无 | 特征列名称。 数据格式为key:value,多个特征使用英文逗号(,)分隔。例如1:1.0,3:1.0。 |
labelColName | 是 | 无 | label列名。数据必须是数值类型。如果task取值为binary_classification,则label只能取0或1。 |
task | 是 | regression | 任务类型。取值范围为{regression,binary_classification}。 |
numEpochs | 否 | 10 | 迭代数。 |
dim | 否 | 1,1,10 | 使用英文逗号(,)分隔的三个整数,分别表示0次项、线性项及二次项的长度。 |
learnRate | 否 | 0.01 | 学习率。 如果训练发散,则降低学习率。 |
lambda | 否 | 0.01,0.01,0.01 | 使用英文逗号(,)分隔的三个浮点数,分别表示0次项、线性项及二次项的正则化系数。 |
initStdev | 否 | 0.05 | 参数初始化标准差。 |
FM预测
参数 | 是否必选 | 默认值 | 描述 |
predResultColName | 否 | prediction_result | 预测结果列名。 |
predScoreColName | 否 | prediction_score | 预测得分列名。 |
predDetailColName | 否 | prediction_detail | 详细预测信息列名。 |
keepColNames | 否 | 所有列 | 保存至输出结果表的列。 |
使用示例
使用以下数据作为基于Alink框架的FM推荐模板的输入数据,训练生成的模型AUC约为0.97。