跨不同数据集扩展的最佳方法

时间:2019-05-03 12:06:00

标签: python scikit-learn neural-network preprocessor feature-scaling

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

假设我有一个数据集A。我将数据集分为A_trainA_test。我使用任何给定的缩放器(sci-kit学习)来拟合A_train,并使用该A_test转换scaler。现在,用A_train训练神经网络并在A_test上进行验证非常有效。没有过拟合的地方,而且性能也不错。

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

奇怪的是,如果我直接对B进行拟合和变换,而不是使用A_train的缩放属性,则性能会好很多。通常,如果我在A_test上进行测试,则会降低性能。在这种情况下,它似乎可以工作,尽管不正确。

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

请提出任何想法。

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

1 个答案:

答案 0 :(得分:0)

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

  1. 对数据集A进行规范化(预处理),以使每个特征的范围在固定的间隔内,例如,在[-1,1]之间。
  2. 在归一化集合A上训练模型。
  3. 只要有新数据集,例如B:

    • (3.1。)标准化新数据集,以使特征具有与A([-1,1])中相同的范围。
    • (3.2)将训练后的模型(第2步)应用于规范化的新集合(3.1)。
  4. 当您在集合B及其规范化版本之间进行一对一映射时,您可以基于对归一化集合B的预测来查看集合B的预测。

请注意,您不需要预先访问集合B(如果有数百个,则无需访问这些集合)。您将它们标准化,一旦得到一个,就想要在其上测试您训练有素的模型。