Alink是什么
Alink是由阿里巴巴计算平台事业部PAI团队研发的,基于Flink的机器学习算法平台。
- Alink 名称的由来
- 相关名称的公共部分: Alibaba, Algorithm, AI, Flink, Blink
- 同时支持批式/流式算法,提供丰富的算法库
- 包含常用统计分析、机器学习、文本处理、推荐、异常检测等多个领域的算法

覆盖数据分析、建模和部署的全流程
帮助数据分析和应用开发人员能够从数据探索、模型训练、实时预测、可视化展示,预测服务部署,端
到端地完成整个流程。
教程

- Alink教程(Java版):https://www.yuque.com/pinshu/alink_tutorial/book_java
- Alink教程(Python版):https://www.yuque.com/pinshu/alink_tutorial/book_python
- 源代码地址:https://github.com/alibaba/Alink/tree/master/tutorial
- Java版的数据和资料链接:https://www.yuque.com/pinshu/alink_tutorial/book_java_reference
- Python版的数据和资料链接:https://www.yuque.com/pinshu/alink_tutorial/book_python_reference
- 下载部分示例数据的Java代码:https://www.yuque.com/pinshu/alink_tutorial/book_java_download_some_data
基本概念
Operator
概念
Alink里每个算法功能都是一个Operator, 分为批式Op和流式Op, 例如逻辑回归包含
- LogisticRegressionTrainBatchOp(逻辑回归训练)
- LogisticRegressionPredictBatchOp(逻辑回归批式预测)
- LogisticRegressionPredictStreamhOp(逻辑回归流式预测)
Link/LinkFrom
Operator和Operator之间使用Link/LinkFrom连接,例如:
# 定义数据data = CsvSourceBatchOp()# 逻辑回归训练lrTrain = LogisticRegressionTrainBatchOp()# 逻辑回归预测LrPredict = LogisticRegressionPredictBatchOp()# 训练data.link(lrTrain)# 预测LrPredict.linkFrom(lrTrain, data)
参数
每个Operator都有参数,设置参数的方式是 set + 参数名称。
例如,逻辑回归的参数是
| 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 默认值 |
|---|---|---|---|---|---|
| labelCol | 标签列名 | 输入表中的标签列名 | String | ✓ | |
| featureCols | 特征列名数组 | 特征列名数组,默认全选 | String[] | null |
那么,写法是 set + 参数名称
lr = LogisticRegressionTrainBatchOp()\.setFeatureCols(colnames)\.setLabelCol("label")
Source/Sink
数据导入和数据导出是一类特殊的Operator, 定义好之后使用Link/LinkFrom就可以和算法组件连接起来了。
Alink包含常用的流式数据源和批式数据源,详情请看算法文档中数据导入和数据导出部分。
示例
df_data = pd.DataFrame([[2, 1, 1],[3, 2, 1],[4, 3, 2],[2, 4, 1],[2, 2, 1],[4, 3, 2],[1, 2, 1],[5, 3, 2]])input = BatchOperator.fromDataframe(df_data, schemaStr='f0 int, f1 int, label int')# load datadataTest = inputcolnames = ["f0","f1"]lr = LogisticRegressionTrainBatchOp().setFeatureCols(colnames).setLabelCol("label")model = input.link(lr)predictor = LogisticRegressionPredictBatchOp().setPredictionCol("pred")predictor.linkFrom(model, dataTest).print()
Pipeline
Alink算法支持的另一种方式是Pipeline,可以将数据处理,特征生成,模型训练放在一起,进行训练,预测以及在线服务。
示例
quantileDiscretizer = QuantileDiscretizer()\.setNumBuckets(2)\.setSelectedCols("sepal_length")binarizer = Binarizer()\.setSelectedCol("petal_width")\.setOutputCol("bina")\.setReservedCols("sepal_length", "petal_width", "petal_length", "category")\.setThreshold(1.);lda = Lda()\.setPredictionCol("lda_pred")\.setPredictionDetailCol("lda_pred_detail")\.setSelectedCol("category")\.setTopicNum(2)\.setRandomSeed(0)pipeline = Pipeline()\.add(binarizer)\.add(binarizer)\.add(lda)pipeline.fit(data1)pipeline.transform(data2)
Vector
Alink自定义一种数据类型Vector, 包括稀疏向量(SparseVector)和稠密向量(DenseVector)两种
稀疏向量(SparseVector)
示例:$4$1:0.1 2:0.2
解释:两个$符号中间的数字是向量长度,$之后是列索引:列对应的值
稠密向量(DenseVector)
示例: 0.1 0.2 0.3
解释: 按照顺序,以空格为分隔符
另外,在Alink里,如果列是Vector, 那么参数名字一般都是vectorColName.
Alink开源地址
https://github.com/alibaba/Alink
欢迎加入

