移行ガイド: MLlib (機械学習)
- 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へのアップグレード
- MLlib 1.5から1.6へのアップグレード
- MLlib 1.4から1.5へのアップグレード
- MLlib 1.3から1.4へのアップグレード
- MLlib 1.2から1.3へのアップグレード
- MLlib 1.1から1.2へのアップグレード
- MLlib 1.0から1.1へのアップグレード
- MLlib 0.9から1.0へのアップグレード
この移行ガイドでは、MLlibに固有の項目について説明していることに注意してください。DataFrameベースのAPIでMLlibをより新しいバージョンに移行する際には、SQLの移行に関する多くの項目を適用できます。「移行ガイド: SQL、データセット、データフレーム」を参照してください。
MLlib 2.4から3.0へのアップグレード
破壊的変更
- 2.3で非推奨となった
OneHotEncoder
は3.0で削除され、OneHotEncoderEstimator
はOneHotEncoder
に名前が変更されました。 - 2.3で非推奨となった
org.apache.spark.ml.image.ImageSchema.readImages
は3.0で削除されました。代わりにspark.read.format('image')
を使用してください。 - 2.1で非推奨となったパラメーターInt
runs
を持つorg.apache.spark.mllib.clustering.KMeans.train
は3.0で削除されました。代わりにruns
なしでtrain
メソッドを使用してください。 - 2.0で非推奨となった
org.apache.spark.mllib.classification.LogisticRegressionWithSGD
は3.0で削除されました。代わりにorg.apache.spark.ml.classification.LogisticRegression
またはspark.mllib.classification.LogisticRegressionWithLBFGS
を使用してください。 - 2.1で非推奨となった
org.apache.spark.mllib.feature.ChiSqSelectorModel.isSorted
は3.0で削除されました。サブクラスで使用することを意図していません。 - 2.0で非推奨となった
org.apache.spark.mllib.regression.RidgeRegressionWithSGD
は3.0で削除されました。代わりにelasticNetParam
= 0.0でorg.apache.spark.ml.regression.LinearRegression
を使用してください。デフォルトのregParam
はRidgeRegressionWithSGD
では0.01ですが、LinearRegression
では0.0であることに注意してください。 - 2.0で非推奨となった
org.apache.spark.mllib.regression.LassoWithSGD
は3.0で削除されました。代わりにelasticNetParam
= 1.0でorg.apache.spark.ml.regression.LinearRegression
を使用してください。デフォルトのregParam
はLassoWithSGD
では0.01ですが、LinearRegression
では0.0であることに注意してください。 - 2.0で非推奨となった
org.apache.spark.mllib.regression.LinearRegressionWithSGD
は3.0で削除されました。代わりにorg.apache.spark.ml.regression.LinearRegression
またはLBFGS
を使用してください。 - 2.1で非推奨となった
org.apache.spark.mllib.clustering.KMeans.getRuns
とsetRuns
は3.0で削除されました。Spark 2.0.0以降、効果はありません。 - 2.4で非推奨となった
org.apache.spark.ml.LinearSVCModel.setWeightCol
は3.0で削除されました。ユーザー向けではありません。 - 3.0から、
org.apache.spark.ml.classification.MultilayerPerceptronClassificationModel
は、トレーニングパラメーターを公開するためにMultilayerPerceptronParams
を拡張します。結果として、MultilayerPerceptronClassificationModel
のlayers
がArray[Int]
からIntArrayParam
に変更されました。ユーザーは、レイヤーのサイズを取得するためにMultilayerPerceptronClassificationModel.layers
の代わりにMultilayerPerceptronClassificationModel.getLayers
を使用する必要があります。 - 2.4.5で非推奨となった
org.apache.spark.ml.classification.GBTClassifier.numTrees
は3.0で削除されました。代わりにgetNumTrees
を使用してください。 - 2.4で非推奨となった
org.apache.spark.ml.clustering.KMeansModel.computeCost
は3.0で削除されました。代わりにClusteringEvaluator
を使用してください。 - 2.0で非推奨となった
org.apache.spark.mllib.evaluation.MulticlassMetrics
のメンバー変数precision
は3.0で削除されました。代わりにaccuracy
を使用してください。 - 2.0で非推奨となった
org.apache.spark.mllib.evaluation.MulticlassMetrics
のメンバー変数recall
は3.0で削除されました。代わりにaccuracy
を使用してください。 - 2.0で非推奨となった
org.apache.spark.mllib.evaluation.MulticlassMetrics
のメンバー変数fMeasure
は3.0で削除されました。代わりにaccuracy
を使用してください。 - 2.0で非推奨となった
org.apache.spark.ml.util.GeneralMLWriter.context
は3.0で削除されました。代わりにsession
を使用してください。 - 2.0で非推奨となった
org.apache.spark.ml.util.MLWriter.context
は3.0で削除されました。代わりにsession
を使用してください。 - 2.0で非推奨となった
org.apache.spark.ml.util.MLReader.context
は3.0で削除されました。代わりにsession
を使用してください。 abstract class UnaryTransformer[IN, OUT, T <: UnaryTransformer[IN, OUT, T]]
は、3.0でabstract class UnaryTransformer[IN: TypeTag, OUT: TypeTag, T <: UnaryTransformer[IN, OUT, T]]
に変更されました。
非推奨と動作の変更
非推奨
- SPARK-11215:
StringIndexerModel
のlabels
は非推奨となり、3.1.0で削除される予定です。代わりにlabelsArray
を使用してください。 - SPARK-25758:
BisectingKMeansModel
のcomputeCost
は非推奨となり、将来のバージョンで削除される予定です。代わりにClusteringEvaluator
を使用してください。
動作の変更
- SPARK-11215:Spark 2.4以前のバージョンでは、
StringIndexer
のstringOrderType
パラメーターとしてfrequencyDesc
またはfrequencyAsc
を指定した場合、頻度が等しい場合、文字列の順序は未定義でした。Spark 3.0以降、頻度が等しい文字列はさらにアルファベット順にソートされます。また、Spark 3.0以降、StringIndexer
は複数の列のエンコードをサポートしています。 - SPARK-20604:3.0リリースより前の
Imputer
では、入力列がDoubleまたはFloatである必要がありました。3.0では、この制限が解除され、Imputer
はすべての数値型を処理できるようになりました。 - SPARK-23469:Spark 3.0では、
HashingTF
トランスフォーマーは、要素をベクトルにハッシュするために、murmur3ハッシュ関数の修正された実装を使用します。Spark 3.0のHashingTF
は、Spark 2のときよりも要素をベクトルの異なる位置にマップします。ただし、Spark 2.xで作成され、Spark 3.0でロードされたHashingTF
は、以前のハッシュ関数をそのまま使用し、動作は変更されません。 - SPARK-28969:PySparkの
OneVsRestModel
のsetClassifier
メソッドは、Scalaの実装とのパリティを保つために3.0で削除されました。呼び出し側は、作成後にモデルの分類器を設定する必要はありません。 - SPARK-25790:PCAは、Spark 3.0で65535列以上の行列のサポートを追加しました。
- SPARK-28927:非決定的な入力データにALSモデルを適合させる場合、以前は再実行が発生すると、ユーザー/アイテムブロックの不一致によってArrayIndexOutOfBoundsExceptionが発生しました。3.0以降では、より明確なメッセージを含むSparkExceptionがスローされ、元のArrayIndexOutOfBoundsExceptionはラップされます。
- SPARK-29232:3.0リリースより前は、
RandomForestRegressionModel
は、下のDecisionTreeRegressionModelのパラメーターマップを更新しませんでした。これは3.0で修正されました。
MLlib 2.2から2.3へのアップグレード
破壊的変更
- ロジスティック回帰モデルのサマリーのクラスとトレイトの階層が、よりクリーンになり、マルチクラスのサマリーの追加に対応できるように変更されました。これは、
LogisticRegressionTrainingSummary
をBinaryLogisticRegressionTrainingSummary
にキャストするユーザーコードにとって破壊的な変更です。ユーザーは代わりにmodel.binarySummary
メソッドを使用する必要があります。詳細については SPARK-17139 を参照してください (注 これはExperimental
API です)。これは、Python のsummary
メソッドには影響 *しません*。多項分布の場合と二値の場合の両方で正しく機能します。
非推奨と動作の変更
非推奨
OneHotEncoder
は非推奨となり、3.0
で削除されます。これは新しいOneHotEncoderEstimator
に置き換えられました ( SPARK-13030 を参照してください)。注意:OneHotEncoderEstimator
は3.0
でOneHotEncoder
にリネームされます (ただし、OneHotEncoderEstimator
はエイリアスとして保持されます)。
動作の変更
- SPARK-21027:
OneVsRest
で使用されるデフォルトの並列処理は、1 (つまり、シリアル) に設定されるようになりました。2.2
以前のバージョンでは、並列処理のレベルは Scala のデフォルトのスレッドプールサイズに設定されていました。 - SPARK-22156:
numIterations
が1
より大きく設定されている場合、Word2Vec
の学習率の更新が正しくありませんでした。これにより、2.3
以前のバージョンとトレーニング結果が異なります。 - SPARK-21681: 一部の特徴量がゼロ分散の場合に、誤った係数になる多項ロジスティック回帰のエッジケースのバグを修正しました。
- SPARK-16957: ツリーアルゴリズムで、分割値に中間点を使用するようになりました。これにより、モデルトレーニングの結果が変わる可能性があります。
- SPARK-14657: インターセプトなしで
RFormula
によって生成される特徴量が、R の出力と一致しない問題を修正しました。これにより、このシナリオでのモデルトレーニングの結果が変わる可能性があります。
MLlib 2.1から2.2へのアップグレード
破壊的変更
破壊的な変更はありません。
非推奨と動作の変更
非推奨
非推奨はありません。
動作の変更
- SPARK-19787:
ALS.train
メソッド (DeveloperApi
とマーク) のregParam
のデフォルト値が、1.0
から0.1
に変更されました。注意:これは、ALS
エスティメータまたはモデル、および MLlib のALS
クラスには影響 *しません*。 - SPARK-14772:
Param.copy
メソッドの Python API と Scala API の間の不整合を修正しました。 - SPARK-11569:
StringIndexer
は、NULL
値を、見えない値と同じように処理するようになりました。以前は、handleInvalid
パラメータの設定に関係なく、常に例外がスローされていました。
MLlib 2.0から2.1へのアップグレード
破壊的変更
非推奨のメソッドを削除しました
feature.ChiSqSelectorModel
のsetLabelCol
classification.RandomForestClassificationModel
のnumTrees
(これは、numTrees
という名前のパラメータを指すようになりました)regression.RandomForestRegressionModel
のnumTrees
(これは、numTrees
という名前のパラメータを指すようになりました)regression.LinearRegressionSummary
のmodel
PipelineStage
のvalidateParams
Evaluator
のvalidateParams
非推奨と動作の変更
非推奨
- SPARK-18592:
DecisionTreeClassificationModel
、GBTClassificationModel
、RandomForestClassificationModel
、DecisionTreeRegressionModel
、GBTRegressionModel
、およびRandomForestRegressionModel
の入力/出力列パラメータを除くすべてのパラメータセッターメソッドを非推奨にします。
動作の変更
- SPARK-17870:
ChiSqSelector
のバグを修正しました。これにより、結果が変更される可能性があります。現在、ChiSquareSelector
は、生の統計ではなく pValue を使用して、上位の固定数の特徴量を選択します。 - SPARK-3261:
KMeans
は、k 個の異なるセントロイドが利用できない場合や選択されていない場合に、k 個より少ないクラスター中心を返す可能性があります。 - SPARK-17389:
KMeans
は、k-means|| 初期化モードのデフォルトのステップ数を 5 から 2 に減らします。
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.Matrix
の asML
メソッドを使用して 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
パッケージで、いくつかの非推奨メソッドが削除されました
ml.evaluation.BinaryClassificationEvaluator
のsetScoreCol
spark.ml
のLinearRegression
およびLogisticRegression
のweights
mllib.optimization.LBFGS
のsetMaxNumIterations
(DeveloperApi
としてマーク)mllib.rdd.RDDFunctions
のtreeReduce
およびtreeAggregate
(これらの関数はRDD
で直接使用でき、DeveloperApi
としてマークされていました)mllib.tree.configuration.Strategy
のdefaultStrategy
mllib.tree.Node
のbuild
mllib.util.MLUtils
のマルチクラス用の libsvm ローダーと load/save labeledData メソッド
破壊的な変更の完全なリストについては、SPARK-14810 を参照してください。
非推奨と動作の変更
非推奨
spark.mllib
パッケージと spark.ml
パッケージの非推奨には以下が含まれます
- SPARK-14984:
spark.ml.regression.LinearRegressionSummary
で、model
フィールドが非推奨になりました。 - SPARK-13784:
spark.ml.regression.RandomForestRegressionModel
およびspark.ml.classification.RandomForestClassificationModel
で、numTrees
パラメータがgetNumTrees
メソッドに優先して非推奨になりました。 - SPARK-13761:
spark.ml.param.Params
で、validateParams
メソッドが非推奨になりました。オーバーライドされたメソッドのすべての機能は、対応するtransformSchema
に移動します。 - SPARK-14829:
spark.mllib
パッケージでは、LinearRegressionWithSGD
、LassoWithSGD
、RidgeRegressionWithSGD
、およびLogisticRegressionWithSGD
が非推奨になりました。spark.ml.regression.LinearRegression
およびspark.ml.classification.LogisticRegression
を使用することをお勧めします。 - SPARK-14900:
spark.mllib.evaluation.MulticlassMetrics
では、precision
、recall
、およびfMeasure
パラメータが、accuracy
に優先して非推奨になりました。 - SPARK-15644:
spark.ml.util.MLReader
およびspark.ml.util.MLWriter
では、context
メソッドがsession
に優先して非推奨になりました。 spark.ml.feature.ChiSqSelectorModel
において、setLabelCol
メソッドは、ChiSqSelectorModel
で使用されていなかったため、非推奨になりました。
動作の変更
spark.mllib
とspark.ml
パッケージにおける動作の変更点は以下の通りです。
- SPARK-7780:
spark.mllib.classification.LogisticRegressionWithLBFGS
は、バイナリ分類においてspark.ml.classification.LogisticRegression
を直接呼び出すようになりました。これにより、spark.mllib.classification.LogisticRegressionWithLBFGS
には以下の動作変更が導入されます。- L1/L2アップデーターを用いたバイナリ分類モデルのトレーニング時、切片は正則化されなくなります。
- ユーザーが正則化なしを設定した場合、特徴量スケーリングの有無にかかわらず、同じ収束率で同じ解が得られます。
- SPARK-13429:
spark.ml.classification.LogisticRegression
とのより良い一貫性のある結果を提供するために、spark.mllib.classification.LogisticRegressionWithLBFGS
のデフォルト値であるconvergenceTol
が1E-4から1E-6に変更されました。 - SPARK-12363:
PowerIterationClustering
のバグが修正され、結果が変更される可能性があります。 - SPARK-13048:
EM
オプティマイザーを使用するLDA
は、チェックポイントが使用されている場合、デフォルトで最後のチェックポイントを保持します。 - SPARK-12153:
Word2Vec
は、文の境界を考慮するようになりました。以前は、正しく処理されていませんでした。 - SPARK-10574:
HashingTF
は、spark.ml
とspark.mllib
の両方で、デフォルトのハッシュアルゴリズムとしてMurmurHash3
を使用します。 - SPARK-14768: PySparkの
Param
のexpectedType
引数が削除されました。 - SPARK-14931: ScalaとPythonのパイプライン間で一致していなかった一部のデフォルトの
Param
値が変更されました。 - SPARK-13600:
QuantileDiscretizer
は、分割を見つけるためにspark.sql.DataFrameStatFunctions.approxQuantile
を使用するようになりました(以前はカスタムサンプリングロジックを使用していました)。同じ入力データとパラメーターでも、出力バケットは異なります。
MLlib 1.5から1.6へのアップグレード
spark.mllib
またはspark.ml
パッケージには、破壊的なAPI変更はありませんが、非推奨や動作の変更があります。
非推奨
- SPARK-11358:
spark.mllib.clustering.KMeans
では、runs
パラメーターが非推奨になりました。 - SPARK-10592:
spark.ml.classification.LogisticRegressionModel
およびspark.ml.regression.LinearRegressionModel
では、weights
フィールドが、新しい名前coefficients
に置き換えられて非推奨になりました。これにより、アルゴリズムに与えられるインスタンス(行)の「weights」との混同を避けることができます。
動作の変更
- SPARK-7770:
spark.mllib.tree.GradientBoostedTrees
:validationTol
は、1.6でセマンティクスが変更されました。以前は、エラーの絶対的な変化の閾値でした。現在では、GradientDescent
のconvergenceTol
の動作に似ています。大きなエラーの場合、相対誤差(前のエラーに対する相対誤差)を使用し、小さなエラー(< 0.01
)の場合、絶対誤差を使用します。 - SPARK-11069:
spark.ml.feature.RegexTokenizer
: 以前は、トークン化する前に文字列を小文字に変換していませんでした。現在では、デフォルトで小文字に変換しますが、小文字にしないオプションもあります。これは、より単純なTokenizer
トランスフォーマーの動作と一致します。
MLlib 1.4から1.5へのアップグレード
spark.mllib
パッケージには、破壊的なAPI変更はありませんが、いくつかの動作変更があります。
- SPARK-9005:
RegressionMetrics.explainedVariance
は、回帰二乗和の平均値を返します。 - SPARK-8600:
NaiveBayesModel.labels
がソートされるようになりました。 - SPARK-3382:
GradientDescent
のデフォルトの収束許容値は1e-3
であるため、反復が1.4よりも早く終了する可能性があります。
spark.ml
パッケージには、1つの破壊的なAPI変更と1つの動作変更があります。
- SPARK-9268: Scalaコンパイラのバグのため、Javaの可変長引数サポートが
Params.setDefault
から削除されました。 - SPARK-10097:
Evaluator.isLargerBetter
が、メトリックの順序を示すために追加されました。RMSEのようなメトリックは、1.4のように符号を反転させなくなりました。
MLlib 1.3から1.4へのアップグレード
spark.mllib
パッケージには、いくつかの破壊的な変更がありましたが、すべてDeveloperApi
またはExperimental
APIに関するものです。
- 勾配ブースティング木
- (破壊的変更)
Loss.gradient
メソッドのシグネチャが変更されました。これは、GBT用に独自の損失を記述したユーザーのみが問題になります。 - (破壊的変更)
BoostingStrategy
のケースクラスのapply
およびcopy
メソッドは、ケースクラスフィールドの変更のために変更されました。これは、BoostingStrategy
を使用してGBTパラメーターを設定するユーザーにとって問題になる可能性があります。
- (破壊的変更)
- (破壊的変更)
LDA.run
の戻り値が変更されました。具体的なクラスDistributedLDAModel
の代わりに、抽象クラスLDAModel
を返すようになりました。LDAModel
型のオブジェクトは、最適化アルゴリズムに応じて適切な具体的な型にキャストできます。
spark.ml
パッケージでは、以下を含むいくつかの主要なAPI変更が行われました。
- パラメーターを指定するための
Param
およびその他のAPI - パイプラインコンポーネント用の
uid
一意ID - 特定のクラスの再編成
spark.ml
APIはSpark 1.3のアルファコンポーネントであったため、ここで全ての変更を列挙しません。ただし、1.4以降spark.ml
はアルファコンポーネントではなくなったため、今後のリリースでAPI変更の詳細を提供します。
MLlib 1.2から1.3へのアップグレード
spark.mllib
パッケージには、いくつかの破壊的な変更がありました。最初の変更(ALS
内)は、アルファまたは実験的とマークされていないコンポーネントでの唯一の変更です。
- (破壊的変更)
ALS
では、不要なメソッドsolveLeastSquares
が削除されました。DeveloperApi
メソッドanalyzeBlocks
も削除されました。 - (破壊的変更)
StandardScalerModel
はアルファコンポーネントのままです。その中で、variance
メソッドはstd
メソッドに置き換えられました。元のvariance
メソッドによって返される列分散値を計算するには、std
によって返される標準偏差値を単純に二乗します。 - (破壊的変更)
StreamingLinearRegressionWithSGD
は実験的コンポーネントのままです。その中で、2つの変更がありました。- 引数を取るコンストラクターは削除され、デフォルトのコンストラクターにパラメーター設定メソッドを加えたビルダーパターンに置き換えられました。
- 変数
model
が公開されなくなりました。
- (破壊的変更)
DecisionTree
は実験的コンポーネントのままです。その中および関連するクラスには、いくつかの変更がありました。DecisionTree
では、非推奨のクラスメソッドtrain
が削除されました。(オブジェクト/静的train
メソッドは残っています。)Strategy
では、checkpointDir
パラメーターが削除されました。チェックポイントは引き続きサポートされていますが、チェックポイントディレクトリは、ツリーおよびツリーアンサンブルトレーニングを呼び出す前に設定する必要があります。
PythonMLlibAPI
(MLlibのScala/JavaとPython間のインターフェイス)はパブリックAPIでしたが、現在はprivate[python]
と宣言されたプライベートになっています。これは外部での使用を意図したものではありませんでした。- 線形回帰(Lasso回帰とリッジ回帰を含む)では、二乗損失が2で割られるようになりました。したがって、1.2と同じ結果を生成するには、正則化パラメーターを2で割り、ステップサイズを2倍にする必要があります。
spark.ml
パッケージでは、主なAPI変更はSpark SQLによるものです。最も重要な変更点を以下に示します。
- 古いSchemaRDDは、多少変更されたAPIを持つDataFrameに置き換えられました。
spark.ml
の以前はSchemaRDDを使用していたすべてのアルゴリズムは、現在DataFrameを使用します。 - Spark 1.2では、
SQLContext
のインスタンスであるsqlContext
でimport sqlContext._
を呼び出すことで、LabeledPoint
のRDD
からSchemaRDD
への暗黙的な変換を使用していました。これらの暗黙的な変換は移動されたため、現在ではimport sqlContext.implicits._
を呼び出します。 - SQLのJava APIもそれに応じて変更されています。詳細については、上記の例とSpark SQLプログラミングガイドを参照してください。
その他の変更はLogisticRegression
で行われました。
- 出力カラム
scoreCol
(デフォルト値は「score」)の名前が、probabilityCol
(デフォルト値は「probability」)に変更されました。タイプは元々Double
(クラス1.0の確率)でしたが、将来的なマルチクラス分類をサポートするため、Vector
(各クラスの確率)になりました。 - Spark 1.2では、
LogisticRegressionModel
に切片が含まれていませんでした。Spark 1.3では切片が含まれるようになりました。しかし、spark.mllib.LogisticRegressionWithLBFGSのデフォルト設定を使用しているため、常に0.0になります。切片を使用するオプションは将来追加される予定です。
MLlib 1.1から1.2へのアップグレード
MLlib v1.2でのAPI変更は、DecisionTree
のみです。これはMLlib 1.2でも引き続き実験的なAPIです。
-
(破壊的な変更) 分類のためのScala APIでは、クラス数を指定する名前付き引数を受け取るようになりました。MLlib v1.1では、この引数はPythonでは
numClasses
、ScalaではnumClassesForClassification
と呼ばれていました。MLlib v1.2では、名前は両方ともnumClasses
に設定されています。このnumClasses
パラメータは、Strategy
を介して、またはDecisionTree
の静的trainClassifier
およびtrainRegressor
メソッドを介して指定します。 -
(破壊的な変更)
Node
のAPIが変更されました。これは、ユーザーがtrainClassifier
またはtrainRegressor
メソッドを使用せずに、手動で決定木を構築する場合を除き、通常はユーザーコードに影響を与えません。ツリーのNode
は、予測されたラベルの確率(分類の場合)など、より多くの情報を含むようになりました。 -
出力メソッドの出力が変更されました。
toString
(Scala/Java) および__repr__
(Python) メソッドは、以前は完全なモデルを出力していましたが、現在は概要を出力します。完全なモデルについては、toDebugString
を使用してください。
Sparkディストリビューション内の例と、決定木ガイドの例は、それに応じて更新されています。
MLlib 1.0から1.1へのアップグレード
MLlib v1.1でのAPI変更は、DecisionTree
のみです。これはMLlib 1.1でも引き続き実験的なAPIです。
-
(破壊的な変更) 木の深さの意味が、scikit-learn および rpart における木の深さの実装と一致するように、1だけ変更されました。MLlib v1.0では、深さ1の木には1つのリーフノードがあり、深さ2の木には1つのルートノードと2つのリーフノードがありました。MLlib v1.1では、深さ0の木には1つのリーフノードがあり、深さ1の木には1つのルートノードと2つのリーフノードがあります。この深さは、
Strategy
のmaxDepth
パラメータで指定するか、DecisionTree
の静的なtrainClassifier
およびtrainRegressor
メソッドを介して指定します。 -
(非破壊的な変更) 古いパラメータクラス
Strategy
を使用するよりも、新しく追加されたtrainClassifier
およびtrainRegressor
メソッドを使用して、DecisionTree
を構築することを推奨します。これらの新しいトレーニングメソッドは、分類と回帰を明確に分離し、特殊なパラメータ型を単純なString
型に置き換えます。
新しく推奨される trainClassifier
および trainRegressor
の例は、決定木ガイドに記載されています。
MLlib 0.9から1.0へのアップグレード
MLlib v1.0では、密な入力と疎な入力の両方を統合された方法でサポートしており、いくつかの破壊的な変更が導入されています。データが疎な場合は、ストレージと計算の両方で疎性を活用するために、密な形式ではなく疎な形式で保存してください。詳細を以下に説明します。