news 2026/2/14 9:42:27

Flink ML StandardScaler 标准化(去均值 + 除以标准差)让特征“同量纲”更好学

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flink ML StandardScaler 标准化(去均值 + 除以标准差)让特征“同量纲”更好学

1. StandardScaler 做什么?

对向量特征的每个维度 (x) 做标准化:

  • 先减去均值:(x - \mu)(可选)
  • 再除以标准差:((x - \mu) / \sigma)(可选)

在 Flink ML 里,通过两个开关控制:

  • withMean:是否减均值(默认 false)
  • withStd:是否除以标准差(默认 true)

2. 输入列与输出列

输入列(Input Columns)

参数名类型默认值说明
inputColVector"input"待标准化的特征向量

输出列(Output Columns)

参数名类型默认值说明
outputColVector"output"标准化后的向量

3. 参数详解(Parameters)

Key默认值类型说明
inputCol"input"String输入列名
outputCol"output"String输出列名
withMeanfalseBoolean是否先减去均值(中心化)
withStdtrueBoolean是否按标准差缩放到单位方差

withMean 什么时候开?

  • 你希望特征以 0 为中心、并且数据不是稀疏 one-hot/高维稀疏向量:可以开
  • 如果你的特征是稀疏向量(例如 OneHotEncoder 输出),一般不建议开(中心化会破坏稀疏性、带来不必要开销)

4. Java 示例解读(fit + transform)

标准用法永远是两步:

1)在训练数据上fit()学到每个维度的统计量(均值、方差/标准差)
2)用同一个StandardScalerModel对训练/预测数据transform(),保证线上线下一致

你给的示例在同一份 inputTable 上 fit + transform,演示效果更直观。

importorg.apache.flink.ml.feature.standardscaler.StandardScaler;importorg.apache.flink.ml.feature.standardscaler.StandardScalerModel;importorg.apache.flink.ml.linalg.DenseVector;importorg.apache.flink.ml.linalg.Vectors;importorg.apache.flink.streaming.api.datastream.DataStream;importorg.apache.flink.streaming.api.environment.StreamExecutionEnvironment;importorg.apache.flink.table.api.Table;importorg.apache.flink.table.api.bridge.java.StreamTableEnvironment;importorg.apache.flink.types.Row;importorg.apache.flink.util.CloseableIterator;publicclassStandardScalerExample{publicstaticvoidmain(String[]args){StreamExecutionEnvironmentenv=StreamExecutionEnvironment.getExecutionEnvironment();StreamTableEnvironmenttEnv=StreamTableEnvironment.create(env);DataStream<Row>inputStream=env.fromElements(Row.of(Vectors.dense(-2.5,9,1)),Row.of(Vectors.dense(1.4,-5,1)),Row.of(Vectors.dense(2,-1,-2)));TableinputTable=tEnv.fromDataStream(inputStream).as("input");StandardScalerstandardScaler=newStandardScaler();// 默认 withMean=false, withStd=trueStandardScalerModelmodel=standardScaler.fit(inputTable);TableoutputTable=model.transform(inputTable)[0];for(CloseableIterator<Row>it=outputTable.execute().collect();it.hasNext();){Rowrow=it.next();DenseVectorinputValue=(DenseVector)row.getField(standardScaler.getInputCol());DenseVectoroutputValue=(DenseVector)row.getField(standardScaler.getOutputCol());System.out.printf("Input Value: %s\tOutput Value: %s\n",inputValue,outputValue);}}}

这段代码做了什么:

  • fit():扫描 inputTable,计算每个维度的标准差(以及如果 withMean=true 则计算均值)
  • transform():对每条向量逐维标准化,新增输出列output

5. 实战建议

1)StandardScaler 比 MinMaxScaler 更抗异常值一点,但也不是“免疫”

StandardScaler用均值/方差,极端值仍会影响统计量,只是通常比 min/max 更稳定。
如果异常值特别多,建议先做截断/清洗,再标准化。

2)不要在预测数据上重新 fit

必须做到:

  • 训练阶段:fit(train)
  • 预测阶段:transform(predict) 用同一个 model
    否则线上每批数据的缩放尺度都变,模型输出会漂。

3)常见组合

  • VectorAssembler → StandardScaler → KMeans/KNN/LinearSVC/LogisticRegression
  • Bucketizer/OneHotEncoder 这种离散稀疏特征链路,一般不需要 withMean
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/13 18:28:27

PyTorch-CUDA镜像支持WebSocket通信吗?实时交互方案

PyTorch-CUDA镜像支持WebSocket通信吗&#xff1f;实时交互方案 在现代深度学习开发中&#xff0c;越来越多的团队不再满足于本地运行脚本。取而代之的是通过浏览器远程访问 GPU 服务器、实时调试模型、共享实验记录——这些需求背后&#xff0c;都离不开一个关键技术&#xff…

作者头像 李华
网站建设 2026/2/7 6:33:54

Artix-7 FPGA中双端口BRAM实现技巧操作指南

如何在 Artix-7 FPGA 中高效使用双端口 BRAM&#xff1f;实战全解析 你有没有遇到过这样的问题&#xff1a;FPGA 设计中数据流卡顿、带宽上不去&#xff0c;明明逻辑资源还够&#xff0c;却因为存储瓶颈拖了后腿&#xff1f; 尤其是在图像处理、高速采集或跨时钟域通信场景下…

作者头像 李华
网站建设 2026/2/12 12:32:48

conda activate环境激活失败?容器镜像避免此类路径问题

conda activate环境激活失败&#xff1f;容器镜像避免此类路径问题 在深度学习项目的日常开发中&#xff0c;你是否曾遇到这样的场景&#xff1a;好不容易写完模型代码&#xff0c;准备启动训练时&#xff0c;终端却弹出一行刺眼的错误&#xff1a; CommandNotFoundError: Your…

作者头像 李华
网站建设 2026/2/9 9:36:34

COOFDM的Matlab仿真程序详解:从代码实现到理论解析的综合指南

COOFDM的Matlab仿真程序&#xff0c;包括文档代码解释和理论解释最近在折腾光通信仿真&#xff0c;发现CO-OFDM&#xff08;相干光正交频分复用&#xff09;这玩意儿挺有意思。它把OFDM技术和相干检测结合&#xff0c;专门对付光纤里的色散和相位噪声。今天咱们直接用Matlab撸个…

作者头像 李华
网站建设 2026/2/9 11:02:31

PyTorch-CUDA镜像支持多租户隔离吗?企业部署方案

PyTorch-CUDA镜像支持多租户隔离吗&#xff1f;企业部署方案 在现代AI研发环境中&#xff0c;一个常见的挑战是&#xff1a;多个团队共享同一套GPU集群时&#xff0c;如何避免“我的训练任务被别人的作业拖慢”、“数据被误访问”或“环境配置冲突”等问题。尤其当企业使用PyTo…

作者头像 李华