首页 > 编程知识 正文

处理时序数据的神经网络

时间:2023-05-06 19:24:58 阅读:279381 作者:2119

相关参考文献:

1.时间序列交叉验证

2.机器学习与时间序列预测

3.时序数据预测案例: O2O Coupon Usage Forecast

4.时间序列模型中样本时间窗口的选择-华泰期货

5.scikit-learn交叉验证时间序列数据的自定义拆分

6.Feature Selection for Time Series Forecasting with Python

 

一、背景

最近在做项目的时候,出现这样的情况:模型在随机划分的测试集上表现很,却在按月划分的测试集上表现极其

分析发现样本集具有时序性,在模型训练时未将时间因素考虑在内,导致模型泛化能力差;基于此,调整模型调参时的交叉验证方式,由系统随机划分改为自定义按月划分

 

二、自定义交叉验证数据集

具体Python代码如下:

1.自定义交叉验证划分规则:

# 自定义交叉验证(月)def data2lst(lst): ret = [] for i in lst: ret += i return retdef createCv(x_train_month, x_train, y_train, n): groups = x_train.groupby(x_train_month).groups sorted_groups = [value.tolist() for (key, value) in sorted(groups.items())] cv = [(np.array(data2lst(sorted_groups[i:i+n])), np.array(sorted_groups[i+n])) for i in range(len(sorted_groups)-n)] return cv

2.测试

# 随机生成测试数据import pandas as pdimport numpy as npx_train = pd.DataFrame(list(range(100)), columns=['col0'])y_train = pd.DataFrame([np.random.randint(0, 2) for i in range(100)], columns=['y'])x_train_month = ['2018-01']*20 + ['2018-02']*20 + ['2018-03']*20 + ['2018-04']*20 + ['2018-05']*20# 3个月训练,1个月验证 n = 3cv = createCv(x_train_month, x_train, y_train, n) # 返回x_train的indexprint(len(cv))print(cv)

# 搭配GridSearchCV使用param_test = {'max_depth': list(range(5,12,2))}gsearch1 = GridSearchCV( estimator=XGBClassifier() , param_grid = param_test , cv=cv)

三、结果

1.能有效解决过拟合现象;

2.在测试集上的效果稍有提升;

3.某种程度上提升模型训练效率

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。