機械学習ライブラリ(MLlib)ガイド

MLlibはSparkの機械学習(ML)ライブラリです。その目的は実用的な機械学習をスケーラブルおよび簡単にすることです。高レベルでは、それは以下のようなツールを提供します:

発表: データフレームに基づいたAPIは主要なAPIです

MLlib RDDベースのAPIは、今はメンテナンスモードにあります。

Spark 2.0の時点で、spark.mllibパッケージ内のRDDに基づいたAPIはメンテナンスモードに入りました。Sparkのための主要な機械学習APIは、今はspark.mlパッケージ内のDataFrameに基づいたAPIです。

何を意味するのか?

なぜMLlibはデータフレームに基づいたAPIに切り替わっているのか?

依存

MLlib は線形代数パッケージ Breezeを使用します。これは最適化された数学処理のためにnetlib-javaに依存します。実行時にネイティブライブラリ1が利用できない場合は、警告メッセージが表示され、ピュアJVM実装が代わりに使われるでしょう。

ランタイムのプロプライエタリ バイナリのライセンスの問題で、デフォルトではnetlib-javaのネイティブ proxiesを含んでいません。システムに最適化されたバイナリを使用するために netlib-java / Breeze を設定するには、プロジェクトの依存としてcom.github.fommil.netlib:all:1.1.2 をインクルード(あるいはSparkを -Pnetlib-lgpl付きでビルド)して、プラットフォームの追加のインストレーション説明のために netlib-javaドキュメントを読んでください。

PythonでMLlibを使用するには、NumPy バージョン1.4以上が必要になるでしょう。

Migration guide

MLlib はアクティブに開発中です。Experimental/DeveloperApiと印が付けられているAPIは将来のリリースで変更するかも知れません。以下の移行ガイドはリリース間の全ての変更を説明するでしょう。

1.6 から 2.0

破壊的な変更

Spark 2.0には幾つかの破壊的な変更がありました。それらは以下で説明されます。

データフレームベースのAPIのための線形代数クラス

Sparkの線形代数の依存物は新しいプロジェクト mllib-local に移動しました (SPARK-13944を見てください)。この変更の一部として、線形代数クラスは新しいパッケージ spark.ml.linalgにコピーされました。spark.ml内のデータフレームベースのAPI は、今は spark.ml.linalg クラスに依存し、結果として2,3の破壊的な変更を引き起こし、 様々なモデルクラスの中に大部分があります (完全なリストは SPARK-14810 を見てください)。

注意: spark.mllib内のRDDベースのAPIは以前のパッケージのspark.mllib.linalgに依存し続けています。

ベクトルとマトリックスの変換

ほとんどのパイプラインコンポーネントは読み込みの後方互換性をサポートしますが、ベクトルあるいはマトリックスのカラムを含むSparkのバージョン2.0未満のいくつかの既存の DataFrames とパイプラインは、新しいspark.mlのベクトルとマトリックスの種類に移設しなければならないかも知れません。spark.mllib.linalg から spark.ml.linalgの種類にDataFrame カラムを変換するためのユーティリティ(逆もまた同じ)は、spark.mllib.util.MLUtilsで見つかります。

ベクトルとマトリックスの1つのインスタンスを変換するために利用可能なユーティリティメソッドもあります。ml.linalg の種類に変換するためにはmllib.linalg.Vector / mllib.linalg.MatrixasMLメソッドを、mllib.linalg の種類に変換するためには mllib.linalg.Vectors.fromML / mllib.linalg.Matrices.fromML を使ってください。

import org.apache.spark.mllib.util.MLUtils

// convert DataFrame columns
val convertedVecDF = MLUtils.convertVectorColumnsToML(vecDF)
val convertedMatrixDF = MLUtils.convertMatrixColumnsToML(matrixDF)
// convert a single vector or matrix
val mlVec: org.apache.spark.ml.linalg.Vector = mllibVec.asML
val mlMat: org.apache.spark.ml.linalg.Matrix = mllibMat.asML

更に詳しくはMLUtils Scala ドキュメントを参照してください。

import org.apache.spark.mllib.util.MLUtils;
import org.apache.spark.sql.Dataset;

// convert DataFrame columns
Dataset<Row> convertedVecDF = MLUtils.convertVectorColumnsToML(vecDF);
Dataset<Row> convertedMatrixDF = MLUtils.convertMatrixColumnsToML(matrixDF);
// convert a single vector or matrix
org.apache.spark.ml.linalg.Vector mlVec = mllibVec.asML();
org.apache.spark.ml.linalg.Matrix mlMat = mllibMat.asML();

更に詳しくは MLUtils Java ドキュメントを参照してください。

from pyspark.mllib.util import MLUtils

# convert DataFrame columns
convertedVecDF = MLUtils.convertVectorColumnsToML(vecDF)
convertedMatrixDF = MLUtils.convertMatrixColumnsToML(matrixDF)
# convert a single vector or matrix
mlVec = mllibVec.asML()
mlMat = mllibMat.asML()

更に詳しくはMLUtils Python ドキュメントを参照してください。

非推奨のメソッドは削除されました。

spark.mllibspark.ml パッケージ内のいくつかの非推奨のメソッドは削除されました。

破壊的な変更の完全なリストはSPARK-14810で見つけることができます。

非推奨と挙動の変更

非推奨

spark.mllibspark.ml パッケージ内の非推奨は以下を含みます:

挙動の変更

spark.mllibspark.ml パッケージ内の挙動の変更は以下を含みます:

以前のSparkのバージョン

以前の移行ガイドはこのページに保管されています。


  1. システムに最適化されたネイティブコードの恩恵とバックグラウンドについて知るために、High Performance Linear Algebra in ScalaでのSam HallidayのScalaXトークを見たいと思うかも知れません。

TOP
inserted by FC2 system