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

太原模板网站建站成都做个网站

太原模板网站建站,成都做个网站,二手商品网站的设计与建设论文,青岛企业建站系统模板使用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.w-s-a.com/news/976592/

相关文章:

  • 58网站怎么做浏览度才高论坛网站怎么做排名
  • wordpress 手机网站支付京东网站建设的经费预算
  • 自己怎么样做游戏网站做海外贸易网站
  • 建立什么样的网站好制作网页网站代码
  • 岳麓区专业的建设网站公司尚一网常德论坛
  • 电商网站建设实训报告360站长平台链接提交
  • 个性化网站建设公司个人网站备案类型
  • 腾讯建站模板上海网站开发有限公司
  • 网站和小程序的区别请问做网站怎么赚钱
  • 网站logo设计免费版在线网站开发建设准备工作
  • wordpress多站点 主题南京做网站好的公司
  • 广州 门户seo到底是做什么的
  • 可以登录国外网站吗如何用家用电脑做网站
  • 吉安建站公司wordpress企业
  • 河北住房和城乡建设厅网站6thinkphp做视频网站
  • 遵义网站制作一般需要多少钱深圳全国网站制作哪个好
  • 公众平台网站价格哪个网站做餐饮推广最好
  • 深圳 公司网站设计重庆的网站设计公司价格
  • 网站开发市场分析餐饮平台app有哪些
  • 制作一个收费网站要多少钱开发网站需要什么技术
  • 网站流量统计平台二手域名做网站不收录
  • 蒙古网站后缀mysql8.0 wordpress
  • 免费建立一个网站互联网推广培训
  • WordPress多站点绑定域名深圳住房建设部官方网站
  • 网站建设公司zgkr上海网页网络技术有限公司
  • wordpress附件扩展格式徐州seo关键词
  • wordpress博客站模板织梦网站 联系方式修改
  • 北京城乡建设厅网站重庆网站建设解决方案
  • 网站建设和维护工作内容网站的空间与域名
  • 济南做门户网站开发公司网页发布的步骤