数据归一化,以房价预测为案例,房价(y)通常与离市中心距离(x1)、面积(x2)、楼层(x3)有关,设y=ax1+bx2+cx3,那么abc就是我们需要重点解决的参数。但是有个问题,面积一般数值是比较大的,100平甚至更多,而距离一般都是几公里而已,b参数只要一点变化都能对房价产生巨大影响,而a的变化对房价的影响相对就小很多了。显然这会影响最终的准确性,毕竟距离可是个非常大的影响因素啊。 所以, 需要使用特征的归一化, 取值跨度大的特征数据, 我们浓缩一下, 跨度小的括展一下, 使得他们的
    
     跨度尽量统一
    
    。
    
    
     归一化就是将所有特征值都等比地缩小到0-1或者-1到1之间的区间内。其目的是为了使特征都在相同的规模中。
    
   
    
     MaxAbsScaler
    
    转换由向量列组成的数据集,将每个特征调整到
    
     [-1,1]
    
    的范围,它通过每个特征内的最大绝对值来划分。 它不会移动和聚集数据,因此不会破坏任何的稀疏性。
   
    
     MaxAbsScaler
    
    计算数据集上的统计数据,生成
    
     MaxAbsScalerModel
    
    ,然后使用生成的模型分别的转换特征到范围
    
     [-1,1]
    
    。下面是程序调用的例子。
   
// $example on$
import org.apache.spark.SparkConf
import org.apache.spark.ml.feature.MaxAbsScaler
import org.apache.spark.ml.linalg.Vectors
// $example off$
import org.apache.spark.sql.SparkSession
/*
所有值都扫描一遍,计算出最大最小值,比如1000的话那么absMax=1000。最后返回MaxAbsScalerModel
第一列1.0、2.0、4.0中最小为1.0,最大为4.0,2.0为0.5,第二列0.1、1.0、10.0依次类推
 */
object MaxAbsScalerExample {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf();
    sparkConf.setMaster("local[*]").setAppName(this.getClass.getSimpleName)
    val spark = SparkSession
      .builder
      .config(sparkConf)
      .appName("MaxAbsScalerExample")
      .getOrCreate()
    // $example on$
    val dataFrame = spark.createDataFrame(Seq(
      (0, Vectors.dense(1.0, 0.1, -8.0)),
      (1, Vectors.dense(2.0, 1.0, -4.0)),
      (2, Vectors.dense(4.0, 10.0, 8.0))
    )).toDF("id", "features")
    val scaler = new MaxAbsScaler()
      .setInputCol("features")
      .setOutputCol("scaledFeatures")
    // Compute summary statistics and generate MaxAbsScalerModel
    val scalerModel = scaler.fit(dataFrame)
    // rescale each feature to range [-1, 1]
    val scaledData = scalerModel.transform(dataFrame)
    scaledData.select("features", "scaledFeatures").show()
    // $example off$
    spark.stop()
  }
}
结果:
    +————–+—————-+
    
    | features| scaledFeatures|
    
    +————–+—————-+
    
    |[1.0,0.1,-8.0]|[0.25,0.01,-1.0]|
    
    |[2.0,1.0,-4.0]| [0.5,0.1,-0.5]|
    
    |[4.0,10.0,8.0]| [1.0,1.0,1.0]|
    
    +————–+—————-+
   
    
     Spark ML机器学习:SQLTransformer
    
   
    
     Spark ML机器学习:Tokenizer分词器
    
   
    
     Spark ML机器学习:多项式转化-PolynomialExpansion
    
   
    
     Spark ML机器学习:N-gram
    
   
    
     Spark ML机器学习:归一化之最小最大值标准化-MinMaxScaler
    
   
    
     Spark ML机器学习:绝对值最大标准化-MaxAbsScaler
    
   
    
     Spark ML机器学习:标准化-StandardScaler
    
   
    
     Spark ML机器学习:连续型数据处理之给定分位数离散化-QuantileDiscretizer
    
   
    
     Spark ML机器学习:连续型数据处理之二值化-Binarizer
    
   
    
     Spark ML机器学习:连续型数据处理之给定边界离散化-Bucketizer
    
   
    
     Spark ML机器学习:元素智能乘积-ElementwiseProduct
    
   
 
