【发布时间】:2019-09-21 23:30:54
【问题描述】:
我在预处理数据时遇到了一种特殊情况。
假设我有一个数据集A。我将数据集拆分为A_train 和A_test。我使用任何给定的缩放器(sci-kit learn)拟合A_train,并用scaler转换A_test。现在使用A_train 训练神经网络并在A_test 上进行验证效果很好。没有过拟合,性能很好。
假设我有数据集B,其特征与A 中的特征相同,但特征值的范围不同。 A 和 B 的一个简单示例可以分别是波士顿和巴黎的住房数据集(这只是一个类比,说成本、犯罪率等特征范围差异很大)。为了测试上述训练模型在B 上的性能,我们根据A_train 的缩放属性对B 进行变换,然后进行验证。这通常会降低性能,因为此模型从未显示来自B 的数据。
奇怪的是,如果我直接在B 上进行拟合和变换,而不是使用A_train 的缩放属性,性能会好很多。通常,如果我在A_test 上进行测试,这会降低性能。在这种情况下,它似乎工作,虽然它不正确。
由于我主要研究气候数据集,因此对每个数据集都进行培训是不可行的。因此,我想知道使用相同特征扩展此类不同数据集以获得更好性能的最佳方法。
任何想法,请。
PS:我知道用更多数据训练我的模型可以提高性能,但我对正确的扩展方式更感兴趣。我尝试从数据集中删除异常值并应用QuantileTransformer,它提高了性能但可能会更好。
【问题讨论】:
-
如果住房数据集的并行性成立,我不明白为什么针对特定上下文训练的模型应该适用于另一个上下文。有些功能和动态可以匹配,有些则不匹配。基于错误的假设,您的模型可能存在严重缺陷。
-
我没有说住房数据集的并行性成立,我的意思是另一个数据集具有相同的特征,但它们完全处于不同的范围内。如果您知道巴黎或加利福尼亚的成本有多高。该引用是为了显示一个类比。这就像在美国训练气候模型并预测欧洲气候。我总是可以通过显示更多数据来提高性能,但是有一个限制。
标签: python scikit-learn neural-network preprocessor feature-scaling