機械学習ライブラリ(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に機能を追加するでしょう。
なぜ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, dev.ludovic.netlib, netlib-javaを使います。これらのパッケージは、システムライブラリまたはランタイムライブラリパスで使える場合、Intel MKLやOpenBLASなどのネイティブアクセラレーションライブラリを呼び出すことができます。
ただし、ネイティブアクセラレーションライブラリをSparkと一緒に配布することはできません。アクセラレート線形代数処理を有効にする方法については、MLlib Linear Algebra Acceleration Guideを見てください。アクセラレートネイティブライブラリが有効になっていない場合は、以下のような警告メッセージが表示され、代わりに純粋なJVM実装が使われます:
WARN BLAS: Failed to load implementation from:dev.ludovic.netlib.blas.JNIBLAS
PythonでMLlibを使用するには、NumPy バージョン1.4以上が必要になるでしょう。
3.0 の見どころ
以下のリストはSpark 3.0
リリースでMLlibに追加された特徴と拡張の幾つかを強調します:
- 複数カラムのサポートが、
Binarizer
(SPARK-23578),StringIndexer
(SPARK-11215),StopWordsRemover
(SPARK-29808) and PySparkQuantileDiscretizer
(SPARK-22796) に追加されました。 - ツリーベースの特徴変換が追加されました (SPARK-13677)。
- 2つの新しい評価器
MultilabelClassificationEvaluator
(SPARK-16692) とRankingEvaluator
(SPARK-28045) が追加されました。 - 標本化ウェイトのサポートが
DecisionTreeClassifier/Regressor
(SPARK-19591),RandomForestClassifier/Regressor
(SPARK-9478),GBTClassifier/Regressor
(SPARK-9612),MulticlassClassificationEvaluator
(SPARK-24101),RegressionEvaluator
(SPARK-24102),BinaryClassificationEvaluator
(SPARK-24103),BisectingKMeans
(SPARK-30351),KMeans
(SPARK-29967),GaussianMixture
(SPARK-30102) に追加されました。 PowerIterationClustering
の R API が追加されました (SPARK-19827)。- ML パイプラインの状態を追跡するための Spark ML listener が追加されました (SPARK-23674)。
- 検証セットとのフィッティングが勾配ブーストツリーに追加されました (SPARK-24333).
RobustScaler
変換器が追加されました (SPARK-28399)。Factorization Machines
分類器と regressor が追加されました (SPARK-29224)。- ガウスナイーブベイズ Classifier (SPARK-16872) と Complement ナイーブベイズ Classifier (SPARK-29942) が追加されました。
- ScalaとPython間のML関数の等価化(SPARK-28958).
predictRaw
は全ての分類モデルでpublicにされました。predictProbability
はLinearSVCModel
以外の全ての分類モデルでpublicにされました (SPARK-30358)。
移行ガイド
移行ガイドは今はこのページに保管されています。
-
システムに最適化されたネイティブコードの恩恵とバックグラウンドについて知るために、High Performance Linear Algebra in ScalaでのSam HallidayのScalaXトークを見たいと思うかも知れません。 ↩