機械学習ライブラリ(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.2と推測されます)、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以上が必要になるでしょう。
Migration guide
MLlib はアクティブに開発中です。Experimental
/DeveloperApi
と印が付けられているAPIは将来のリリースで変更するかも知れません。以下の移行ガイドはリリース間の全ての変更を説明するでしょう。
From 2.0 to 2.1
破壊的な変更
非推奨のメソッドは削除されました。
setLabelCol
infeature.ChiSqSelectorModel
numTrees
inclassification.RandomForestClassificationModel
(これは今ではnumTrees
と呼ばれるパラメータを参照します)numTrees
inregression.RandomForestRegressionModel
(これは今ではnumTrees
と呼ばれるパラメータを参照します)model
inregression.LinearRegressionSummary
validateParams
inPipelineStage
validateParams
inEvaluator
非推奨と挙動の変更
非推奨
- SPARK-18592:
Deprecate all Param setter methods except for input/output column Params for
DecisionTreeClassificationModel
,GBTClassificationModel
,RandomForestClassificationModel
,DecisionTreeRegressionModel
,GBTRegressionModel
andRandomForestRegressionModel
挙動の変更
- SPARK-17870:
Fix a bug of
ChiSqSelector
which will likely change its result. NowChiSquareSelector
use pValue rather than raw statistic to select a fixed number of top features. - SPARK-3261:
KMeans
returns potentially fewer than k cluster centers in cases where k distinct centroids aren’t available or aren’t selected. - SPARK-17389:
KMeans
reduces the default number of steps from 5 to 2 for the k-means|| initialization mode.
以前のSparkのバージョン
以前の移行ガイドはこのページに保管されています。
-
システムに最適化されたネイティブコードの恩恵とバックグラウンドについて知るために、High Performance Linear Algebra in ScalaでのSam HallidayのScalaXトークを見たいと思うかも知れません。↩