跳到主要内容

归一化

一、直观理解:把长短不一的尺子都裁到同一段​

归一化(这里主要指最小—最大归一化,Min-Max Normalization)把每个变量的取值线性压缩(或拉伸)到指定区间,最常见是 [0,1][0,1],有时是 [−1,1][-1,1]。

可以把它想成:有的指标用百分制(0–100),有的用千分制(0–1000),有的是温度从 −10-10 到 4040。归一化先找到每个指标在训练数据里的“最短端”和“最长端”,再按比例把所有读数标到同一把 0 到 1 的短尺上。

对第 jj 个变量:

xij∗=xij−min⁡jmax⁡j−min⁡jx_{ij}^{*}=\frac{x_{ij}-\min_j}{\max_j-\min_j}

变换后:

  • 训练集上该变量的最小值变成 0,最大值变成 1;
  • 中间值按比例落在 (0,1)(0,1) 内;
  • 变量的排序关系保持不变(严格单调的仿射变换)。

与标准化不同,归一化明确制造有界输入,因此特别受神经网络、某些图像/信号特征、需要概率型输入或固定动态范围的算法欢迎。但它的“尺子两端”完全由极值决定:只要混进一个异常大的点,max⁡j\max_j 被拉高,其他正常点全被挤到靠近 0 的一小段里。

二、适用场景与优缺点​

类型说明
适用场景算法要求特征有界(部分神经网络激活、某些核方法与元启发式算法的编码);需要把异量纲指标综合成加权评分且希望落在 [0,1][0,1];像素、比例、评分卡等本身具有天然上下界;希望可视化时各轴可比。
核心优点结果落在固定区间,直观好解释;计算极简单;保持原始分布的形状(只做平移缩放,不改变偏度的“相对形态”)。
局限与缺点对最小值、最大值极其敏感;测试集可能出现 <0 或 >1 的越界值;不改变异常值的相对地位,只是把它们钉在 0 或 1;常数列(max⁡=min⁡\max=\min)无法处理。

“保持形状”是相对标准化而言:两者都是线性变换,都不会把偏态变成对称。若目标是减弱偏态,应使用对数或 Box-Cox,而不是 min-max。

使用归一化前通常需要完成以下检查:

  1. 变量是否近似有界、是否存在明显错误极值;
  2. max⁡j\max_j 与 min⁡j\min_j 是否来自训练集,而非全数据;
  3. 目标区间选 [0,1][0,1] 还是 [−1,1][-1,1](含大量负数或要与 tanh⁡\tanh 输入匹配时常用后者);
  4. 约定测试集越界时的策略:截断到端点,还是允许出界并记录;
  5. 若用于多指标加权评价,确认“越大越好”还是“越小越好”(后者要做逆向指标变换)。

三、核心原理:按训练极值做线性映射​

1. 最小—最大归一化到 [0,1][0,1]​

xij∗=xij−mjMj−mj,mj=min⁡ixij,  Mj=max⁡ixijx_{ij}^{*}=\frac{x_{ij}-m_j}{M_j-m_j},\qquad m_j=\min_i x_{ij},\; M_j=\max_i x_{ij}

当 Mj=mjM_j=m_j 时分母为 0,该特征无判别信息,应剔除。

2. 映射到一般区间 [a,b][a,b]​

xij∗=a+(xij−mj)(Mj−mj)(b−a)x_{ij}^{*} = a + \frac{(x_{ij}-m_j)}{(M_j-m_j)}(b-a)

常用 (a,b)=(0,1)(a,b)=(0,1) 或 (−1,1)(-1,1)。

3. 逆向指标(越小越好)​

综合评价里,若污染指数、成本等越小越好,可先做

xij′=Mj+mj−xijx_{ij}' = M_j + m_j - x_{ij}

再归一化,或直接

xij∗=Mj−xijMj−mjx_{ij}^{*}=\frac{M_j-x_{ij}}{M_j-m_j}

这样 1 始终表示“在该指标上最优”。

4. 测试集变换与越界​

xijtest∗=xijtest−mjtrainMjtrain−mjtrainx_{ij}^{\mathrm{test}*}= \frac{x_{ij}^{\mathrm{test}}-m_j^{\mathrm{train}}}{M_j^{\mathrm{train}}-m_j^{\mathrm{train}}}

若 x^{\mathrm{test}}>M^{\mathrm{train}},则 x^{*}>1;若 x^{\mathrm{test}}<m^{\mathrm{train}},则 x^{*}<0。这并不自动算错,但要在建模前规定:

  • 硬截断:min(max(x*,0),1),适合需要严格有界输入的模型;
  • 允许出界:保留真实相对位置,适合分析“是否出现训练期未见的极端情形”。

5. 与标准化、小数定标等的关系​

方法公式要点输出
Min-Max 归一化减最小值除极差常为 [0,1][0,1]
Z-score 标准化减均值除标准差无固定边界
小数定标除以 10k10^k压到 (−1,1)(-1,1) 量级
均值归一化(x−xˉ)/(max⁡−min⁡)(x-\bar x)/(\max-\min)中心在 0 附近

数模论文中若写“归一化”,默认应给出具体公式,避免与标准化混淆。

四、关键决策 / 如何选参数​

1. 目标区间​

  • [0,1][0,1]:最常见,便于解释为“相对位置百分比”;
  • [−1,1][-1,1]:数据本有正负对称含义,或激活函数对对称输入更友好;
  • 自定义 [a,b][a,b]:与赛题评分公式或物理约束对齐时使用。

2. 极值是否稳健​

若怀疑 min⁡,max⁡\min,\max 被个别错误点污染,可考虑:

  • 先用箱线图 / 3σ 清理明显错误;
  • 或用分位数窗口代替极值,例如 1% 与 99% 分位数做“截尾 min-max”(需在论文中改称并说明)。

3. 是否按组别分别归一化​

不同年份、不同地区的“满分”若不可比,全样本统一 min-max 可能抹平组别结构。应先问:比较的是组内相对水平,还是跨组绝对水平?

4. 交叉验证​

与标准化相同:每一折在训练折上重估 mj,Mjm_j,M_j,再变换验证折。

5. 与缺失、异常的顺序​

先处理缺失与明显错误值,再估计 min/max。若先归一化再删异常,端点可能已由脏数据决定,清洗也救不回来。

五、MATLAB 示例​

% 三列异量纲指标:温度(℃)、浓度(mg/L)、评分(0-100)
X_train = [
10, 2.0, 60;
25, 5.5, 80;
18, 3.2, 70;
30, 8.0, 90;
12, 2.5, 65
];

X_test = [
28, 9.0, 85; % 浓度超过训练集最大,归一化后将 > 1
15, 4.0, 75
];

featureNames = ["温度", "浓度", "评分"];

% 训练集极值
xMin = min(X_train, [], 1);
xMax = max(X_train, [], 1);
range = xMax - xMin;
range(range == 0) = 1; % 避免除零

% 映射到 [0,1]
X01_train = (X_train - xMin) ./ range;
X01_test = (X_test - xMin) ./ range;

disp("训练集 [0,1] 归一化:");
disp(array2table(X01_train, "VariableNames", featureNames));

disp("测试集 [0,1] 归一化(可能越界):");
disp(array2table(X01_test, "VariableNames", featureNames));

% 越界截断策略
X01_test_clipped = min(max(X01_test, 0), 1);

% 映射到 [-1,1]
X_ab_train = -1 + 2 * X01_train;

% 逆向指标示例:假设“浓度”越小越好,单独反向归一化
conc_star = (xMax(2) - X_train(:, 2)) ./ range(2);
disp("浓度(越小越好)归一化到 [0,1],1 表示最优:");
disp(conc_star);

% 还原
X_test_recovered = X01_test .* range + xMin;
disp("还原后的测试集:");
disp(X_test_recovered);

% 可视化某一列变换前后
figure;
subplot(1, 2, 1);
histogram(X_train(:, 2));
title("浓度(原始)");
subplot(1, 2, 2);
histogram(X01_train(:, 2));
title("浓度([0,1] 归一化)");

也可以使用 rescale(R2017b+):

% 将训练集第 2 列缩放到 [0,1]
col2 = rescale(X_train(:, 2), 0, 1);

% 对测试集使用训练集的输入范围
col2_test = rescale(X_test(:, 2), 0, 1, ...
"InputMin", xMin(2), "InputMax", xMax(2));

六、如何解释结果​

归一化后的 x∗x^{*} 表示:

该样本在该变量上,相对于训练集观测到的最小、最大水平,所处的相对位置。

例如 x∗=0.75x^{*}=0.75 表示:从训练最小值走到训练最大值的路径上,该点大约位于 75% 处——不是概率,也不是分位数(分位数基于排序秩次,min-max 基于数值线性比例;分布不均匀时二者不同)。

报告中建议写明:

  1. 归一化公式与目标区间 [a,b][a,b];
  2. 每个变量的 mj,Mjm_j,M_j 及估计所用样本;
  3. 正向 / 逆向指标的处理方式;
  4. 测试集越界比例与处置规则;
  5. 变换前后的描述统计或直方图;
  6. 若用于综合评价,权重与聚合公式如何与归一化结果衔接。

若多个指标归一化后加权求和得到“综合得分”,需要强调:得分的绝对数值依赖于训练期的 min/max,换一批样本端点变了,同一原始向量的得分也会变。跨期比较时要固定端点或改用标准化等方法。

七、常见误区​

1. 用含测试集甚至未来数据的全局 min/max​

这会把评价或预测场景中本不可见的信息注入特征,造成虚高表现。

2. 不处理异常极值就直接 min-max​

一个错误的“最大产量”就能把其余年份的归一化值全部压到近 0,后续 PCA 或评分会被扭曲。

3. 把归一化值当成概率或分位​

0.90.9 只说明靠近训练最大值,不代表“优于 90% 的样本”。

4. 对已经是比例、概率的变量再机械归一化​

若变量已在 [0,1][0,1] 且端点有明确含义,再做一次 min-max 可能破坏可解释性;除非不同来源的“比例”口径不一致。

5. 与标准化选错场景​

需要抑制数量级、服务 PCA / 正则回归时,优先标准化;需要严格有界输入或做最小—最大型评分时,再用归一化。二者不必叠床架屋,除非有明确理由。

八、小结​

归一化(最小—最大法)用训练集的两端极值做线性尺子,把变量压到统一区间,适合有界输入和多指标评分。

它的核心思想可以概括为:

先固定“最差”与“最好”两端,再按比例读取每个样本在两端之间的位置。

代价是对异常值和训练—测试分布漂移非常敏感。写论文时应给出公式、端点来源、越界策略,并与标准化明确区分。归一化改变的是读数刻度,不是分布形态,也不能替代异常值治理。