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

如何在Python与scikit-learn中实现中心不变的数据集缩放

解决方案:保持正负性的数据缩放工具

你需要的是不改变数据正负性、0点固定的缩放工具,scikit-learn里有现成方案,也可以自定义实现:

1. 直接用scikit-learn内置的MaxAbsScaler

MaxAbsScaler 完全匹配你的核心需求:它将每个特征除以该特征的最大绝对值,把数据缩至[-1,1]范围,完全保留正负性,0点始终为0,完美对应你第一个示例的预期结果。

代码实现:

from sklearn import preprocessing

array = [[-5.0, 0.0, 1.25, 2.5]]
scaler = preprocessing.MaxAbsScaler()
scaler.fit(array)
print("Scaled:", scaler.transform(array))
# 输出:Scaled: [[-1.  0.  0.25 0.5]]

关于你第二个示例的说明:
当用新数据[[-0.1, 0.1, 7.0, 10.0]]重新拟合时,MaxAbsScaler会以新数据的最大绝对值(10.0)作为缩放基准,转换原数组的结果为:

scaler.fit([[-0.1, 0.1, 7.0, 10.0]])
print("Scaled:", scaler.transform(array))
# 输出:Scaled: [[-0.5  0.   0.125 0.25]]

你伪代码中的输出可能存在笔误,但如果确实需要自定义缩放逻辑,可以参考下面的方法。

2. 自定义缩放器(适配特殊需求)

如果需要更个性化的规则(比如正负区间用不同比例缩放),可以继承scikit-learn的基类实现专属缩放器:

from sklearn.base import BaseEstimator, TransformerMixin
import numpy as np

class CustomZeroCenteredScaler(BaseEstimator, TransformerMixin):
    def __init__(self, feature_range=(-1, 1)):
        self.feature_range = feature_range
        self.pos_scale = 1.0
        self.neg_scale = 1.0

    def fit(self, X, y=None):
        # 计算正负方向的缩放因子
        X_flat = X.flatten()
        pos_data = X_flat[X_flat > 0]
        neg_data = X_flat[X_flat < 0]
        
        if len(pos_data) > 0:
            self.pos_scale = self.feature_range[1] / np.max(pos_data)
        if len(neg_data) > 0:
            self.neg_scale = self.feature_range[0] / np.min(neg_data)
        return self

    def transform(self, X, y=None):
        X_scaled = np.copy(X)
        X_scaled[X > 0] *= self.pos_scale
        X_scaled[X < 0] *= self.neg_scale
        return X_scaled

# 使用示例
scaler = CustomZeroCenteredScaler(feature_range=(-1, 1))
scaler.fit(array)
print("Scaled:", scaler.transform(array))
# 输出:Scaled: [[-1.  0.  0.25 0.5]]

总结

  • 优先使用MaxAbsScaler,这是scikit-learn原生支持的工具,简单高效,完全满足你“保持正负性、0点不变”的核心需求。
  • 如果有特殊缩放规则,再考虑自定义缩放器,上述示例类可直接修改适配你的具体场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:45:44