news 2026/6/9 22:03:23

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/6/10 14:35:15

YOLOv9-MultiHead多头检测机制解析:提升召回率

YOLOv9-MultiHead多头检测机制解析&#xff1a;提升召回率 在工业质检、物流分拣和自动驾驶等高可靠性场景中&#xff0c;目标检测模型的“漏检”问题始终是悬在头顶的一把剑。尤其是面对密集排列的小元件、远距离行人或微米级缺陷时&#xff0c;传统YOLO架构即便推理速度飞快&…

作者头像 李华
网站建设 2026/6/9 21:30:24

YOLO目标检测API限流机制上线,保障系统稳定性

YOLO目标检测API限流机制上线&#xff0c;保障系统稳定性 在智能视频分析平台的某个深夜&#xff0c;运维团队突然收到告警&#xff1a;GPU显存占用飙升至98%&#xff0c;服务响应延迟突破2秒&#xff0c;部分请求开始超时。排查后发现&#xff0c;某客户因程序逻辑错误&#x…

作者头像 李华
网站建设 2026/6/10 12:51:01

Vugu架构部署终极指南:现代Go+WebAssembly应用构建实践

Vugu架构部署终极指南&#xff1a;现代GoWebAssembly应用构建实践 【免费下载链接】vugu Vugu: A modern UI library for GoWebAssembly (experimental) 项目地址: https://gitcode.com/gh_mirrors/vu/vugu Vugu是一个专为Go语言设计的现代化UI库&#xff0c;充分利用We…

作者头像 李华
网站建设 2026/6/10 12:58:13

Photoshop AI插件革命:ComfyUI与Stable Diffusion无缝集成指南

还在为AI绘画工具与Photoshop之间的频繁切换而烦恼吗&#xff1f;今天&#xff0c;我们将为你揭秘Comfy-Photoshop-SD插件的完整使用方案&#xff0c;让设计师在熟悉的Photoshop环境中直接驾驭Stable Diffusion的强大AI绘画能力&#xff0c;实现真正的创意无界体验。 【免费下载…

作者头像 李华
网站建设 2026/6/10 12:54:30

YOLO模型训练冷启动问题解决:预加载权重+GPU缓存

YOLO模型训练冷启动问题解决&#xff1a;预加载权重GPU缓存 在工业级AI视觉系统中&#xff0c;实时性是决定成败的关键。哪怕只是几百毫秒的延迟波动&#xff0c;也可能导致流水线误判、自动驾驶避障失败或安防响应滞后。而当我们部署YOLO这类高性能目标检测模型时&#xff0c;…

作者头像 李华