古いものからの移設ガイド - MLlib
最新のSparkバージョンのための移行ガイドは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
変換器に一致します。
1.4から1.5
spark.mllib
パッケージの中では、幾つかの挙動の変更がありますが、APIを損なう変更はありません。
- SPARK-9005:
RegressionMetrics.explainedVariance
は二乗の平均回帰合計を返します。 - SPARK-8600:
NaiveBayesModel.labels
ソートされるようになりました。 - SPARK-3382:
GradientDescent
は1e-3
の集約の許容範囲を持ち、従って繰り返しは1.4よりも速く終わるでしょう。
spark.ml
パッケージの中では、一つの破壊的なAPIの変更と、一つの挙動の変更があります:
- SPARK-9268: Java の varargsサポートは Scala compiler bugにより
Params.setDefault
から削除されます。 - SPARK-10097:
Evaluator.isLargerBetter
が測定の順番を示すために追加されます。RMSEのような測定は1.4でのように符号をフリップしません。
1.3から1.4
spark.mllib
パッケージの中では、幾つかの非互換の変更がありますが、全ては開発中のAPI
あるいは 実験的な
API です。
- 勾配ブースト木
- (非互換の変更)
Loss.gradient
メソッドの定義が変更されました。これはGBTのために独自のlossを書いたユーザのみに問題があります。 - (非互換の変更) ケースクラス項目の修正のために、ケースクラス
BoostingStrategy
のためのapply
およびcopy
メソッドが変更されました。 class fields. これはGBTパラメータを設定するためにBoostingStrategy
を使用するユーザのみに問題があります。
- (非互換の変更)
- (非互換の変更)
LDA.run
の返り値が変更されました。今は、具象クラスDistributedLDAModel
の代わりに、抽象クラスLDAModel
が返されます。オブジェクトタイプLDAModel
はまだ適切な具象タイプにキャストされます。これは最適化アルゴリズムに依存します。
spark.ml
パッケージの中では、幾つかの主要なAPIの変更がありました。以下を含みます:
Param
とパラメータを指定するための他のAPIuid
パイプライン コンポーネントのためのユニークなID- 特定のクラスの再編成
spark.ml
API はSPark1.3でアルファコンポーネントだったため、ここでは全ての変更をリスト化しません。しかし、1.4からのspark.ml
はもうアルファコンポーネントではないため、将来のリリースのためのAPIの変更の詳細を提供するつもりです。
1.2から1.3
spark.mllib
パッケージの中で、幾つかの破壊的な変更がありました。最初の変更(ALS
) はアルファあるいは実験的として印を付けてられなかったコンポーネントの中で唯一のものです。
- (破壊的な変更)
ALS
の中で、異質なメソッドsolveLeastSquares
が削除されました。DeveloperApi
メソッドanalyzeBlocks
も削除されました。 - (破壊的な変更)
StandardScalerModel
はアルファコンポーネントのままです。その中で、variance
メソッドがstd
メソッドと置き換えられました。元のvariance
メソッドによって返されるカラムの分散を計算するためには、単純にstd
によって返される偏差を平方します。 - (破壊的な変更)
StreamingLinearRegressionWithSGD
は実験的なコンポーネントのままです。その中で、2つの変更がありました:- デフォルトのコンストラクタにパラメータのsetterメソッドを使うビルダーパターンが指示されて、引数を取るコンストラクタが削除されました。
- 変数
model
はもうpublicではありません。
- (破壊的な変更)
DecisionTree
は実験的なコンポーネントのままです。その中とそれに関連するクラスで、幾つかの変更がありました:DecisionTree
の中で、非推奨のクラスメソッドtrain
が削除されました。(object/statictrain
メソッドは残っています。)Strategy
の中で、checkpointDir
パラメータが削除されました。Checkpointingはまだサポートされていますが、ツリーおよびツリーのアンサンブル訓練の前に checkpoint ディレクトリが設定されなければなりません。
PythonMLlibAPI
(MLLib のための Scala/Java と Python 間のインタフェース) はpublic API でしたが、今ではprivateです。これは外部利用のためのものではありませんでした。- 線形回帰(ラッソとリッジ回帰を含む)で、今は二乗損失は2で割り算されます。つまり、1.2と同じ結果を生成するためには、正規化パラメータは2で割られ、ステップサイズは2倍される必要があります。
spark.ml
パッケージで、Spark SQLの主要なAPIの変更があります。最も重要な変更を以下にリスト化します:
- 古いSchemaRDD は 幾分修正されたAPIのDataFrame に置き換えられました。SchemaRDDを使っていた
spark.ml
内の全てのアルゴリズムは、今ではデータフレームを使います。 - 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でしょう。将来的にはインターセプトを使うためのオプションが追加されるでしょう。
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
statictrainClassifier
とtrainRegressor
メソッドを使って指定されます。 -
(破壊的な変更)
Node
のためのAPIが変更されました。(trainClassifier
あるいはtrainRegressor
メソッドを使う代わりに)ユーザが手動で決定木を構築していない場合は、これは一般的にユーザコードには影響しません。ツリーのNode
は、予想されたラベルの確率(分類のため)を含むより多くの情報を、今は含んでいます。 -
Printing メソッドの出力が代わりました。
toString
(Scala/Java) と__repr__
(Python) メソッドが完全なモデルを出力するために使われていました; 今では概要を出力します。完全なモデルについては、toDebugString
を使ってください。
Spark配布物の中の例と、決定木のガイドの中の例が、それに応じて更新されました。
1.0から1.1
MLlib v1.1での唯一のAPIの変更は DecisionTree
で、これはMLlib 1.1の実験的なAPIのままです。
-
(破壊的な変更) scikit-learn とrpartの中での木の実装と合わせるために、木の深さの意味が1つだけ変更されました。MLlib v1.0では、深さ1の木は1つの葉を持ち、深さ2の木は1つのrootノードと2つの葉ノードを持っていました。MLlib v1.1では、a 深さ0の木は1つの葉を持ち、深さ1の木は1つのノードと2つの葉ノードを持ちます。この深さは
Strategy
でのmaxDepth
パラメータ、あるいはDecisionTree
statictrainClassifier
とtrainRegressor
メソッドによって指定されます。 -
(破壊的な変更)
DecisionTree
を構築するためには、古いパラメータクラスStrategy
の使用ではなく、新しく追加されたtrainClassifier
とtrainRegressor
メソッドを使うことをお勧めします。これらの新しい訓練メソッドは明示的に分類と回帰を分割し、それらは特別なパラメータタイプ を単純なString
タイプに置き換えます。
お勧めのtrainClassifier
と trainRegressor
の新しい例は、決定木ガイドの中で与えられます。
0.0から1.0
MLlib v1.0では、統一された方法でdenseとsparseの両方をサポートします。これは新しい破壊的な変更を導入します。もしデータがsparseであれば、ストレージおよび計算の両方でのまばらさを利用するために、denseの代わりにsparse形式でそれを格納してください。詳細は以下で説明されます。