Alink是基于Flink的机器学习算法平台,欢迎访问Alink的github获取下载链接及更多信息。
alibaba/Alinkgithub.com![f52223d75f1c0c14331b320de6c535ed.png](https://img-blog.csdnimg.cn/img_convert/f52223d75f1c0c14331b320de6c535ed.png)
也欢迎加入钉钉群进行交流。
![2d509364a869b83549c92d6a22f82697.png](https://img-blog.csdnimg.cn/img_convert/2d509364a869b83549c92d6a22f82697.png)
前一篇文章链接:Alink在线学习(Online Learning)之Java示例【一】
首先,我们需要一个Java的工程,配置好相关环境。最简单的办法是使用Alink的example工程,下载Alink git的代码,并用Jave IDE打开项目,如下图所示,可以看到三个已经写好的示例:ALSExample, GBDTExample, KMeansExample.
![ef62b20d32917d9e8e2b2aaa232a0f48.png](https://img-blog.csdnimg.cn/img_convert/ef62b20d32917d9e8e2b2aaa232a0f48.png)
我们在com.alibaba.alink package下新建一个Java文件:
package
本文的示例参考Alink的Python demo:
https://github.com/alibaba/Alink/blob/master/pyalink/ftrl_demo.ipynbgithub.com在网络广告中,点击率(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();
运行结果为:
![784907c9d6e2c66ca40262dbf8754298.png](https://img-blog.csdnimg.cn/img_convert/784907c9d6e2c66ca40262dbf8754298.png)
我们看到每条数据包含多个数据项,是以逗号分隔。下面是各数据列的定义如下:
- 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);
trainBatchData.firstN(10).print();
结果显示如下:
![767c8c0ad188ee9ba0465884f7e8525d.png](https://img-blog.csdnimg.cn/img_convert/767c8c0ad188ee9ba0465884f7e8525d.png)
由于列数较多,我们不容易将数据与列名对应起来。为了更好的看数据,这里有一个小技巧,打印出来的文本数据及分隔换行符号,正好是MarkDown格式,可以将其复制粘贴到MarkDown编辑器,即可看到整齐的图片显示,如下图所示:
![669ce213723b6bbe2d77fb6b1108d0c8.png](https://img-blog.csdnimg.cn/img_convert/669ce213723b6bbe2d77fb6b1108d0c8.png)
下一篇文章链接:Alink在线学习(Online Learning)之Java示例【三】