機械学習ライブラリ(MLlib)ガイド
MLlibはSparkの機械学習(ML)ライブラリです。その目標は、実用的な機械学習をスケーラブルで簡単にすることです。概要としては、以下のようなツールを提供します。
- MLアルゴリズム:分類、回帰、クラスタリング、協調フィルタリングなどの一般的な学習アルゴリズム
- 特徴量エンジニアリング:特徴抽出、変換、次元削減、選択
- パイプライン:MLパイプラインの構築、評価、チューニングのためのツール
- 永続化:アルゴリズム、モデル、パイプラインの保存と読み込み
- ユーティリティ:線形代数、統計、データ処理など
お知らせ:DataFrameベースの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は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.mlScalaパッケージ名と、当初パイプラインの概念を強調するために使用した「Spark ML Pipelines」という用語によるものです。
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)、およびPySparkのQuantileDiscretizer(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の講演「High Performance Linear Algebra in Scala」をご覧ください。 ↩