機械学習ライブラリ (MLlib) ガイド
MLlibはSparkの機械学習(ML)ライブラリです。その目標は、実用的な機械学習をスケーラブルで容易にすることです。高レベルでは、次のようなツールを提供します。
- MLアルゴリズム: 分類、回帰、クラスタリング、協調フィルタリングなどの一般的な学習アルゴリズム
- 特徴量化: 特徴量抽出、変換、次元削減、選択
- パイプライン: MLパイプラインの構築、評価、チューニングのためのツール
- 永続化: アルゴリズム、モデル、パイプラインの保存とロード
- ユーティリティ: 線形代数、統計、データ処理など
お知らせ: DataFrameベースのAPIが主要なAPIです
MLlibのRDDベースのAPIは、現在メンテナンスモードです。
Spark 2.0以降、RDDベースのAPI (spark.mllib
パッケージ)はメンテナンスモードに入りました。Sparkの主要な機械学習APIは、現在DataFrameベースのAPI (spark.ml
パッケージ)です。
どのような影響がありますか?
- MLlibは、バグ修正と共に
spark.mllib
内のRDDベースのAPIを引き続きサポートします。 - MLlibは、RDDベースのAPIに新しい機能を追加しません。
- Spark 2.xリリースでは、MLlibはDataFrameベースのAPIに機能を追加して、RDDベースのAPIとの機能パリティを実現します。
なぜMLlibはDataFrameベースのAPIに切り替えるのですか?
- DataFrameは、RDDよりもユーザーフレンドリーなAPIを提供します。DataFrameの多くの利点には、Sparkデータソース、SQL/DataFrameクエリ、TungstenとCatalystの最適化、言語間の一貫性のあるAPIなどがあります。
- MLlibのDataFrameベースのAPIは、MLアルゴリズムと複数の言語間で一貫性のあるAPIを提供します。
- DataFrameは、特に特徴量変換において、実用的なMLパイプラインを容易にします。パイプラインガイドで詳細を参照してください。
「Spark ML」とは何ですか?
- 「Spark ML」は公式名称ではありませんが、MLlibのDataFrameベースのAPIを指すために時々使用されます。これは主に、DataFrameベースのAPIで使用される
org.apache.spark.ml
Scalaパッケージ名と、当初パイプラインの概念を強調するために使用した「Spark MLパイプライン」という用語が原因です。
MLlibは非推奨ですか?
- いいえ。MLlibには、RDDベースのAPIとDataFrameベースのAPIの両方が含まれています。RDDベースのAPIは現在メンテナンスモードです。しかし、どちらのAPIも、MLlib全体も非推奨ではありません。
依存関係
MLlibは、最適化された数値処理のために線形代数パッケージBreezeとdev.ludovic.netlibを使用しています1。これらのパッケージは、システムライブラリまたはランタイムライブラリパスにある場合、Intel MKLまたはOpenBLASなどのネイティブアクセラレーションライブラリを呼び出す場合があります。
ただし、ネイティブアクセラレーションライブラリはSparkと一緒に配布することはできません。MLlib線形代数アクセラレーションガイドで、アクセラレートされた線形代数処理を有効にする方法を参照してください。アクセラレートされたネイティブライブラリが有効になっていない場合、以下の様な警告メッセージが表示され、代わりに純粋なJVM実装が使用されます。
WARNING: 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)、および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リスナーが追加されました(SPARK-23674)。
- Pythonの勾配ブースティングツリーに検証セットを使用した適合が追加されました(SPARK-24333)。
RobustScaler
トランスフォーマーが追加されました(SPARK-28399)。Factorization Machines
分類器と回帰器が追加されました(SPARK-29224)。- ガウスナイーブベイズ分類器(SPARK-16872)と補完ナイーブベイズ分類器(SPARK-29942)が追加されました。
- ScalaとPython間のML関数の同等性(SPARK-28958)。
predictRaw
はすべての分類モデルで公開されました。predictProbability
は、LinearSVCModel
を除くすべての分類モデルで公開されました(SPARK-30358)。
移行ガイド
移行ガイドは、このページにアーカイブされました。
-
システム最適化ネイティブの利点と背景の詳細については、Sam HallidayのScalaXトーク「Scalaにおける高性能線形代数」をご覧ください。↩