機械学習ライブラリ(MLlib)ガイド
MLlibはSparkの機械学習(ML)ライブラリです。その目的は実用的な機械学習をスケーラブルおよび簡単にすることです。高レベルでは、それは以下のようなツールを提供します:
- ML アルゴリズム: 分類、回帰、クラスタリング、および協調フィルタリングのような一般的な学習アルゴリズム
- 特徴化: 特徴抽出、変換、次元削減、および選択
- パイプライン: 構築、評価、およびMLパイプラインのチューニングのためのツール
- 永続性: アルゴリズム、モデル、およびパイプラインの保存とロード
- ユーティリティ: 線形代数、統計、データ処理など
発表: データフレームに基づいたAPIは主要なAPIです
MLlib RDDベースのAPIは、今はメンテナンスモードにあります。
Spark 2.0の時点で、spark.mllib
パッケージ内のRDDに基づいたAPIはメンテナンスモードに入りました。Sparkのための主要な機械学習APIは、今はspark.ml
パッケージ内のDataFrameに基づいたAPIです。
何を意味するのか?
- MLlib はまだバグ修正のために
spark.mllib
内のRDDベースのAPIをサポートするでしょう。 - MLlibはRDDベースのAPIに新しい機能を追加しないでしょう。
- Spark 2.xリリースで、MlLibはRDDベースのAPIと同等の機能に手を届かすためにデータフレームベースのAPIに機能を追加するでしょう。
- 同等の機能に手が届いた後(おおざっぱにSpark2.3と推測されます)、RDDベースのAPIは非推奨になるでしょう。
- RDDベースのAPIはSpark 3.0で削除される予定です。
なぜMLlibはデータフレームに基づいたAPIに切り替わっているのか?
- データフレームはRDDよりももっと使いやすいAPIを提供します。データフレームの多くの利点は、Spark Datasources, SQL/DataFrame クエリ, Tungsten および Catalyst 最適化を含み、言語間でAPIを揃えます。
- MLlibのためのデータフレームに基づいたAPIはMLアルゴリズム間および複数の言語間で均一なAPIを提供します。
- データフレームは実践的なMLパイプライン、特に特徴の変換を容易にします。詳細はパイプライン ガイド を見てください。
"Spark ML"とは何か?
- “Spark ML” は公式の名前ではありませんが、データフレームAPIに基づいたMLlibを参照する時にしばしば用いられます。データフレームに基づいたAPIによって使われる
org.apache.spark.ml
Scala パッケージ名に大きくよるもので、“Spark ML Pipelines” という単語はパイプラインの概念を強調するために初期に使われました。
MLlibは非推奨ですか?
- いいえ。MLlib はRDDベースのAPIとデータフレームベースのAPIの両方を含みます。RDDベースのAPIは今ではメンテナンスモードです。ですが、全体としてはAPIもMLlibの両方とも非推奨ではありません。
依存
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以上が必要になるでしょう。
2.2の見どころ
以下のリストはSpark 2.2
リリースでMLlibに追加された特徴と拡張の幾つかを強調します:
mllib
(SPARK-19535) での機能性に合致する、全てのユーザあるいは項目についてのtop-kの推薦のためのALS
メソッド。ml
とmllib
の両方でのパフォーマンスも改善されました (SPARK-11968 and SPARK-20587)DataFrames
についてのCorrelation
とChiSquareTest
stats 関数 (SPARK-19636 と SPARK-19635)- 頻度パターンマイニングのための
FPGrowth
アルゴリズム (SPARK-14503) GLM
はこれでTweedie
ファミリーを完全にサポートします (SPARK-18929)- データセット内の失われた値を補完するための
Imputer
特徴変換器 (SPARK-13568) - 線形サポートベクターマシーン 分類のための
LinearSVC
(SPARK-14709) - ロジスティック回帰はこれで訓練中の係数の制約をサポートします (SPARK-20047)
移行ガイド
MLlib はアクティブに開発中です。Experimental
/DeveloperApi
と印が付けられているAPIは将来のリリースで変更するかも知れません。以下の移行ガイドはリリース間の全ての変更を説明するでしょう。
2.1 から 2.2
破壊的な変更
破壊的な変更はありません。
非推奨と挙動の変更
非推奨
非推奨はありません。
挙動の変更
- SPARK-19787:
ALS.train
メソッドについてのregParam
のデフォルト値が1.0
から0.1
に変更されました。 (markedDeveloperApi
). 注意 これはALS
推測器あるいはモデル、またはMLlibのALS
クラスに影響ありません。 - SPARK-14772:
Param.copy
メソッドについての Python と Scala API間の非一貫性が修正されました。 - SPARK-11569: 今は
StringIndexer
は見たことが無い値と同じ方法でNULL
値を扱います。以前は、handleInvalid
パラメータの設定に関係なく、常に例外が投げられていました。
以前のSparkのバージョン
以前の移行ガイドはこのページに保管されています。
-
システムに最適化されたネイティブコードの恩恵とバックグラウンドについて知るために、High Performance Linear Algebra in ScalaでのSam HallidayのScalaXトークを見たいと思うかも知れません。↩