古いものからの移設ガイド - MLlib

最新のSparkバージョンのための移行ガイドはMLlib ガイド メインページにあります。

1.6 から 2.0

破壊的な変更

Spark 2.0には幾つかの破壊的な変更がありました。それらは以下で説明されます。

データフレームベースのAPIのための線形代数クラス

Sparkの線形代数の依存物は新しいプロジェクト mllib-local に移動しました (SPARK-13944を見てください)。この変更の一部として、線形代数クラスは新しいパッケージ spark.ml.linalgにコピーされました。spark.ml内のデータフレームベースのAPI は、今は spark.ml.linalg クラスに依存し、結果として2,3の破壊的な変更を引き起こし、 様々なモデルクラスの中に大部分があります (完全なリストは SPARK-14810 を見てください)。

注意: spark.mllib内のRDDベースのAPIは以前のパッケージのspark.mllib.linalgに依存し続けています。

ベクトルとマトリックスの変換

ほとんどのパイプラインコンポーネントは読み込みの後方互換性をサポートしますが、ベクトルあるいはマトリックスのカラムを含むSparkのバージョン2.0未満のいくつかの既存の DataFrames とパイプラインは、新しいspark.mlのベクトルとマトリックスの種類に移設しなければならないかも知れません。spark.mllib.linalg から spark.ml.linalgの種類にDataFrame カラムを変換するためのユーティリティ(逆もまた同じ)は、spark.mllib.util.MLUtilsで見つかります。

ベクトルとマトリックスの1つのインスタンスを変換するために利用可能なユーティリティメソッドもあります。ml.linalg の種類に変換するためにはmllib.linalg.Vector / mllib.linalg.MatrixasMLメソッドを、mllib.linalg の種類に変換するためには mllib.linalg.Vectors.fromML / mllib.linalg.Matrices.fromML を使ってください。

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 ドキュメントを参照してください。

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 ドキュメントを参照してください。

非推奨のメソッドは削除されました。

spark.mllibspark.ml パッケージ内のいくつかの非推奨のメソッドは削除されました。

破壊的な変更の完全なリストはSPARK-14810で見つけることができます。

非推奨と挙動の変更

非推奨

spark.mllibspark.ml パッケージ内の非推奨は以下を含みます:

挙動の変更

spark.mllibspark.ml パッケージ内の挙動の変更は以下を含みます:

1.5から1.6

spark.mllib あるいは spark.mlパッケージの中で、APIの破壊的な変更はありませんが、非推奨と挙動の変更があります。

非推奨:

挙動の変更:

1.4から1.5

spark.mllib パッケージの中では、幾つかの挙動の変更がありますが、APIを損なう変更はありません。

spark.ml パッケージの中では、一つの破壊的なAPIの変更と、一つの挙動の変更があります:

1.3から1.4

spark.mllibパッケージの中では、幾つかの非互換の変更がありますが、全ては開発中のAPI あるいは 実験的な API です。

spark.ml パッケージの中では、幾つかの主要なAPIの変更がありました。以下を含みます:

spark.ml API はSPark1.3でアルファコンポーネントだったため、ここでは全ての変更をリスト化しません。しかし、1.4からのspark.mlはもうアルファコンポーネントではないため、将来のリリースのためのAPIの変更の詳細を提供するつもりです。

1.2から1.3

spark.mllibパッケージの中で、幾つかの破壊的な変更がありました。最初の変更(ALS) はアルファあるいは実験的として印を付けてられなかったコンポーネントの中で唯一のものです。

spark.ml パッケージで、Spark SQLの主要なAPIの変更があります。最も重要な変更を以下にリスト化します:

他の変更はLogisticRegressionです:

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 static trainClassifiertrainRegressorメソッドを使って指定されます。

  2. (破壊的な変更) NodeのためのAPIが変更されました。(trainClassifier あるいは trainRegressor メソッドを使う代わりに)ユーザが手動で決定木を構築していない場合は、これは一般的にユーザコードには影響しません。ツリーのNodeは、予想されたラベルの確率(分類のため)を含むより多くの情報を、今は含んでいます。

  3. Printing メソッドの出力が代わりました。toString (Scala/Java) と__repr__ (Python) メソッドが完全なモデルを出力するために使われていました; 今では概要を出力します。完全なモデルについては、toDebugStringを使ってください。

Spark配布物の中の例と、決定木のガイドの中の例が、それに応じて更新されました。

1.0から1.1

MLlib v1.1での唯一のAPIの変更は DecisionTreeで、これはMLlib 1.1の実験的なAPIのままです。

  1. (破壊的な変更) scikit-learnrpartの中での木の実装と合わせるために、木の深さの意味が1つだけ変更されました。MLlib v1.0では、深さ1の木は1つの葉を持ち、深さ2の木は1つのrootノードと2つの葉ノードを持っていました。MLlib v1.1では、a 深さ0の木は1つの葉を持ち、深さ1の木は1つのノードと2つの葉ノードを持ちます。この深さはStrategyでのmaxDepth パラメータ、あるいは DecisionTree static trainClassifiertrainRegressor メソッドによって指定されます。

  2. (破壊的な変更) DecisionTreeを構築するためには、古いパラメータクラスStrategyの使用ではなく、新しく追加されたtrainClassifiertrainRegressor メソッドを使うことをお勧めします。これらの新しい訓練メソッドは明示的に分類と回帰を分割し、それらは特別なパラメータタイプ を単純なStringタイプに置き換えます。

お勧めのtrainClassifiertrainRegressor の新しい例は、決定木ガイドの中で与えられます。

0.0から1.0

MLlib v1.0では、統一された方法でdenseとsparseの両方をサポートします。これは新しい破壊的な変更を導入します。もしデータがsparseであれば、ストレージおよび計算の両方でのまばらさを利用するために、denseの代わりにsparse形式でそれを格納してください。詳細は以下で説明されます。

TOP
inserted by FC2 system