2016-11-14 9 views
0

私はSparkのロジスティック回帰をトレーニングしています。しかし、私の訓練データの特徴から、モデルを手動で調整する必要があります。つまり、切片を変更する必要があります。 RDD APIで行うのは簡単だったSpark DataFrame APIロジスティック回帰モデルの代入を調整する

- ちょうど新しいLogisticRegressionModelをインスタンス化:

val intercept = model.intercept() + adjustment 
val model = new LogisticRegressionModel(model.weights(), intercept) 

しかし、データフレームのAPIでLogisticRegressionModelコンストラクタはプライベート行われました。モデルを手動で調整するにはどうすればよいですか?

答えて

0

私は今日の同じ問題を抱えていましたが、テストモードで何が起きようとしていたので、私は気にしません。あなたのモデルから係数を取得し、それで、あなたがSparkで使っているcodeBLAS.dotmarginおよびscoreを探して)であなたの予測を手作業で行います。ある時点では、彼らはBLAS.dotを使用し、よくBLASはスパークするために非公開です。同じように、dotのコードを取得し、SparseVector/DenseVectorを処理してください。汚いですが動作します。

+0

スパークをフォークして、傍受をシフトできるパラメータで独自のコピー機能を追加することができます。それも動作します。おそらくもっと美しいでしょう。 –

+0

明らかに、リフレクションでより簡単に(まだ汚れて)行うことができます: 'val modelClass = classOf [LogisticRegressionModel]; val const = modelClass.getDeclaredConstructor(classOf [String]、classOf [Vector]、classOf [Double]); val切片=訓練された切片 - 調整; val newModel = const.newInstance(trained.uid、trained.coefficients、intercept:java.lang.Double)) ' –

関連する問題