现在,假设我们的模型需要根据以下两个特征来预测狗主人对狗的满意程度:
如果我们根据这两个特征构建以下特征交叉:
最终获得的预测能力将远远超过任一特征单独的预测能力。例如,如果狗在下午5点主人下班回来时(快乐地)叫喊,我们可以预测主人满意度是很正面的。如果狗在凌晨3点主人熟睡时(也许痛苦地)哀叫,我们可以预测主人满意度是很负面的。
总之,线性学习器可以很好地扩展到海量数据。在大规模数据集上使用特征交叉是学习高度复杂模型的一种有效策略。神经网络可提供另一种策略。
9.1.2 FTRL 实践
我们还是使用加州房价这个样本数据集。装载数据和创建训练集/验证集的代码与8.4.7节一样。在下面的代码中,我们将原来的SGD梯度下降训练学习器换成了FTRL(Follow-The-Regularized-Leader)训练学习器。
FTRL是对每一维分开训练更新的,每一维使用的是不同的学习速率(步长)。与所有特征维度使用统一的学习速率相比,这种方法考虑了训练样本本身在不同特征上分布的不均匀性,如果某一个维度特征的训练样本很少,每一个样本都很珍贵,那么该特征维度对应的训练速率可以独自保持比较大的值,每来一个包含该特征的样本,就可以在该样本的梯度上前进一大步,而不需要与其他特征维度的前进步调强行保持一致。
训练模型代码如下,要注意的是,我们在使用FtrlOptimizer:
第9章 TensorFlow 高级知识
265