FlinkML はFlinkのための機械学習(ML)ライブラリです。それは、アルゴリズムと貢献の増加するリストを使った、Flinkコミュニティでの新しい試みです。FlinkMLを使って、スケーラブルなMLアルゴリズム、直観的なAPI、および端と端を結ぶMLシステムでべったりとしたコードを最小にするのに役立つツールを提供することを目的とします。ビジョンとロードマップで私たちの目的とライブラリが目指している場所についてのもっと詳細を見ることができます。
FlinkMLは現在のところ以下のアルゴリズムをサポートします:
包括的な開始の例のために、クリックスタートガイドを調べることができます。
飛び込むためには、Flinkプログラムのセットアップをする必要があります。次に、FlinkML依存性をプロジェクトのpom.xml
に追加する必要があります。
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-ml_2.10</artifactId>
<version>1.3-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 です。It allows you to quickly build complex data analysis pipelines how they appear in every data scientist’s daily work. 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)
メソッドchainTransformer
を呼び出すことで、Transformer
を他の Transformer
あるいは連なった Transformers
のセットに繋ぐことができます。Predictor
を Transformer
あるいは連なった Transformers
に繋ぎたい場合は、chainPredictor
を呼ぶ必要があります。
Flink コミュニティはFlinkとそのライブラリの開発に関わりたい全ての貢献者を歓迎します。FlinkMLへの貢献を素早く開始するためには、公式の貢献ガイドを読んでください。