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

この移行ガイドでは、MLlibに固有の項目について説明していることに注意してください。DataFrameベースのAPIでMLlibをより新しいバージョンに移行する際には、SQLの移行に関する多くの項目を適用できます。「移行ガイド: SQL、データセット、データフレーム」を参照してください。

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 に引き続き依存します。

ベクターとマトリックスの変換

ほとんどのパイプラインコンポーネントはロードの互換性をサポートしていますが、ベクターまたはマトリックスの列を含む、2.0 より前の Spark バージョンの一部の既存の DataFrames およびパイプラインは、新しい spark.ml ベクターおよびマトリックス型に移行する必要がある場合があります。 DataFrame 列を spark.mllib.linalg から spark.ml.linalg 型に (およびその逆も) 変換するユーティリティは、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.mllibspark.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内)は、アルファまたは実験的とマークされていないコンポーネントでの唯一の変更です。

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. (破壊的な変更) 木の深さの意味が、scikit-learn および rpart における木の深さの実装と一致するように、1だけ変更されました。MLlib v1.0では、深さ1の木には1つのリーフノードがあり、深さ2の木には1つのルートノードと2つのリーフノードがありました。MLlib v1.1では、深さ0の木には1つのリーフノードがあり、深さ1の木には1つのルートノードと2つのリーフノードがあります。この深さは、StrategymaxDepth パラメータで指定するか、DecisionTree の静的な trainClassifier および trainRegressor メソッドを介して指定します。

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

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

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

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