

# FlinkML - Flink的机器学习

> 译者：[flink.sojb.cn](https://flink.sojb.cn/)


FlinkML是Flink的机器学习（ML）库。这是Flink社区的一项新工作，其中包含越来越多的算法和贡献者。使用FlinkML，我们的目标是提供可扩展的ML算法，直观的API和工具，帮助最小化端到端ML系统中的胶水代码。您可以在我们的[愿景和路线图中查看](https://cwiki.apache.org/confluence/display/FLINK/FlinkML%3A+Vision+and+Roadmap)有关我们目标的更多详细信息以及类库的发展方向。

## 支持的算法

FlinkML目前支持以下算法：

### 监督学习

*   [SVM使用通信高效的分布式双坐标上升（CoCoA）](svm.html)
*   [多元线性回归](multiple_linear_regression.html)
*   [优化框架](optimization.html)

### 无监督学习

*   [k-最近邻居关联](knn.html)

### 数据预处理

*   [多项式特征](polynomial_features.html)
*   [标准尺度](standard_scaler.html)
*   [MinMax Scaler](min_max_scaler.html)

### 建议

*   [交替最小二乘（ALS）](als.html)

### 离群选择

*   [随机异常值选择（SOS）](sos.html)

### 公用事业

*   [距离指标](distance_metrics.html)
*   [交叉验证](cross_validation.html)

## 入门

您可以查看我们的[快速入门指南](quickstart.html)，了解全面的入门示例。

如果你想直接进入，你必须[设置一个Flink程序](https://flink.sojb.cn/dev/linking_with_flink.html)。接下来，您必须将FlinkML依赖项添加到项目的依赖项中`pom.xml`。



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



请注意，FlinkML目前不是二进制分发的一部分。请参阅[此处](https://flink.sojb.cn/dev/linking.html)与其链接以进行群集执行。

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



```
// 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](http://scikit-learn.org)灵感流水线机制。它允许您快速构建复杂的数据分析管道，使其在每个数据科学家的日常工作中出现。可以在[此处](pipelines.html)找到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`或一组链接。如果想要链接到一个或一组链接，则必须调用该方法。`Transformers``chainTransformer``Predictor``Transformer``Transformers``chainPredictor`

## 如何贡献

Flink社区欢迎所有希望参与Flink及其类库开发的贡献者。为了快速开始为FlinkML做出贡献，请阅读我们的官方 [贡献指南](https://flink.sojb.cn/dev/libs/ml/contribution_guide.html)。

