序
前面发表了一系列文章介绍如何使用Python进行Alink在线学习(Online Learning),有读者反馈需要Java版本的,虽然这两个版本在算法原理上是一样的,但是在使用的过程中还有很多差异,为了便于读者快速使用Java上手Alink在线学习,我将从Java的角度重写这一系列文章。
正文
在线学习(Online Learning)是机器学习的一种模型训练方法,可以根据线上数据的变化,实时调整模型,是模型能够反映线上的变化,从而提高线上预测的准确率。
为了更好的理解在线学习(Online Learning)的概念,我们先介绍与之相对应的概念:批量训练(Batch Learning),先确定一个样本训练集,针对训练集的全体数据进行训练,一般需要使用迭代过程,重复使用数据集,不断调整参数。在线学习不需要要事先确定训练数据集,训练数据在训练过程中逐条到达的,每来一个训练样本,就会根据该样本产生的损失函数值、目标函数值及梯度,对模型进行一次迭代。
我们先关注FTRL在线预测组件及FTRL流式预测组件,如下图所示,它们之间通过模型数据流链接,即FtrlTrain不断产生新的模型,流式的传给FtrlPredict组件,每次当FtrlPredict组件接收到一个完整的模型,便会替换其旧的模型,切换成新的模型。对于在线学习FtrlTrain,需要两个输入,一个是初始的模型,避免系统冷启动;另一个便是流式的训练数据。FtrlTrain输出就是模型数据流。FtrlPredict组件同样需要初始模型,可以在FtrlTrain输出模型前,对已来到的数据进行预测。
介绍完核心的两个组件,我们再看看所需的初始模型、训练数据流和预测数据流是如何准备的。如下图所示,初始模型,是采用传统的离线训练方式,对批式的训练数据进行训练得到的。
FTRL算法是线性算法,其输入的数据必须都是数值型的,而原始的数据既有数值型的,也有离散型的,我们需要进行相应的特征工程操作,将原始特征数据变换为向量形式。
我们这里需要使用特征工程的组件,将批式原始训练数据转化为批式向量训练数据;将流式原始训练数据转化为流式向量训练数据;将流式原始预测数据转化为流式向量预测数据。