在训练数据上使用MinMaxScaler生成std、min和max,用于测试d

2024-10-01 02:31:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我该如何使用scikit learnMinMaxScaler来标准化pandas数据帧训练数据集中的每一列,但在我的测试数据集中使用完全相同的标准偏差,最小/最大公式?在

因为我的测试数据对模型来说是未知的,所以我不想标准化整个数据集,对于未来未知的数据,这将不是一个精确的模型。相反,我希望使用训练集将0&1之间的数据标准化,并对测试数据的公式使用相同的std、min和max数字。在

(很明显,我可以编写自己的minmax scaler,但是想知道scikit learn是否已经可以做到这一点,或者是否有一个库可以首先用于此操作)


Tags: 数据模型pandas数字scikitminmax公式
1条回答
网友
1楼 · 发布于 2024-10-01 02:31:08

你应该能够fit在你的训练数据上,然后transform你的测试数据:

scaler = MinMaxScaler()
scaler.fit(X_train)
X_train_scaled = scaler.transform(X_train)  # or: fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

你的做法现在看来是个好做法。如果你对你的整个X矩阵调用fit(训练和测试组合),你将导致信息泄漏,因为你的训练数据会事先“看到”测试数据的规模。使用MinMaxScaler()的基于类的实现是sklearn具体解决这一问题的方法,允许对象“记住”适合它的数据的属性。在

但是,请注意,MinMaxScaler()并不是扩展到~N(0,1)。事实上,它被明确地称为这种缩放的替代品。换句话说,它不能保证你的单位方差或0均值。事实上,它并不关心传统意义上定义的标准差。在

从docstring:

The transformation is given by:

X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
X_scaled = X_std * (max_ - min_) + min_

其中min_max_等于MinMaxScaler()feature_range(默认(0, 1))中的{}。手动设置为:

^{pr2}$

所以假设你有: 将numpy作为np导入 从sklearn.model_选择导入列车测试分割

np.random.seed(444)

X = np.random.normal(loc=5, scale=2, size=(200, 3))
y = np.random.normal(loc=-5, scale=3, size=X.shape[0])
X_train, X_test, y_train, y_test = train_test_split(
    X, y, random_state=444)

如果你打电话

scaler = MinMaxScaler()
X_train_scaled = scaler.fit_transform(X_train)

要知道^{}是进行拟合的数据的标准偏差。在

scaler.scale_
# array([ 0.0843,  0.0852,  0.0876])

X_train.std(axis=0)
# array([ 2.042 ,  2.0767,  2.1285])

相反,它是:

(1 - 0) / (X_train.max(axis=0) - X_train.min(axis=0))
# array([ 0.0843,  0.0852,  0.0876])

相关问题 更多 >