Alink 在线学习的 6 个 Java 示例

本文提供了6个Java示例,详细介绍了如何使用Alink进行在线学习,涵盖从环境配置到数据预处理、模型训练、在线预测和评估的全过程,旨在帮助读者快速掌握Alink在Java环境下的在线学习应用。
摘要由CSDN通过智能技术生成

前面发表了一系列文章介绍如何使用Python进行Alink在线学习(Online Learning),有读者反馈需要Java版本的,虽然这两个版本在算法原理上是一样的,但是在使用的过程中还有很多差异,为了便于读者快速使用Java上手Alink在线学习,本文将以6个示例从Java的角度重写这一文章,希望对大家有所帮助。

大家在使用 Alink 过程中有任何问题可钉钉扫描下方二维码进群交流~

示例一

在线学习(Online Learning)是机器学习的一种模型训练方法,可以根据线上数据的变化,实时调整模型,是模型能够反映线上的变化,从而提高线上预测的准确率。

为了更好的理解在线学习(Online Learning)的概念,我们先介绍与之相对应的概念:批量训练(Batch Learning),先确定一个样本训练集,针对训练集的全体数据进行训练,一般需要使用迭代过程,重复使用数据集,不断调整参数。在线学习不需要要事先确定训练数据集,训练数据在训练过程中逐条到达的,每来一个训练样本,就会根据该样本产生的损失函数值、目标函数值及梯度,对模型进行一次迭代。

我们先关注FTRL在线预测组件及FTRL流式预测组件,如下图所示,它们之间通过模型数据流链接,即FtrlTrain不断产生新的模型,流式的传给FtrlPredict组件,每次当FtrlPredict组件接收到一个完整的模型,便会替换其旧的模型,切换成新的模型。对于在线学习FtrlTrain,需要两个输入,一个是初始的模型,避免系统冷启动;另一个便是流式的训练数据。FtrlTrain输出就是模型数据流。FtrlPredict组件同样需要初始模型,可以在FtrlTrain输出模型前,对已来到的数据进行预测。

介绍完核心的两个组件,我们再看看所需的初始模型、训练数据流和预测数据流是如何准备的。如下图所示,初始模型,是采用传统的离线训练方式,对批式的训练数据进行训练得到的。

FTRL算法是线性算法,其输入的数据必须都是数值型的,而原始的数据既有数值型的,也有离散型的,我们需要进行相应的特征工程操作,将原始特征数据变换为向量形式。

我们这里需要使用特征工程的组件,将批式原始训练数据转化为批式向量训练数据;将流式原始训练数据转化为流式向量训练数据;将流式原始预测数据转化为流式向量预测数据。

示例二

首先,我们需要一个Java的工程,配置好相关环境。最简单的办法是使用Alink的example工程,下载Alink git的代码,并用Jave IDE打开项目,如下图所示,可以看到三个已经写好的示例:ALSExample, GBDTExample, KMeansExample.

我们在com.alibaba.alink package下新建一个Java文件:

package com.alibaba.alink;

public class FTRLExample {
  
  public static void main(String[] args) throws Exception {

  }
}

本文的示例参考Alink的Python demo:

https://github.com/alibaba/Alink/blob/master/pyalink/ftrl_demo.ipynb

在网络广告中,点击率(CTR)是衡量广告效果的一个非常重要的指标。因此,点击预测系统在赞助搜索和实时竞价中具有重要的应用价值。该 Demo 使用 Ftrl 方法实时训练分类模型,并使用模型进行实时预测评估。

这里使用Kaggle比赛的CTR数据,链接为:https://www.kaggle.com/c/avazu-ctr-prediction/data 。由于是压缩数据,需要下载到本地,为了演示方便,我们直接使用oss上存储的一份采样数据。使用TextSourceBatchOp整行读取打印部分数据,脚本如下:

new TextSourceBatchOp()
    .setFilePath("http://alink-release.oss-cn-beijing.aliyuncs.com/data-files/avazu-small.csv")
    .firstN(10)
    .print();

运行结果为:

我们看到每条数据包含多个数据项,是以逗号分隔。下面是各数据列的定义如下:

  • id: ad identifier
  • click: 0/1 for non-click/click
  • hour: format is YYMMDDHH, so 14091123 means 23:00 on Sept. 11, 2014 UTC.
  • C1 – anonymized categorical variable
  • banner_pos
  • site_id
  • site_domain
  • site_category
  • app_id
  • app_domain
  • app_category
  • device_id
  • device_ip
  • device_model
  • device_type
  • device_conn_type
  • C14-C21 – anonymized categorical variables

我们根据各列的定义,组装schemaStr如下:

String schemaStr
  = "id string, click string, dt string, C1 string, banner_pos int, site_id string, site_domain string, "
  + "site_category string, app_id string, app_domain string, app_category string, device_id string, "
  + "device_ip string, device_model string, device_type string, device_conn_type string, C14 int, C15 int, "
  + "C16 int, C17 int, C18 int, C19 int, C20 int, C21 int";

有了schema的定义,我们可以通过CsvSourceBatchOp读取显示数据,脚本如下:

CsvSourceBatchOp trainBatchData = new CsvSourceBatchOp()
  .setFilePath("http://alink-release.oss-cn-beijing.aliyuncs.com/data-files/avazu-small.csv")
  .setSchemaStr(schemaStr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值