2

線形回帰などのモデルを訓練する場合、列車のテストデータセットでMinMaxScalerのような正規化を行うことができます。SparkのMinMaxScalerのようなスケーラのための "inverse_transform"メソッドはありませんか?

私たちは訓練されたモデルを得てそれを使って予測を行い、予測を元の表現にスケールバックします。

pythonには、 "inverse_transform"メソッドがあります。例:

from sklearn.preprocessing import MinMaxScaler 
scalerModel.inverse_transform 

from sklearn.preprocessing import MinMaxScaler 

data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]] 

scaler = MinMaxScaler() 
MinMaxScaler(copy=True, feature_range=(0, 1)) 
print(data) 

dataScaled = scaler.fit(data).transform(data) 
print(dataScaled) 

scaler.inverse_transform(dataScaled) 

sparkにも同様の方法がありますか?

私はたくさんのグーグルではありますが、答えは見つかりませんでした。誰も私にいくつかの提案を与えることができますか? ありがとうございます!当社で

+0

こんにちは、歓迎、StackOverflowへ。あなたの投稿に行き、いくつかの編集をしてもらえますか?現在書かれているいくつかのフレーズは意味をなさないので、人々があなたの質問を見逃す可能性があります。コードブロックを使用して、コードスニペットをより魅力的にすることもできます。 –

答えて

0

は、StandardScalerに同じ問題を解決するために、我々はこの(とりわけ)とspark.ml拡張:

package org.apache.spark.ml 

import org.apache.spark.ml.linalg.DenseVector 
import org.apache.spark.ml.util.Identifiable 

package object feature { 

    implicit class RichStandardScalerModel(model: StandardScalerModel) { 

     private def invertedStdDev(sigma: Double): Double = 1/sigma 

     private def invertedMean(mu: Double, sigma: Double): Double = -mu/sigma 

     def inverse(newOutputCol: String): StandardScalerModel = { 
      val sigma: linalg.Vector = model.std 
      val mu: linalg.Vector = model.mean 
      val newSigma: linalg.Vector = new DenseVector(sigma.toArray.map(invertedStdDev)) 
      val newMu: linalg.Vector = new DenseVector(mu.toArray.zip(sigma.toArray).map { case (m, s) => invertedMean(m, s) }) 
      val inverted: StandardScalerModel = new StandardScalerModel(Identifiable.randomUID("stdScal"), newSigma, newMu) 
       .setInputCol(model.getOutputCol) 
       .setOutputCol(newOutputCol) 

      inverted 
       .set(inverted.withMean, model.getWithMean) 
       .set(inverted.withStd, model.getWithStd) 
     } 
    } 

} 

それを変更したり、何かをするかなり簡単なはずあなたの特定の場合に似ています。

JVMの二重実装のため、通常はこれらの操作の精度が失われるため、変換前の正確な元の値は復元されません(例:2.0ではなく1.9999999999999998) 。

関連する問題