gpt4 book ai didi

apache-spark - Spark中是否没有像MinMaxScaler这样的缩放器的 "inverse_transform"方法?

转载 作者:行者123 更新时间:2023-11-30 08:29:26 24 4
gpt4 key购买 nike

当训练模型时,比如线性回归,我们可以在训练测试数据集上进行归一化,例如 MinMaxScaler。

在我们获得经过训练的模型并使用它进行预测,并将预测缩小到原始表示之后。

在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中有类似的方法吗?

我用谷歌搜索了很多,但没有找到答案。有人可以给我一些建议吗?非常感谢!

最佳答案

在我们公司,为了解决 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 的双重实现,您通常会在这些操作中丢失精度,因此您将无法恢复转换前的确切原始值​​(例如:您可能会得到类似 1.9999999999999998 而不是 2.0 的值)。

关于apache-spark - Spark中是否没有像MinMaxScaler这样的缩放器的 "inverse_transform"方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46092114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com