news 2026/7/14 20:28:53

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/7/12 18:26:10

6G显存跑2K生图:腾讯混元Image-2.1轻量化部署实战指南

6G显存跑2K生图&#xff1a;腾讯混元Image-2.1轻量化部署实战指南 【免费下载链接】hunyuanimage-gguf 项目地址: https://ai.gitcode.com/hf_mirrors/calcuis/hunyuanimage-gguf 还在为AI绘画的高门槛而烦恼吗&#xff1f;现在&#xff0c;只需6G显存的普通显卡&#…

作者头像 李华
网站建设 2026/7/12 18:25:27

多模态大模型评估新突破:M3STR基准带你探索抽象视觉知识理解奥秘

本文提出M3STR新基准评估多模态大模型对抽象结构化知识的视觉理解能力。设计计数、检测和补全三种任务&#xff0c;评估26个主流MLLMs。发现当前模型在抽象视觉理解上存在显著缺陷&#xff0c;小模型表现接近随机猜测&#xff0c;开源模型整体优于闭源API。研究表明模型缩放定律…

作者头像 李华
网站建设 2026/7/12 18:23:54

如何突破115云盘下载限制?Aria2加速导出终极方案

你是否曾经为115云盘中大量文件的下载效率而苦恼&#xff1f;面对几百GB的照片、视频或工作文档&#xff0c;传统的浏览器下载方式不仅速度慢&#xff0c;还经常因为网络中断而前功尽弃。现在&#xff0c;一个名为115Exporter的Chrome扩展工具彻底改变了这一局面。 【免费下载链…

作者头像 李华
网站建设 2026/7/12 7:11:08

基于SpringBoot + Vue的足球训练营系统的设计与实现

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 &#x1f49b;博主介绍&#…

作者头像 李华
网站建设 2026/7/7 13:22:48

YOLO模型训练超参搜索工具上线,自动化GPU实验

YOLO模型训练超参搜索工具上线&#xff0c;自动化GPU实验 在智能制造、自动驾驶和工业质检等场景中&#xff0c;实时目标检测早已不再是“有没有”的问题&#xff0c;而是“快不快、准不准、稳不稳”的工程较量。面对每秒上百帧的视频流输入&#xff0c;传统两阶段检测器如Fast…

作者头像 李华