Alink是什么

Alink是由阿里巴巴计算平台事业部PAI团队研发的,基于Flink的机器学习算法平台。

  • Alink 名称的由来
    • 相关名称的公共部分: Alibaba, Algorithm, AI, Flink, Blink
  • 同时支持批式/流式算法,提供丰富的算法库
    • 包含常用统计分析、机器学习、文本处理、推荐、异常检测等多个领域的算法

Alink开源算法2021.png

  • 覆盖数据分析、建模和部署的全流程

    • 帮助数据分析和应用开发人员能够从数据探索、模型训练、实时预测、可视化展示,预测服务部署,端

      1. 到端地完成整个流程。

教程

image.png

基本概念

在开始使用前,需要了解一些基本概念

Operator

概念

Alink里每个算法功能都是一个Operator, 分为批式Op和流式Op, 例如逻辑回归包含

  • LogisticRegressionTrainBatchOp(逻辑回归训练)
  • LogisticRegressionPredictBatchOp(逻辑回归批式预测)
  • LogisticRegressionPredictStreamhOp(逻辑回归流式预测)

Link/LinkFrom

Operator和Operator之间使用Link/LinkFrom连接,例如:

  1. # 定义数据
  2. data = CsvSourceBatchOp()
  3. # 逻辑回归训练
  4. lrTrain = LogisticRegressionTrainBatchOp()
  5. # 逻辑回归预测
  6. LrPredict = LogisticRegressionPredictBatchOp()
  7. # 训练
  8. data.link(lrTrain)
  9. # 预测
  10. LrPredict.linkFrom(lrTrain, data)


参数

每个Operator都有参数,设置参数的方式是 set + 参数名称。
例如,逻辑回归的参数是

名称 中文名称 描述 类型 是否必须? 默认值
labelCol 标签列名 输入表中的标签列名 String
featureCols 特征列名数组 特征列名数组,默认全选 String[] null

那么,写法是 set + 参数名称

  1. lr = LogisticRegressionTrainBatchOp()\
  2. .setFeatureCols(colnames)\
  3. .setLabelCol("label")

Source/Sink

数据导入和数据导出是一类特殊的Operator, 定义好之后使用Link/LinkFrom就可以和算法组件连接起来了。
Alink包含常用的流式数据源和批式数据源,详情请看算法文档中数据导入和数据导出部分。
image.png

示例

  1. df_data = pd.DataFrame([
  2. [2, 1, 1],
  3. [3, 2, 1],
  4. [4, 3, 2],
  5. [2, 4, 1],
  6. [2, 2, 1],
  7. [4, 3, 2],
  8. [1, 2, 1],
  9. [5, 3, 2]
  10. ])
  11. input = BatchOperator.fromDataframe(df_data, schemaStr='f0 int, f1 int, label int')
  12. # load data
  13. dataTest = input
  14. colnames = ["f0","f1"]
  15. lr = LogisticRegressionTrainBatchOp().setFeatureCols(colnames).setLabelCol("label")
  16. model = input.link(lr)
  17. predictor = LogisticRegressionPredictBatchOp().setPredictionCol("pred")
  18. predictor.linkFrom(model, dataTest).print()

Pipeline

Alink算法支持的另一种方式是Pipeline,可以将数据处理,特征生成,模型训练放在一起,进行训练,预测以及在线服务。

示例

  1. quantileDiscretizer = QuantileDiscretizer()\
  2. .setNumBuckets(2)\
  3. .setSelectedCols("sepal_length")
  4. binarizer = Binarizer()\
  5. .setSelectedCol("petal_width")\
  6. .setOutputCol("bina")\
  7. .setReservedCols("sepal_length", "petal_width", "petal_length", "category")\
  8. .setThreshold(1.);
  9. lda = Lda()\
  10. .setPredictionCol("lda_pred")\
  11. .setPredictionDetailCol("lda_pred_detail")\
  12. .setSelectedCol("category")\
  13. .setTopicNum(2)\
  14. .setRandomSeed(0)
  15. pipeline = Pipeline()\
  16. .add(binarizer)\
  17. .add(binarizer)\
  18. .add(lda)
  19. pipeline.fit(data1)
  20. 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

欢迎加入

image.png