You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将特征映射至[0,-1]或[-1,1]范围?含Python/sklearn实现方案

特征缩放:缩放到[0,1]和[-1,1]范围的实用方法

嘿,关于特征缩放到固定范围的需求,我在日常机器学习建模里经常遇到,下面给你拆解手动公式和Python生态里的简便实现,都是实战中常用的方案~

一、先搞懂核心公式

首先得明确两个场景的基础公式,不过要提前说:这些公式更适合数据分布均匀、没有极端离群值的情况,如果有大量 outliers,建议先做异常值处理,不然缩放效果会打折扣。

1. 缩放到[0,1](经典Min-Max缩放)

这个是最常用的,公式非常直观:

scaled_value = (x - 列最小值) / (列最大值 - 列最小值)

通过把数据减去最小值,再除以极差(最大值减最小值),就能把所有数据压缩到0到1之间。

2. 缩放到[-1,1]

在Min-Max缩放的基础上做个线性变换就行:

scaled_value = 2 * ((x - 列最小值) / (列最大值 - 列最小值)) - 1

先把数据拉到[0,1],再通过乘2减1,把范围平移拉伸到[-1,1]。

二、Python里的简便实现

1. Scikit-learn(最推荐,适配机器学习工作流)

sklearn的MinMaxScaler专门干这个,而且能完美适配训练-测试集的缩放逻辑,避免数据泄露:

缩放到[0,1]

from sklearn.preprocessing import MinMaxScaler
import numpy as np

# 示例数据:2个样本,3个特征列
data = np.array([[1, 2, 3], [4, 5, 6]])

# 初始化缩放器,指定范围[0,1]
scaler = MinMaxScaler(feature_range=(0, 1))
# 拟合训练数据并完成缩放
scaled_data = scaler.fit_transform(data)
print(scaled_data)
# 输出:[[0. 0. 0.]
#        [1. 1. 1.]]

缩放到[-1,1]

只需要修改feature_range参数,其他逻辑完全一样:

scaler = MinMaxScaler(feature_range=(-1, 1))
scaled_data = scaler.fit_transform(data)
print(scaled_data)
# 输出:[[-1. -1. -1.]
#        [ 1.  1.  1.]]

重点:后续处理测试数据时,直接用scaler.transform(test_data)就行,不用重新拟合,这样能保证训练和测试集用的是同一套min/max规则,这是机器学习里的关键细节!

2. Numpy手动实现(灵活定制场景)

如果不想依赖sklearn,用Numpy几行代码就能搞定,适合需要自定义逻辑的情况:

缩放到[0,1]

import numpy as np

data = np.array([[1, 2, 3], [4, 5, 6]])

# 按特征列计算最小值和最大值
min_vals = np.min(data, axis=0)
max_vals = np.max(data, axis=0)

# 计算缩放后的数据
scaled_data_01 = (data - min_vals) / (max_vals - min_vals)
print(scaled_data_01)

缩放到[-1,1]

基于上面的结果做个变换:

scaled_data_neg1_pos1 = 2 * scaled_data_01 - 1
print(scaled_data_neg1_pos1)

这种方式适合你只需要对特定列缩放,或者要和其他数据处理步骤结合的场景。

小提醒

  • 如果数据里有极端离群值,Min-Max缩放会把大部分数据挤在很小的区间里,这时候可以先对离群值做截断(比如用95%分位数代替超出部分),或者改用RobustScaler(基于中位数和四分位数的缩放,对离群值更鲁棒)。
  • 永远不要用测试集的min/max来缩放训练集,一定要用训练集拟合的参数去变换测试集,不然会影响模型的泛化能力。

内容的提问来源于stack exchange,提问作者Teodorico Levoff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:59:40