首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何对时间序列测试数据进行预处理以进行分类预测?

如何对时间序列测试数据进行预处理以进行分类预测?
EN

Stack Overflow用户
提问于 2017-07-13 20:00:14
回答 1查看 863关注 0票数 0

当使用时间序列数据集训练分类器模型时,如果您使用整个训练数据集的最小/最大值进行归一化/缩放,那么您也会考虑未来的值,而在真实场景中,您不会有这些信息,对吧?好的,那么你应该只用你的训练数据来构建你的scaler:

代码语言:javascript
代码运行次数:0
运行
复制
scaler = StandardScaler().fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)

但是,如果新值与训练值略有不同怎么办?

考虑到这一点,我想是这样的:

代码语言:javascript
代码运行次数:0
运行
复制
scaler = StandardScaler() # or MinMaxScaler()

scaler_train = scaler.fit(X_train)
X_train = scaler_train.transform(X_train)

scaler_full = scaler.fit(X) # X_train + X_test
X_test = scaler_full.transform(X_test)

或者可能只是对训练和测试的平均值和标准差进行平均,以标准化测试输入:

代码语言:javascript
代码运行次数:0
运行
复制
X_train_mean = np.mean(X_train)
X_train_std  = np.std(X_train)
X_train_normalized = (X_train - X_train_mean) / X_train_std

X_test_mean = np.mean(y_test)
X_test_std  = np.std(y_test)

new_mean =  (X_train_mean + X_test_mean) / 2
new_std  =  (X_train_std + X_test_std) / 2

X_test_normalized = (X_test - new_mean) / new_std

与日志(1+x)相同的this log1p solution如何处理(-1;∞)?或者exp normalize呢?

处理这种情况的最佳实践是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-13 20:16:21

首先,你应该使用scikit learn的pipelines。这确保了,当您的训练数据适合您的管道时,测试数据中不会有任何data leakage

你的所有建议都支持数据泄漏,从而导致过度拟合。

但是,我要强调的是,当您将训练数据缩放到-1和1之间时,这不一定适用于您的测试数据。但是,您的分类器/回归通常仍然能够解释这些输入。此外,您使用的是标准定标器,它可以简单地转换为零均值和单位方差。因此,任何足够大/足够小的值仍然是可能的,但不太可能

通常,对于test_set,您只希望有几个点超出该范围。否则,你没有“有代表性地”或随着时间的推移,一些本质上发生了变化的东西。然后你可以重新训练你的算法。但如果算法的泛化性能良好,这也无关紧要。

也许你应该使用cross validation for time-series sampling scheme

移位的对数(而不是通常的对数)通常仅用于允许0个输入值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45080001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档