移行ガイド:MLlib (機械学習)
- 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 へのアップグレード
- 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、Datasets、DataFrame を参照してください。
MLlib 3.5 から 4.0 へのアップグレード
後方互換性のない変更
後方互換性のない変更はありません。
非推奨および動作の変更
非推奨
非推奨はありません。
動作の変更
- SPARK-51132:PMML モデルのエクスポートによってエクスポートされた PMML 形式モデルの PMML XML スキーマバージョンが、
PMML-4_3からPMML-4_4にアップグレードされました。
MLlib 2.4 から 3.0 へのアップグレード
後方互換性のない変更
OneHotEncoderは 2.3 で非推奨となり、3.0 で削除され、OneHotEncoderEstimatorはOneHotEncoderにリネームされました。org.apache.spark.ml.image.ImageSchema.readImagesは 2.3 で非推奨となり、3.0 で削除されました。spark.read.format('image')を使用してください。- パラメータ Int
runsを持つorg.apache.spark.mllib.clustering.KMeans.trainは 2.1 で非推奨となり、3.0 で削除されました。runsを持たないtrainメソッドを使用してください。 org.apache.spark.mllib.classification.LogisticRegressionWithSGDは 2.0 で非推奨となり、3.0 で削除されました。org.apache.spark.ml.classification.LogisticRegressionまたはspark.mllib.classification.LogisticRegressionWithLBFGSを使用してください。org.apache.spark.mllib.feature.ChiSqSelectorModel.isSortedは 2.1 で非推奨となり、3.0 で削除されました。サブクラスが使用することを意図していません。org.apache.spark.mllib.regression.RidgeRegressionWithSGDは 2.0 で非推奨となり、3.0 で削除されました。elasticNetParam= 0.0 を指定したorg.apache.spark.ml.regression.LinearRegressionを使用してください。RidgeRegressionWithSGDのデフォルトのregParamは 0.01 ですが、LinearRegressionのデフォルトは 0.0 です。org.apache.spark.mllib.regression.LassoWithSGDは 2.0 で非推奨となり、3.0 で削除されました。elasticNetParam= 1.0 を指定したorg.apache.spark.ml.regression.LinearRegressionを使用してください。LassoWithSGDのデフォルトのregParamは 0.01 ですが、LinearRegressionのデフォルトは 0.0 です。org.apache.spark.mllib.regression.LinearRegressionWithSGDは 2.0 で非推奨となり、3.0 で削除されました。org.apache.spark.ml.regression.LinearRegressionまたはLBFGSを使用してください。org.apache.spark.mllib.clustering.KMeans.getRunsおよびsetRunsは 2.1 で非推奨となり、3.0 で削除されました。Spark 2.0.0 以降は効果がありません。org.apache.spark.ml.LinearSVCModel.setWeightColは 2.4 で非推奨となり、3.0 で削除されました。ユーザーが使用することを意図していません。- 3.0 から、
org.apache.spark.ml.classification.MultilayerPerceptronClassificationModelはMultilayerPerceptronParamsを継承してトレーニングパラメータを公開するようになりました。その結果、MultilayerPerceptronClassificationModelのlayersはArray[Int]からIntArrayParamに変更されました。レイヤーのサイズを取得するには、MultilayerPerceptronClassificationModel.layersの代わりにMultilayerPerceptronClassificationModel.getLayersを使用する必要があります。 org.apache.spark.ml.classification.GBTClassifier.numTreesは 2.4.5 で非推奨となり、3.0 で削除されました。代わりにgetNumTreesを使用してください。org.apache.spark.ml.clustering.KMeansModel.computeCostは 2.4 で非推奨となり、3.0 で削除されました。ClusteringEvaluatorを使用してください。org.apache.spark.mllib.evaluation.MulticlassMetricsのメンバ変数precisionは 2.0 で非推奨となり、3.0 で削除されました。accuracyを使用してください。org.apache.spark.mllib.evaluation.MulticlassMetricsのメンバ変数recallは 2.0 で非推奨となり、3.0 で削除されました。accuracyを使用してください。org.apache.spark.mllib.evaluation.MulticlassMetricsのメンバ変数fMeasureは 2.0 で非推奨となり、3.0 で削除されました。accuracyを使用してください。org.apache.spark.ml.util.GeneralMLWriter.contextは 2.0 で非推奨となり、3.0 で削除されました。sessionを使用してください。org.apache.spark.ml.util.MLWriter.contextは 2.0 で非推奨となり、3.0 で削除されました。sessionを使用してください。org.apache.spark.ml.util.MLReader.contextは 2.0 で非推奨となり、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 では、
HashingTFTransformer は、murmur3 ハッシュ関数の修正された実装を使用して要素をベクトルにハッシュします。HashingTFは Spark 3.0 では 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は下位の DecisionTreeRegressionModels のパラメータマップを更新しませんでした。これは 3.0 で修正されました。
MLlib 2.2 から 2.3 へのアップグレード
後方互換性のない変更
- ロジスティック回帰モデルのサマリーのクラスとトレイトの階層が、よりクリーンになり、マルチクラスサマリーの追加をより良くサポートするように変更されました。これは、
LogisticRegressionTrainingSummaryをBinaryLogisticRegressionTrainingSummaryにキャストするユーザーコードにとって後方互換性のない変更です。代わりにmodel.binarySummaryメソッドを使用してください。詳細については、SPARK-17139 を参照してください (注意 これはExperimentalAPI です)。これは、多項および二項の両方で正しく機能する 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メソッドのregParamのデフォルト値が1.0から0.1に変更されました (これはDeveloperApiとしてマークされています)。**注意** これは、ALSEstimator または Model、および MLlib のALSクラスには影響しません。 - SPARK-14772:PySpark の
Param.copyメソッドの Python と Scala の API 間の一貫性を修正しました。 - SPARK-11569:
StringIndexerは、handleInvalidパラメータの設定に関わらず、以前は常に例外がスローされていましたが、現在は未検出の値と同様にNULL値を処理するようになりました。
MLlib 2.0 から 2.1 へのアップグレード
後方互換性のない変更
非推奨メソッドの削除
feature.ChiSqSelectorModelのsetLabelColclassification.RandomForestClassificationModelのnumTrees(これは現在、numTreesという名前の Param を参照します)regression.RandomForestRegressionModelのnumTrees(これは現在、numTreesという名前の Param を参照します)regression.LinearRegressionSummaryのmodelPipelineStageのvalidateParamsEvaluatorのvalidateParams
非推奨および動作の変更
非推奨
- SPARK-18592:
DecisionTreeClassificationModel、GBTClassificationModel、RandomForestClassificationModel、DecisionTreeRegressionModel、GBTRegressionModel、RandomForestRegressionModelの入力/出力列 Param を除くすべての Param セッターメソッドを非推奨にする
動作の変更
- SPARK-17870:
ChiSqSelectorのバグを修正しました。このバグにより結果が変更される可能性が高くなります。現在、ChiSquareSelectorは、固定数の上位特徴量を選択するために、生の統計量ではなく p 値を使用します。 - 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 に依存します。
ベクトルと行列の変換
ほとんどのパイプラインコンポーネントはロードのための後方互換性をサポートしていますが、Spark 2.0 より前のバージョンでベクトルまたは行列列を含む既存の DataFrame とパイプラインは、新しい spark.ml のベクトルおよび行列型に移行する必要がある場合があります。spark.mllib.linalg から spark.ml.linalg 型への (およびその逆の) DataFrame 列を変換するためのユーティリティは、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のsetScoreColspark.mlのLinearRegressionおよびLogisticRegressionのweightsmllib.optimization.LBFGSのsetMaxNumIterations(これはDeveloperApiとしてマークされています)mllib.rdd.RDDFunctionsのtreeReduceおよびtreeAggregate(これらの関数はRDDで直接利用可能であり、DeveloperApiとしてマークされていました)mllib.tree.configuration.StrategyのdefaultStrategymllib.tree.Nodeのbuildmllib.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 Updater で二項分類モデルをトレーニングする場合、インターセプトは正規化されません。
- ユーザーが正規化なしで設定した場合、特徴量スケーリングあり/なしでトレーニングすると、同じ収束速度で同じ解が得られます。
- 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を優先して非推奨になりました。これは、アルゴリズムに与えられるインスタンス (行) の「重み」との曖昧さを解消するのに役立ちます。
動作の変更
- SPARK-7770:
spark.mllib.tree.GradientBoostedTrees:validationTolの意味が 1.6 で変更されました。以前は、エラーの絶対変化のしきい値でした。現在は、GradientDescentのconvergenceTolの動作に似ています。大きなエラーの場合は相対誤差 (前回の誤差に対する相対値) を使用し、小さなエラー (< 0.01) の場合は絶対誤差を使用します。 - SPARK-11069:
spark.ml.feature.RegexTokenizer: 以前は、トークン化する前に文字列を小文字に変換していませんでした。現在は、デフォルトで小文字に変換しますが、オプションで変換しないこともできます。これは、よりシンプルなTokenizerTransformer の動作と一致します。
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 の varargs サポートが
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 ) は、Alpha または Experimental としてマークされていないコンポーネントでは唯一のものです。
- (後方互換性のない変更)
ALSでは、不要なメソッドsolveLeastSquaresが削除されました。DeveloperApiメソッドanalyzeBlocksも削除されました。 - (後方互換性のない変更)
StandardScalerModelは Alpha コンポーネントのままです。その中で、varianceメソッドはstdメソッドに置き換えられました。元のvarianceメソッドが返した列の分散値を計算するには、stdが返す標準偏差の値を二乗します。 - (後方互換性のない変更)
StreamingLinearRegressionWithSGDは Experimental コンポーネントのままです。その中で、2 つの変更がありました。- 引数を受け取るコンストラクタは、デフォルトコンストラクタとパラメータセッターメソッドを使用したビルダーパターンを優先して削除されました。
- 変数
modelはもはやパブリックではありません。
- (後方互換性のない変更)
DecisionTreeは Experimental コンポーネントのままです。その中および関連クラスには、いくつかの変更がありました。DecisionTreeでは、非推奨のクラスメソッドtrainが削除されました。(オブジェクト/静的trainメソッドは残っています)。Strategyでは、checkpointDirパラメータが削除されました。チェックポインティングは引き続きサポートされていますが、ツリーおよびツリーアンサンブルのトレーニングを呼び出す前にチェックポイントディレクトリを設定する必要があります。
PythonMLlibAPI(Scala/Java と Python の MLlib 間のインターフェース) はパブリック 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 です。
-
(後方互換性のない変更) ツリーの深さの意味が 1 だけ変更され、scikit-learn および rpart のツリーの実装と一致するようになりました。MLlib v1.0 では、深さ 1 のツリーは 1 つのリーフノードを持ち、深さ 2 のツリーは 1 つのルートノードと 2 つのリーフノードを持っていました。MLlib v1.1 では、深さ 0 のツリーは 1 つのリーフノードを持ち、深さ 1 のツリーは 1 つのルートノードと 2 つのリーフノードを持っています。この深さは、
StrategyのmaxDepthパラメータ、またはDecisionTreeの静的trainClassifierおよびtrainRegressorメソッドを通じて指定されます。 -
(非後方互換性のない変更)
DecisionTreeを構築するには、古いパラメータクラスStrategyを使用するのではなく、新しく追加されたtrainClassifierおよびtrainRegressorメソッドの使用を推奨します。これらの新しいトレーニングメソッドは、分類と回帰を明示的に分離し、特殊化されたパラメータタイプを単純なStringタイプに置き換えます。
推奨される新しい trainClassifier および trainRegressor の例は、決定木ガイドに示されています。
MLlib 0.9 から 1.0 へのアップグレード
MLlib v1.0 では、密および疎入力を統一的にサポートしていますが、これによりいくつかの後方互換性のない変更が発生します。データが疎の場合、ストレージと計算の両方で疎性を活用するために、疎形式で保存してください。詳細は以下のとおりです。