Spark ML包中的几种归一化方法总结

本文总结了Spark ML库中的四种归一化方法:Normalizer(行向量单位范数)、StandardScaler(0均值单位标准差)、MinMaxScaler(特征映射到[0, 1]区间)和MaxAbsScaler(特征变换到[-1, 1]区间)。这些方法适用于不同场景,确保数据的可比性和算法的稳定性。" 113717106,10537176,使用MD5加密实现帆软单点登录密码验证,"['帆软单点登录', '密码加密', '身份验证']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

org.apache.spark.ml.feature包中包含了4种不同的归一化方法:

  • Normalizer
  • StandardScaler
  • MinMaxScaler
  • MaxAbsScaler

有时感觉会容易混淆,借助官方文档和实际数据的变换,在这里做一次总结。

原文地址:http://www.neilron.xyz/spark-ml-feature-scaler/

0 数据准备

import org.apache.spark.ml.linalg.Vectors

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

// 原始数据
+---+--------------+
| id|      features|
+---+--------------+
|  0|[1.0,0.5,-1.0]|
|  1| [2.0,1.0,1.0]|
|  2|[4.0,10.0,2.0]|
+---+--------------+

1 Normalizer

Normalizer的作用范围是每一行,使每一个行向量的范数变换为一个单位范数,下面的示例代码都来自

### 如何在 Apache Spark 中实现数据归一化 #### MinMaxScaler 方法 `MinMaxScaler` 是一种常见的归一化技术,它会将每列数值缩放到指定范围,默认情况下是从 0 到 1。此方法适用于大多数机器学习算法。 ```python from pyspark.ml.feature import MinMaxScaler from pyspark.ml.linalg import Vectors data_df = spark.createDataFrame([ (Vectors.dense([1.0, 2.0]),), (Vectors.dense([3.0, 4.0]),), (Vectors.dense([5.0, 6.0]),)], ["features"]) scaler = MinMaxScaler(inputCol="features", outputCol="scaledFeatures") # 计算最小值和最大值用于后续变换 scaler_model = scaler.fit(data_df) # 将原始特征转换为标准化后的特征 scaled_data_df = scaler_model.transform(data_df) ``` 上述代码展示了如何利用 `MinMaxScaler` 对数据进行线性变换[^3]。 #### MaxAbsScaler 方法 对于那些不想改变分布特性的稀疏数据来说,`MaxAbsScaler` 更加合适。该方法只会除以绝对值的最大值,从而确保结果处于 [-1, 1] 的范围内: ```python from pyspark.ml.feature import MaxAbsScaler max_abs_scaler = MaxAbsScaler(inputCol="features", outputCol="scaled_features") # Fit the model to compute maximum absolute value per feature. max_abs_scaler_model = max_abs_scaler.fit(data_df) # Transform each feature by dividing through its maximal absolute value. result_maxabs = max_abs_scaler_model.transform(data_df) ``` 这种方法特别适合保持零中心不变的情况下的数据预处理操作[^5]。 #### StandardScaler 方法 当假设数据服从正态分布时,则可以选择使用标准差法来进行归一化。这通常涉及到减去均值再除以其方差或标准偏差: ```python from pyspark.ml.feature import StandardScaler standard_scaler = StandardScaler(withMean=True, withStd=True, inputCol='features', outputCol='std_scaled') ss_model = standard_scaler.fit(data_df) output_ss = ss_model.transform(data_df) ``` 这里通过设置参数 `withMean` 和 `withStd` 来控制是否去除平均数以及调整单位方差.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值