2016-03-27 4 views
5

DataFrames, Estimators, and Pipelinesを利用するために私のコードをリファクタリングする途中です。私はもともとMLlib Multiclass LogisticRegressionWithLBFGSRDD[LabeledPoint]に使っていました。学習して新しいAPIを使うのは楽しいですが、新しいモデルを保存して新しいデータに適用する方法がわかりません。スパークML - Save OneVsRestModel

現在、LogisticRegressionのML実装では、バイナリ分類のみがサポートされています。

val lr = new LogisticRegression().setFitIntercept(true) 
val ovr = new OneVsRest() 
ovr.setClassifier(lr) 
val ovrModel = ovr.fit(training) 

私は今、私のOneVsRestModelを保存したいと思いますが、これはAPIでサポートされていないようです:私は、代わりにそのようOneVsRestを使用しています。私は試しました:

これを保存する方法はありますか?新しい予測を行うために新しいアプリケーションに読み込むことはできますか?

答えて

5

スパーク2.0.0

OneVsRestModelので、直接それを保存することが可能ですMLWritableを実装しています。下記の方法は、個々のモデルを個別に保存するのに有効です。

スパーク< 2.0.0

ここでの問題は、modelsArrayLogisticRegressionModel(又はMLWritable)のArrayないClassificationModel[_, _]]のを返すことです。

import org.apache.spark.ml.classification.LogisticRegressionModel 

ovrModel.models.zipWithIndex.foreach { 
    case (model: LogisticRegressionModel, i: Int) => 
    model.save(s"model-${model.uid}-$i") 
} 

以上の汎用的にする:それはあなたがタイプについて具体的にする必要があります動作させるために残念ながら今のよう

import org.apache.spark.ml.util.MLWritable 

ovrModel.models.zipWithIndex.foreach { 
    case (model: MLWritable, i: Int) => 
    model.save(s"model-${model.uid}-$i") 
} 

OneVsRestModelのでMLWritableを実装していない(1.6スパーク)一人で救うことはできません。

すべてのモデルはOneVsRestをint型、したがって、我々は、明示的なインデックスを必要とする同じuidを使用しているようです。後でモデルを同定することも有用であろう。

+1

私はこれを+2回することができます。これがまさに私が必要としていただけでなく、生の確率をもっと簡単に計算する仕事になります。私はsrcをカスタマイズしなければならないと思った。ありがとう! –

+0

@ zero323答えのpyspark版はありますか? pyspark.mlモデルを保存する方法を見つけようとしています – ajkl

+0

@AjinkyaKale 1.6? – zero323