数据标准化
先定义一个df
import org.apache.spark.ml.linalg.Vectors
val df = 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")
df.show
+---+--------------+
| id| features|
+---+--------------+
| 0|[1.0,0.5,-1.0]|
| 1| [2.0,1.0,1.0]|
| 2|[4.0,10.0,2.0]|
+---+--------------+
再介绍四种数据标准化方法
Normalizer(行缩放)
处理的对象是每一行,也就是每一组特征:将行向量的范数变换为单位范数(范数的阶通过参数指定)。
变换前后向量方向不变,也就是向量各维度的比例不变。
实际就是将每一组行向量的各个维度除以其指定阶的范数值(缩放)。
如其中一组行向量为[a, b, c],它的n阶范数值为m,则用setP(n)设置参数后,标准化得到向量[a/m, b/m, c/m]。
import org.apache.spark.ml.feature.Normalizer
//正则化行向量的1阶范数为一个单位,向量的1阶范数等于向量每个维度