MinMaxScaler

  MinMaxScaler转换由向量行组成的数据集,将每个特征调整到一个特定的范围(通常是[0,1])。它有下面两个参数:

  • min:默认是0。转换的下界,被所有的特征共享。
  • max:默认是1。转换的上界,被所有特征共享。

  MinMaxScaler计算数据集上的概要统计数据,产生一个MinMaxScalerModel。然后就可以用这个模型单独的转换每个特征到特定的范围。
特征E被转换后的值可以用下面的公式计算:

\frac{e{i} - E{min}}{E{max} - E{min}} * (max - min) + min

  对于E_{max} == E_{min}的情况,Rescaled(e_i) = 0.5 * (max + min)

  注意,由于0值有可能转换成非0的值,所以转换的输出为DenseVector,即使输入为稀疏的数据也一样。下面的例子展示了如何将特征转换到[0,1]

  1. import org.apache.spark.ml.feature.MinMaxScaler
  2. val dataFrame = spark.read.format("libsvm").load("data/mllib/sample_libsvm_data.txt")
  3. val scaler = new MinMaxScaler()
  4. .setInputCol("features")
  5. .setOutputCol("scaledFeatures")
  6. // Compute summary statistics and generate MinMaxScalerModel
  7. val scalerModel = scaler.fit(dataFrame)
  8. // rescale each feature to range [min, max].
  9. val scaledData = scalerModel.transform(dataFrame)
  10. scaledData.show()