移行ガイド:MLlib (機械学習)

この移行ガイドは MLlib に固有の項目について説明しています。DataFrame ベースの API の MLlib を上位バージョンに移行する際には、SQL の移行項目が多く適用できます。 移行ガイド:SQL、Datasets、DataFrame を参照してください。

MLlib 3.5 から 4.0 へのアップグレード

後方互換性のない変更

後方互換性のない変更はありません。

非推奨および動作の変更

非推奨

非推奨はありません。

動作の変更

MLlib 2.4 から 3.0 へのアップグレード

後方互換性のない変更

非推奨および動作の変更

非推奨

動作の変更

MLlib 2.2 から 2.3 へのアップグレード

後方互換性のない変更

非推奨および動作の変更

非推奨

動作の変更

MLlib 2.1 から 2.2 へのアップグレード

後方互換性のない変更

後方互換性のない変更はありません。

非推奨および動作の変更

非推奨

非推奨はありません。

動作の変更

MLlib 2.0 から 2.1 へのアップグレード

後方互換性のない変更

非推奨メソッドの削除

非推奨および動作の変更

非推奨

動作の変更

MLlib 1.6 から 2.0 へのアップグレード

後方互換性のない変更

Spark 2.0 では、いくつかの後方互換性のない変更がありました。以下に概要を示します。

DataFrame ベースの API 用線形代数クラス

Spark の線形代数依存関係は、新しいプロジェクト mllib-local に移動されました ( SPARK-13944 参照)。この変更の一環として、線形代数クラスは新しいパッケージ spark.ml.linalg にコピーされました。spark.ml の DataFrame ベースの API は、spark.ml.linalg クラスに依存するようになり、いくつかの後方互換性のない変更が発生しました。主にさまざまなモデルクラスに影響しています (完全なリストについては、 SPARK-14810 を参照してください)。

**注意:** spark.mllib の RDD ベースの API は、引き続き以前のパッケージ spark.mllib.linalg に依存します。

ベクトルと行列の変換

ほとんどのパイプラインコンポーネントはロードのための後方互換性をサポートしていますが、Spark 2.0 より前のバージョンでベクトルまたは行列列を含む既存の DataFrame とパイプラインは、新しい spark.ml のベクトルおよび行列型に移行する必要がある場合があります。spark.mllib.linalg から spark.ml.linalg 型への (およびその逆の) DataFrame 列を変換するためのユーティリティは、spark.mllib.util.MLUtils にあります。

ベクトルおよび行列の単一インスタンスを変換するためのユーティリティメソッドも利用可能です。mllib.linalg.Vector / mllib.linalg.MatrixasML メソッドを使用して ml.linalg 型に変換し、mllib.linalg.Vectors.fromML / mllib.linalg.Matrices.fromML を使用して mllib.linalg 型に変換します。

from pyspark.mllib.util import MLUtils

# convert DataFrame columns
convertedVecDF = MLUtils.convertVectorColumnsToML(vecDF)
convertedMatrixDF = MLUtils.convertMatrixColumnsToML(matrixDF)
# convert a single vector or matrix
mlVec = mllibVec.asML()
mlMat = mllibMat.asML()

詳細については、MLUtils Python ドキュメントを参照してください。

import org.apache.spark.mllib.util.MLUtils

// convert DataFrame columns
val convertedVecDF = MLUtils.convertVectorColumnsToML(vecDF)
val convertedMatrixDF = MLUtils.convertMatrixColumnsToML(matrixDF)
// convert a single vector or matrix
val mlVec: org.apache.spark.ml.linalg.Vector = mllibVec.asML
val mlMat: org.apache.spark.ml.linalg.Matrix = mllibMat.asML

詳細については、MLUtils Scala ドキュメントを参照してください。

import org.apache.spark.mllib.util.MLUtils;
import org.apache.spark.sql.Dataset;

// convert DataFrame columns
Dataset<Row> convertedVecDF = MLUtils.convertVectorColumnsToML(vecDF);
Dataset<Row> convertedMatrixDF = MLUtils.convertMatrixColumnsToML(matrixDF);
// convert a single vector or matrix
org.apache.spark.ml.linalg.Vector mlVec = mllibVec.asML();
org.apache.spark.ml.linalg.Matrix mlMat = mllibMat.asML();

詳細については、MLUtils Java ドキュメントを参照してください。

非推奨メソッドの削除

spark.mllib および spark.ml パッケージでは、いくつかの非推奨メソッドが削除されました。

後方互換性のない変更の完全なリストは、SPARK-14810 で確認できます。

非推奨および動作の変更

非推奨

spark.mllib および spark.ml パッケージの非推奨には以下が含まれます。

動作の変更

spark.mllib および spark.ml パッケージにおける動作の変更には以下が含まれます。

MLlib 1.5 から 1.6 へのアップグレード

spark.mllib または spark.ml パッケージに後方互換性のない API 変更はありませんが、非推奨と動作の変更があります。

非推奨

動作の変更

MLlib 1.4 から 1.5 へのアップグレード

spark.mllib パッケージでは、後方互換性のない API 変更はありませんが、いくつかの動作変更があります。

spark.ml パッケージには、1 つの後方互換性のない API 変更と 1 つの動作変更があります。

MLlib 1.3 から 1.4 へのアップグレード

spark.mllib パッケージには、いくつかの後方互換性のない変更がありましたが、すべて DeveloperApi または Experimental API にありました。

spark.ml パッケージでは、いくつかの主要な API 変更が発生しました。これには以下が含まれます。

spark.ml API は Spark 1.3 ではアルファコンポーネントであったため、ここではすべての変更をリストしていません。ただし、1.4 以降、spark.ml はアルファコンポーネントではなくなりました。今後のリリースについては、API 変更の詳細を提供します。

MLlib 1.2 から 1.3 へのアップグレード

spark.mllib パッケージでは、いくつかの後方互換性のない変更がありました。最初の変更 ( ALS ) は、Alpha または Experimental としてマークされていないコンポーネントでは唯一のものです。

spark.ml パッケージでは、主な API 変更は Spark SQL からのものです。最も重要な変更を以下に示します。

その他の変更は LogisticRegression にありました。

MLlib 1.1 から 1.2 へのアップグレード

MLlib v1.2 の API 変更は DecisionTree のみにあり、MLlib 1.2 でも引き続き実験的な API です。

  1. (後方互換性のない変更) 分類用の Scala API は、クラス数を示す名前付き引数を受け取ります。MLlib v1.1 では、この引数は Python では numClasses、Scala では numClassesForClassification と呼ばれていました。MLlib v1.2 では、両方の名前が numClasses に設定されています。この numClasses パラメータは、Strategy または DecisionTree の静的 trainClassifier および trainRegressor メソッドを通じて指定されます。

  2. (後方互換性のない変更) Node の API が変更されました。ユーザーが手動で決定木を構築しない限り ( trainClassifier または trainRegressor メソッドを使用する場合を除く) 、これは通常ユーザーコードには影響しません。ツリー Node には、予測ラベルの確率 (分類の場合) を含む、より多くの情報が含まれるようになりました。

  3. 印刷メソッドの出力が変更されました。toString (Scala/Java) および __repr__ (Python) メソッドは以前はモデル全体を印刷していましたが、現在は概要を印刷します。モデル全体については、toDebugString を使用してください。

Spark ディストリビューションの例および 決定木ガイドの例は、これに応じて更新されました。

MLlib 1.0 から 1.1 へのアップグレード

MLlib v1.1 の API 変更は DecisionTree のみにあり、MLlib 1.1 でも引き続き実験的な API です。

  1. (後方互換性のない変更) ツリーの深さの意味が 1 だけ変更され、scikit-learn および rpart のツリーの実装と一致するようになりました。MLlib v1.0 では、深さ 1 のツリーは 1 つのリーフノードを持ち、深さ 2 のツリーは 1 つのルートノードと 2 つのリーフノードを持っていました。MLlib v1.1 では、深さ 0 のツリーは 1 つのリーフノードを持ち、深さ 1 のツリーは 1 つのルートノードと 2 つのリーフノードを持っています。この深さは、StrategymaxDepth パラメータ、または DecisionTree の静的 trainClassifier および trainRegressor メソッドを通じて指定されます。

  2. (非後方互換性のない変更) DecisionTree を構築するには、古いパラメータクラス Strategy を使用するのではなく、新しく追加された trainClassifier および trainRegressor メソッドの使用を推奨します。これらの新しいトレーニングメソッドは、分類と回帰を明示的に分離し、特殊化されたパラメータタイプを単純な String タイプに置き換えます。

推奨される新しい trainClassifier および trainRegressor の例は、決定木ガイドに示されています。

MLlib 0.9 から 1.0 へのアップグレード

MLlib v1.0 では、密および疎入力を統一的にサポートしていますが、これによりいくつかの後方互換性のない変更が発生します。データが疎の場合、ストレージと計算の両方で疎性を活用するために、疎形式で保存してください。詳細は以下のとおりです。