MinMaxScaler
作用是每一列,即每一维特征。将每一维特征线性地映射到指定的区间,通常是[0, 1]。
MinMaxScaler
计算数据集的汇总统计量,并产生一个MinMaxScalerModel
。
注意
因为零值转换后可能变为非零值,所以即便为稀疏输入,输出也可能为稠密向量。
该模型可以将独立的特征的值转换到指定的范围内。
它也有两个参数可以设置:
- min: 默认为0。指定区间的下限。
- max: 默认为1。指定区间的上限。
object MinMaxScalerExample {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder().master("local[*]").appName("QuantileDiscretizerExample").getOrCreate()
val dataFrame = spark.createDataFrame(Seq(
(0, Vectors.dense(1.0, 0.5, -1.0)),
(1, Vectors.dense(2.0, 1.0, 1.0)),
(2, Vectors.dense(4.0, 10.0, 2.0))
)).toDF("id", "features")
dataFrame.show()
val scaler = new MinMaxScaler()
.setInputCol("features")
.setOutputCol("scaledFeatures")
// Compute summary statistics and generate MinMaxScalerModel
val scalerModel = scaler.fit(dataFrame)
// rescale each feature to range [min, max].
val scaledData = scalerModel.transform(dataFrame)
println(s"Features scaled to range: [${scaler.getMin}, ${scaler.getMax}]")
scaledData.select("features", "scaledFeatures").show(false)
}
}
- 原始数据
+---+--------------+
| id| features|
+---+--------------+
| 0|[1.0,0.5,-1.0]|
| 1| [2.0,1.0,1.0]|
| 2|[4.0,10.0,2.0]|
+---+--------------+
- 默认特征范围
Features scaled to range: [0.0, 1.0]
- 结果数据
+--------------+-----------------------------------------------------------+
|features |scaledFeatures |
+--------------+-----------------------------------------------------------+
|[1.0,0.5,-1.0]|[0.0,0.0,0.0] |
|[2.0,1.0,1.0] |[0.3333333333333333,0.05263157894736842,0.6666666666666666]|
|[4.0,10.0,2.0]|[1.0,1.0,1.0] |
+--------------+-----------------------------------------------------------+