数据归一化,以房价预测为案例,房价(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