news 2026/4/15 19:03:44

Flink ML MinMaxScaler 把特征缩放到统一区间 [min, max]

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flink ML MinMaxScaler 把特征缩放到统一区间 [min, max]

1. MinMaxScaler 做什么?

对每个特征维度 (x) 做缩放:

[x′=x−xminxmax−xmin⋅(max−min)+min][ x' = \frac{x - x_{min}}{x_{max} - x_{min}} \cdot (max - min) + min ][x=xmaxxminxxmin(maxmin)+min]

其中(xmin,xmax)(x_{min}, x_{max})(xmin,xmax)是从训练数据中统计得到的“该维度的最小值/最大值”。

2. 输入列与输出列

输入列(Input Columns)

参数名类型默认值说明
inputColVector"input"待缩放的特征向量

输出列(Output Columns)

参数名类型默认值说明
outputColVector"output"缩放后的特征向量

3. 参数(Parameters)

Key默认值类型说明
inputCol"input"String输入列名
outputCol"output"String输出列名
min0.0Double输出区间下界
max1.0Double输出区间上界

你可以把特征缩放到:

  • [0, 1](默认)
  • [-1, 1](有时更适合某些模型)
  • 任意你需要的区间

4. Java 示例代码解读(训练 + 预测)

你贴的例子非常典型:先用训练集 fit 出缩放参数(每个维度的 min/max),再对预测集 transform。

4.1 训练数据(用于统计每一维的 min/max)

DataStream<Row>trainStream=env.fromElements(Row.of(Vectors.dense(0.0,3.0)),Row.of(Vectors.dense(2.1,0.0)),Row.of(Vectors.dense(4.1,5.1)),Row.of(Vectors.dense(6.1,8.1)),Row.of(Vectors.dense(200,400)));TabletrainTable=tEnv.fromDataStream(trainStream).as("input");

这组训练数据明显包含极端值(200, 400),它会把两维的 max 拉得很大(这点在实战里要特别注意,后面会讲)。

4.2 预测数据(要做缩放)

DataStream<Row>predictStream=env.fromElements(Row.of(Vectors.dense(150.0,90.0)),Row.of(Vectors.dense(50.0,40.0)),Row.of(Vectors.dense(100.0,50.0)));TablepredictTable=tEnv.fromDataStream(predictStream).as("input");

4.3 训练 MinMaxScaler 并 transform

MinMaxScalerminMaxScaler=newMinMaxScaler();MinMaxScalerModelminMaxScalerModel=minMaxScaler.fit(trainTable);TableoutputTable=minMaxScalerModel.transform(predictTable)[0];

4.4 打印输入与输出

DenseVectorinputValue=(DenseVector)row.getField(minMaxScaler.getInputCol());DenseVectoroutputValue=(DenseVector)row.getField(minMaxScaler.getOutputCol());System.out.printf("Input Value: %-15s\tOutput Value: %s\n",inputValue,outputValue);

输出表会包含:

  • 原始列:input
  • 新增列:output(缩放后的向量)

5. 实战建议(很关键)

1)MinMaxScaler 对异常值非常敏感

因为它直接用训练集的 min/max,当训练集中出现极端值时:

  • 大部分正常样本会被压缩到非常接近 0 的小范围
  • 模型对细微差异不敏感(尤其对距离类算法影响明显)

常见解决方案:

  • 先做异常值处理(winsorize/clip)
  • 使用分位数范围做近似 min/max(工程上常见)
  • 或改用 StandardScaler(标准化)更稳

2)训练/预测必须用同一套 scaler 参数

正确姿势永远是:

  • fit(train)只在训练集上统计 min/max
  • transform(train/predict)都用同一个 model

不要在预测数据上重新 fit,否则线上会出现“同一个样本在不同批次缩放结果不同”的问题。

3)缩放区间如何选?

  • 默认[0, 1]:通用且好理解
  • [-1, 1]:如果后续模型/特征更希望以 0 为中心,可能更合适

例如:

MinMaxScalerscaler=newMinMaxScaler().setMin(-1.0).setMax(1.0);

4)通常会放进 Pipeline

MinMaxScaler 常见组合:

  • VectorAssembler → MinMaxScaler → KMeans/KNN/SVM/LR
  • Bucketizer → OneHot → LR(这里 MinMaxScaler 不一定必需)

6. 小结

MinMaxScaler 是 Flink ML 特征工程中最常用的“缩放器”之一:

  • 输入:inputCol(Vector)
  • 输出:outputCol(Vector)
  • fit()在训练集上学习每一维的 min/max
  • transform()把新数据线性映射到[min, max](默认[0,1]

它简单高效,但要特别注意异常值带来的“压缩效应”。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 21:40:31

YOLO模型训练自动学习率查找:基于GPU性能测试

YOLO模型训练自动学习率查找&#xff1a;基于GPU性能测试 在工业AI视觉系统的实际部署中&#xff0c;一个看似不起眼的参数——学习率&#xff0c;往往决定了整个项目能否按时上线。我们见过太多团队卡在“模型不收敛”或“训练太慢”的阶段&#xff0c;反复试错、调整超参数&a…

作者头像 李华
网站建设 2026/4/3 0:15:17

IDE重置工具终极指南:简单3步免费延长IntelliJ试用期

IDE重置工具终极指南&#xff1a;简单3步免费延长IntelliJ试用期 【免费下载链接】IDE评估重置工具ide-eval-resetter-2.3.5.jar 欢迎使用ide-eval-resetter-2.3.5.jar&#xff0c;这是一款专为IntelliJ IDEA用户设计的工具。它旨在帮助那些正在试用IntelliJ IDEA或其他基于Jet…

作者头像 李华
网站建设 2026/4/15 7:33:44

5个实施YashanDB的关键步骤,确保成功交付

如何优化数据库的查询速度和保障高可用性&#xff0c;是现代企业数据库建设中亟需解决的核心问题。查询性能的瓶颈直接影响业务响应时间&#xff0c;而数据库的高可用能力又决定了系统的稳定性和连续服务能力。YashanDB作为一个支持单机、分布式与共享集群多种部署架构的数据库…

作者头像 李华
网站建设 2026/4/5 16:40:34

5个实现YashanDB价值的关键策略

在现代企业中&#xff0c;数据库技术的高效性直接影响到应用的性能和用户体验。如何优化查询速度、保障数据安全并提高系统可靠性&#xff0c;是当前数据库管理中的核心问题。YashanDB作为一个高性能数据库&#xff0c;多种领先的技术特点为企业提供了良好的解决方案。本文将深…

作者头像 李华