0

我在预处理数据时遇到了一个特殊的情况。

假设我有一个 dataset A。我将数据集拆分为A_trainA_test。我适合A_train使用任何给定的缩放器(sci-kit learn)并A_test使用它进行转换scaler。现在训练神经网络A_train并验证A_test效果很好。没有过拟合,性能很好。

假设我有B与 in 具有相同特征的数据集A,但特征值的范围不同。一个简单的例子可能是波士顿AB巴黎的住房数据集(这只是一个类比,说成本、犯罪率等特征范围差异很大)。为了测试上述训练模型在 上的性能,我们根据 的缩放属性进行B变换,然后进行验证。这通常会降低性能,因为该模型从未显示来自.BA_trainB

奇怪的是,如果我B直接拟合和变换而不是使用 的缩放属性A_train,性能会好很多。通常,如果我在A_test. 在这种情况下,它似乎有效,尽管它不正确。

由于我主要研究气候数据集,因此对每个数据集进行培训是不可行的。因此,我想知道使用相同特征扩展此类不同数据集以获得更好性能的最佳方法。

请有任何想法。

PS:我知道用更多数据训练我的模型可以提高性能,但我对正确的缩放方式更感兴趣。我尝试从数据集中删除异常值并应用QuantileTransformer它,它提高了性能但可能会更好。

4

1 回答 1

0

一种可能的解决方案可能是这样的。

  1. 规范化(预处理)数据集 A 使得每个特征的范围在一个固定的区间内,例如,在 [-1, 1] 之间。
  2. 在标准化集 A 上训练模型。
  3. 每当你得到一个像 B 这样的新数据集时:

    • (3.1.) 规范化新数据集,使特征具有与 A 中相同的范围 ([-1, 1])。
    • (3.2) 将您的训练模型(步骤 2)应用于归一化的新集合(3.1)。
  4. 由于集合 B 与其标准化版本之间存在一对一的映射,因此您可以根据标准化集合 B 的预测来查看集合 B 的预测是什么。

请注意,您无需提前访问集合 B(如果有数百个集合,则无需访问此类集合)。一旦给你一个并且你想在它上面测试你训练过的模型,你就会对它们进行标准化。

于 2019-05-03T12:51:04.323 回答