在预处理数据时遇到了一种特殊情况。
假设我有一个数据集A
。我将数据集分为A_train
和A_test
。我使用任何给定的缩放器(sci-kit学习)来拟合A_train
,并使用该A_test
转换scaler
。现在,用A_train
训练神经网络并在A_test
上进行验证非常有效。没有过拟合的地方,而且性能也不错。
假设我的数据集B
具有与A
中相同的特征,但特征值的范围不同。 A
和B
的一个简单示例可以分别是波士顿和巴黎的住房数据集(这只是类比,例如成本,犯罪率等特征范围差异很大)。为了在B
上测试上述训练模型的性能,我们根据B
的缩放属性对A_train
进行了转换,然后进行了验证。这通常会降低性能,因为此模型永远不会显示来自B
的数据。
奇怪的是,如果我直接对B
进行拟合和变换,而不是使用A_train
的缩放属性,则性能会好很多。通常,如果我在A_test
上进行测试,则会降低性能。在这种情况下,它似乎可以工作,尽管不正确。
由于我主要研究气候数据集,因此对每个数据集进行培训都是不可行的。因此,我想知道最佳的方法来扩展具有相同功能的不同数据集,以获得更好的性能。
请提出任何想法。
PS:我知道使用更多数据训练模型可以提高性能,但是我对正确的扩展方式更感兴趣。我尝试从数据集中删除异常值并应用QuantileTransformer
,它可以提高性能,但可能会更好。
答案 0 :(得分:0)
一个可能的解决方案可能是这样。
只要有新数据集,例如B:
当您在集合B及其规范化版本之间进行一对一映射时,您可以基于对归一化集合B的预测来查看集合B的预测。
请注意,您不需要预先访问集合B(如果有数百个,则无需访问这些集合)。您将它们标准化,一旦得到一个,就想要在其上测试您训练有素的模型。