FlinkML - Flink的机器学习

FlinkML是Flink的机器学习(ML)库。这是Flink社区的一项新工作,其中包含越来越多的算法和贡献者。使用FlinkML,我们的目标是提供可扩展的ML算法,直观的API和工具,帮助最小化端到端ML系统中的胶水代码。您可以在我们的愿景和路线图中查看有关我们目标的更多详细信息以及类库的发展方向

支持的算法

FlinkML目前支持以下算法:

监督学习

无监督学习

数据预处理

建议

离群选择

公用事业

入门

您可以查看我们的快速入门指南,了解全面的入门示例。

如果你想直接进入,你必须设置一个Flink程序接下来,您必须将FlinkML依赖项添加到项目的依赖项中pom.xml

<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-ml_2.11</artifactId>
  <version>1.7-SNAPSHOT</version>
</dependency>

请注意,FlinkML目前不是二进制分发的一部分。请参阅此处与其链接以进行群集执行

现在您可以开始解决分析任务了。以下代码片段显示了训练多元线性回归模型的难易程度。

// LabeledVector is a feature vector with a label (class or real value)
val trainingData: DataSet[LabeledVector] = ...
val testingData: DataSet[Vector] = ...

// Alternatively, a Splitter is used to break up a DataSet into training and testing data.
val dataSet: DataSet[LabeledVector] = ...
val trainTestData: DataSet[TrainTestDataSet] = Splitter.trainTestSplit(dataSet)
val trainingData: DataSet[LabeledVector] = trainTestData.training
val testingData: DataSet[Vector] = trainTestData.testing.map(lv => lv.vector)

val mlr = MultipleLinearRegression()
  .setStepsize(1.0)
  .setIterations(100)
  .setConvergenceThreshold(0.001)

mlr.fit(trainingData)

// The fitted model can now be used to make predictions
val predictions: DataSet[LabeledVector] = mlr.predict(testingData)

管道

FlinkML的一个关键概念是它的scikit-learn灵感流水线机制。它允许您快速构建复杂的数据分析管道,使其在每个数据科学家的日常工作中出现。可以在此处找到FlinkML管道及其内部工作的深入描述

以下示例代码显示了使用FlinkML设置分析管道是多么容易。

val trainingData: DataSet[LabeledVector] = ...
val testingData: DataSet[Vector] = ...

val scaler = StandardScaler()
val polyFeatures = PolynomialFeatures().setDegree(3)
val mlr = MultipleLinearRegression()

// Construct pipeline of standard scaler, polynomial features and multiple linear regression
val pipeline = scaler.chainTransformer(polyFeatures).chainPredictor(mlr)

// Train pipeline
pipeline.fit(trainingData)

// Calculate predictions
val predictions: DataSet[LabeledVector] = pipeline.predict(testingData)

可以通过调用方法将a链接Transformer到另一个Transformer或一组链接如果想要链接到一个或一组链接,则必须调用该方法TransformerschainTransformerPredictorTransformerTransformerschainPredictor

如何贡献

Flink社区欢迎所有希望参与Flink及其类库开发的贡献者。为了快速开始为FlinkML做出贡献,请阅读我们的官方 贡献指南