当前位置: 首页 > news >正文

上海景朋建设工程有限公司网站网站建设定制公司

上海景朋建设工程有限公司网站,网站建设定制公司,瑞安商城网站建设,wordpress缩略图幻灯片展现使用Catboost从RNN、ARIMA和Prophet模型中提取信号进行预测 集成各种弱学习器可以提高预测精度#xff0c;但是如果我们的模型已经很强大了#xff0c;集成学习往往也能够起到锦上添花的作用。流行的机器学习库scikit-learn提供了一个StackingRegressor#xff0c;可以用于…使用Catboost从RNN、ARIMA和Prophet模型中提取信号进行预测 集成各种弱学习器可以提高预测精度但是如果我们的模型已经很强大了集成学习往往也能够起到锦上添花的作用。流行的机器学习库scikit-learn提供了一个StackingRegressor可以用于时间序列任务。但是StackingRegressor有一个局限性;它只接受其他scikit-learn模型类和api。所以像ARIMA这样在scikit-learn中不可用的模型或者来自深度神经网络的模型都无法使用。在这篇文章中我将展示如何堆叠我们能见到的模型的预测。 我们将用到下面的包 pip install --upgrade scalecastconda install tensorflowconda install shapconda install -c conda-forge cmdstanpypip install prophet数据集 数据集每小时一次分为训练集(700个观测值)和测试集(48个观测值)。下面代码是读取数据并将其存储在Forecaster对象中: importpandasaspdimportnumpyasnpfromscalecast.ForecasterimportForecasterfromscalecast.utilimportmetricsimportmatplotlib.pyplotaspltimportseabornassnsdefread_data(idxH1, cisTrue, metrics [smape]):infopd.read_csv(M4-info.csv,index_col0,parse_dates[StartingDate],dayfirstTrue,)trainpd.read_csv(fHourly-train.csv,index_col0,).loc[idx]testpd.read_csv(fHourly-test.csv,index_col0,).loc[idx]ytrain.valuessdinfo.loc[idx,StartingDate]fcst_horizoninfo.loc[idx,Horizon]cdpd.date_range(startsd,freqH,periodslen(y),)fForecaster(yy, # observed valuescurrent_datescd, # current datesfuture_datesfcst_horizon, # forecast lengthtest_lengthfcst_horizon, # test-set lengthciscis, # whether to evaluate intervals for each modelmetricsmetrics, # what metrics to evaluate)returnf, test.valuesf, test_setread_data()f# display the Forecaster object结果是这样的 模型 在我们开始构建模型之前我们需要从中生成最简单的预测naive方法就是向前传播最近24个观测值。 f.set_estimator(naive)f.manual_forecast(seasonalTrue)然后使用ARIMA、LSTM和Prophet作为基准。 ARIMA Autoregressive Integrated Moving Average 是一种流行而简单的时间序列技术它利用序列的滞后和误差以线性方式预测其未来。通过EDA我们确定这个系列是高度季节性的。所以最终选择了应用order (5,1,4) x(1,1,1,24)的季节性ARIMA模型。 f.set_estimator(arima)f.manual_forecast(order (5,1,4),seasonal_order (1,1,1,24),call_me manual_arima,)LSTM 如果说ARIMA是时间序列模型中比较简单的一种那么LSTM就是比较先进的方法之一。它是一种具有许多参数的深度学习技术其中包括一种在顺序数据中发现长期和短期模式的机制这在理论上使其成为时间序列的理想选择。这里使用tensorflow建立这个模型 f.set_estimator(rnn)f.manual_forecast(lags48,layers_struct[(LSTM,{units:100,activation:tanh}),(LSTM,{units:100,activation:tanh}),(LSTM,{units:100,activation:tanh}),],optimizerAdam,epochs15,plot_lossTrue,validation_split0.2,call_mernn_tanh_activation,)f.manual_forecast(lags48,layers_struct[(LSTM,{units:100,activation:relu}),(LSTM,{units:100,activation:relu}),(LSTM,{units:100,activation:relu}),],optimizerAdam,epochs15,plot_lossTrue,validation_split0.2,call_mernn_relu_activation,)Prophet 尽管它非常受欢迎但有人声称它的准确性并不令人印象深刻主要是因为它对趋势的推断有时候很不切实际而且它没有通过自回归建模来考虑局部模式。但是它也有自己的特点。1它会自动将节日效果应用到模型身上并且还考虑了几种类型的季节性。可以以用户所需的最低需求来完成这一切所以我喜欢把它用作信号而不是最终的预测结果。 f.set_estimator(prophet)f.manual_forecast()比较结果 现在我们已经为每个模型生成了预测让我们看看它们在验证集上的表现如何验证集是我们训练集中的最后48个观察结果。 resultsf.export(determine_best_byTestSetSMAPE)msresults[model_summaries]ms[[ModelNickname,TestSetLength,TestSetSMAPE,InSampleSMAPE,]]每个模型的表现都优于naive方法。ARIMA模型表现最好百分比误差为4.7%其次是Prophet模型。让我们看看所有的预测与验证集的关系: f.plot(order_byTestSetSMAPE,ciTrue)plt.show()所有这些模型在这个时间序列上的表现都很合理它们之间没有很大的偏差。下面让我们把它们堆起来! 堆叠模型 每个堆叠模型都需要一个最终估计器它将过滤其他模型的各种估计创建一组新的预测。我们将把之前结果与Catboost估计器叠加在一起。Catboost是一个强大的程序希望它能从每个已经应用的模型中充实出最好的信号。 f.add_signals(f.history.keys(), # add signals from all previously evaluated models)f.add_ar_terms(48)f.set_estimator(catboost)上面的代码将来自每个评估模型的预测添加到Forecaster对象中。它称这些预测为“信号”。 它们的处理方式与存储在同一对象中的任何其他协变量相同。 这里还添加了最后 48 个系列的滞后作为 Catboost 模型可以用来进行预测的附加回归变量。 现在让我们调用三种 Catboost 模型一种使用所有可用信号和滞后一种仅使用信号一种仅使用滞后。 f.manual_forecast(Xvarsall,call_mecatboost_all_reg,verboseFalse,)f.manual_forecast(Xvars[xforxinf.get_regressor_names() ifx.startswith(AR)], call_mecatboost_lags_only,verboseFalse,)f.manual_forecast(Xvars[xforxinf.get_regressor_names() ifnotx.startswith(AR)], call_mecatboost_signals_only,verboseFalse,)下面可以比较所有模型的结果。我们将研究两个度量:SMAPE和平均绝对比例误差(MASE)。这是实际M4比赛中使用的两个指标。 test_resultspd.DataFrame(indexf.history.keys(),columns [smape,mase])fork, vinf.history.items():test_results.loc[k,[smape,mase]] [metrics.smape(test_set,v[Forecast]),metrics.mase(test_set,v[Forecast],m24,obsf.y),]test_results.sort_values(smape)可以看到通过组合来自不同类型模型的信号生成了两个优于其他估计器的估计器:使用所有信号训练的Catboost模型和只使用信号的Catboost模型。这两种方法的样本误差都在2.8%左右。下面是对比图 fig, axplt.subplots(figsize(12,6))f.plot(models [catboost_all_reg,catboost_signals_only],ciTrue,axax)sns.lineplot(xf.future_dates, ytest_set, axax,labelheld out actuals,colordarkblue,alpha.75,)plt.show()哪些信号最重要? 为了完善分析我们可以使用shapley评分来确定哪些信号是最重要的。Shapley评分被认为是确定给定机器学习模型中输入的预测能力的最先进的方法之一。得分越高意味着输入在特定模型中越重要。 f.export_feature_importance(catboost_all_reg)上面的图只显示了前几个最重要的预测因子但我们可以从中看出ARIMA信号是最重要的其次是序列的第一个滞后然后是Prophet。RNN模型的得分也高于许多滞后模型。如果我们想在未来训练一个更轻量的模型这可能是一个很好的起点。 总结 在这篇文章中我展示了在时间序列上下文中集成模型的力量以及如何使用不同的模型在时间序列上获得更高的精度。这里我们使用scalecast包这个包的功能还是很强大的如果你喜欢可以去它的主页看看 https://avoid.overfit.cn/post/cd910a41e6b94852b762cd6f2abf8b16 作者Michael Keith
http://www.hkea.cn/news/14535031/

相关文章:

  • 大型机械网站建设公司舞美设计制作公司
  • 网站当电话线注册公司有哪些风险
  • 姜堰网站制作无锡企业网站设计公司
  • 搜索引擎 网站推广 举例wordpress插件王
  • 网站建设最重要的是什么织梦做的网站怎么添加关键词
  • 网站建设网络推广seo页面设计存在的问题
  • 厦门网页设计培训seo是怎么优化的
  • 做网站展示软件域名创建
  • qq免费搭建网站汉中网站制作
  • 贵州建设监理网站培训通知栏新泰网络推广公司电话
  • 网站后台可改资料网站项目开发流程及规范
  • 开发软件的网站深圳企业网站建设企业
  • 集团网站建设管理制度wordpress 如何购买主题
  • 建站平台在线提交表格功能琪恋网站建设
  • 专业网站建设公司用织梦吗wordpress自适应移动端
  • 网站权重问题网站建设php心得体会
  • 要怎样做网站发到百度上面营销策略有哪些有效手段
  • 网站建好以后每年都续费么国内做的好的电商网站有哪些
  • 加盟做网站网站h5什么意思
  • 如何建设视频资源电影网站北京和隆优化招聘
  • 网页界面设计的界面结构组成wordpress百度收录优化
  • 建网站选域名响应式企业网站源码
  • 上海网站制作软件华久做网站
  • 网站如何免费做SEO优化网站建设ag
  • 做博客网站的空间容量需要多少搭建微擎网站后怎么做微官网
  • 做慧聪网价格网站价格网站建设毕业设计题目
  • 潍坊网站建设解决方案当地自己的淘宝网站怎么做
  • 网站备案协议最大的设计公司
  • 龙岩网站设计找哪家公司wordpress转移空间500错误
  • jsp开发的网站长链接转换成短链接工具