機械学習ライブラリ(MLlib)ガイド
MLlibはSparkの機械学習(ML)ライブラリです。その目的は実用的な機械学習をスケーラブルおよび簡単にすることです。MLlibは一般的な機械学習アルゴリズムとユーティリティからなるSparkのスケール可能な機械学習ライブラリで、分類、回帰、クラスタ化、協調フィルター、次元削減、そして低レベル optimization primitivesと高レベルpipeline API を含んでいます。
2つのパッケージに分割されます:
spark.mllib
はRDDsの上にビルドされた元のAPIを含んでいます。spark.ml
はMLパイプラインを構築するために DataFrames の上にビルドされた高レベルのAPIを提供します。
DataFrameを使うとAPIがもっと多目的および柔軟になるため、spark.ml
の使用をお勧めします。しかし、spark.ml
の開発と一緒に spark.mllib
のサポートを続けるつもりです。ユーザはspark.mllib
機能の利用が便利でもっと多くの機能が増えることを期待できるでしょう。開発者はspark.mllib
に新しいアルゴリズムの貢献をしなければならず、任意に spark.ml
に貢献することができます。
以下に両方の詳細なガイドへのリンクと主な機能をリスト表示します。
spark.mllib: データタイプ、アルゴリズムおよびユーティリティ
spark.ml: ML パイプラインのための高レベルAPI
Some techniques are not available yet in spark.ml, most notably dimensionality reduction
Users can seamlessly combine the implementation of these techniques found in spark.mllib
with the rest of the algorithms found in spark.ml
.
依存
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.5から1.6
spark.mllib
あるいは spark.ml
パッケージの中で、APIの断絶となる変更はありませんが、非推奨と挙動の変更があります。
非推奨:
- SPARK-11358:
spark.mllib.clustering.KMeans
の中で、runs
ペラメータは非推奨になりました。 - SPARK-10592:
spark.ml.classification.LogisticRegressionModel
とspark.ml.regression.LinearRegressionModel
の中で、weights
フィールドは新しい名前coefficients
が支持されて非推奨になりました。これは、インスタンス(行) のweights"のアルゴリズムに対する曖昧さを無くすのに役立ちます。
挙動の変更:
- SPARK-7770:
spark.mllib.tree.GradientBoostedTrees
:validationTol
は1.6で意味が変わりました。Previously, it was a threshold for absolute change in error. Now, it resembles the behavior ofGradientDescent
’sconvergenceTol
: For large errors, it uses relative error (relative to the previous error); for small errors (< 0.01
), it uses absolute error. - SPARK-11069:
spark.ml.feature.RegexTokenizer
: 以前は、トークンに分割する前に文字列を小文字に変換しませんでした。Now, it converts to lowercase by default, with an option not to. This matches the behavior of the simplerTokenizer
transformer.
以前のSparkのバージョン
以前の移行ガイドはこのページに保管されています。
-
システムに最適化されたネイティブコードの恩恵とバックグラウンドについて知るために、High Performance Linear Algebra in ScalaでのSam HallidayのScalaXトークを見たいと思うかも知れません。↩