Python 为什么我会得到;ValueError:零大小数组到没有标识的最大缩减操作”;在AutoArima(Pmdarima)中?
在使用pmdarima库中的AutoArima预测时间序列时,我得到了“ValueError:zero size array to reduction operation maximum,它没有标识” 数据的形状为(27,1),列车数据的形状为(24,1) 数据如下:Python 为什么我会得到;ValueError:零大小数组到没有标识的最大缩减操作”;在AutoArima(Pmdarima)中?,python,python-3.x,time-series,pmdarima,pyramid-arima,Python,Python 3.x,Time Series,Pmdarima,Pyramid Arima,在使用pmdarima库中的AutoArima预测时间序列时,我得到了“ValueError:zero size array to reduction operation maximum,它没有标识” 数据的形状为(27,1),列车数据的形状为(24,1) 数据如下: YearMnth Quantity 2018-10-01 384 2018-11-01 544 2018-12-01 1060 2019-01-01 190 20
YearMnth Quantity
2018-10-01 384
2018-11-01 544
2018-12-01 1060
2019-01-01 190
2019-02-01 352
2019-03-01 873
2019-04-01 704
2019-05-01 1266
2019-06-01 1010
2019-07-01 604
2019-08-01 896
2019-09-01 909
2019-10-01 1229
2019-11-01 1515
2019-12-01 1063
2020-01-01 1014
2020-02-01 472
2020-03-01 2000
2020-04-01 1065
2020-05-01 1160
2020-06-01 1524
2020-07-01 1307
2020-08-01 1575
2020-09-01 1561
2020-10-01 2536
2020-11-01 1058
2020-12-01 1770
我想这可能是因为该系列的长度为27,但我无法承担更改长度的费用,因为有许多系列将进入程序,仅更改长度将不是正确的做法
同样,对于火车数据,长度为24,自动Arima模型可以很好地进行训练
以下是培训代码:
autoModel = pm.auto_arima(df_train.Quantity, trace=True, error_action='ignore',
suppress_warnings=True, seasonal=True, m=12, stepwise=True)
autoModel.fit(df_train.Quantity)
order = autoModel.order
预测代码:
autoModel = pm.auto_arima(df_series.Quantity, trace=True, error_action='ignore',
suppress_warnings=True, seasonal=True, m=12, stepwise=True)
autoModel.fit(df_series.Quantity)
order = autoModel.order
seasonalOrder = autoModel.seasonal_order
ForecastValues = autoModel.predict(n_periods=6,order=order,seasonal_order=seasonalOrder)
以下是完整的错误消息:
<ipython-input-137-0d894e08f9e0> in AutoSarima_Forecast(df_series, ForecastWindow)
1 def AutoSarima_Forecast(df_series,ForecastWindow):
2 autoModel = pm.auto_arima(df_series.Quantity, trace=True, error_action='ignore',
----> 3 suppress_warnings=True, seasonal=True, m=12, stepwise=True)
4 autoModel.fit(df_series.Quantity)
5 order = autoModel.order
~/anaconda3/envs/python3/lib/python3.6/site-packages/pmdarima/arima/auto.py in auto_arima(y, X, start_p, d, start_q, max_p, max_d, max_q, start_P, D, start_Q, max_P, max_D, max_Q, max_order, m, seasonal, stationary, information_criterion, alpha, test, seasonal_test, stepwise, n_jobs, start_params, trend, method, maxiter, offset_test_args, seasonal_test_args, suppress_warnings, error_action, trace, random, random_state, n_fits, return_valid_fits, out_of_sample_size, scoring, scoring_args, with_intercept, sarimax_kwargs, **fit_args)
521 elif D is None: # we don't have a D yet and we need one (seasonal)
522 D = nsdiffs(xx, m=m, test=seasonal_test, max_D=max_D,
--> 523 **seasonal_test_args)
524
525 if D > 0 and X is not None:
~/anaconda3/envs/python3/lib/python3.6/site-packages/pmdarima/arima/utils.py in nsdiffs(x, m, max_D, test, **kwargs)
121 return D
122
--> 123 dodiff = testfunc(x)
124
125 return D
~/anaconda3/envs/python3/lib/python3.6/site-packages/pmdarima/arima/seasonality.py in estimate_seasonal_differencing_term(self, x)
590
591 # Get the critical value for m
--> 592 stat = self._compute_test_statistic(x)
593 crit_val = self._calc_ocsb_crit_val(self.m)
594 return int(stat > crit_val)
~/anaconda3/envs/python3/lib/python3.6/site-packages/pmdarima/arima/seasonality.py in _compute_test_statistic(self, x)
530 for lag_term in range(1, maxlag + 1): # 1 -> maxlag (incl)
531 try:
--> 532 fit = self._fit_ocsb(x, m, lag_term, maxlag)
533 fits.append(fit)
534 icvals.append(icfunc(fit))
~/anaconda3/envs/python3/lib/python3.6/site-packages/pmdarima/arima/seasonality.py in _fit_ocsb(x, m, lag, max_lag)
486 # the linear model's constructor
487 mf = ylag[:y.shape[0]]
--> 488 ar_fit = sm.OLS(y, add_constant(mf)).fit(method='qr')
489
490 # Create Z4
~/anaconda3/envs/python3/lib/python3.6/site-packages/statsmodels/tools/tools.py in add_constant(data, prepend, has_constant)
336 raise ValueError('Only implemented for 2-dimensional arrays')
337
--> 338 is_nonzero_const = np.ptp(x, axis=0) == 0
339 is_nonzero_const &= np.all(x != 0.0, axis=0)
340 if is_nonzero_const.any():
<__array_function__ internals> in ptp(*args, **kwargs)
~/anaconda3/envs/python3/lib/python3.6/site-packages/numpy/core/fromnumeric.py in ptp(a, axis, out, keepdims)
2579 else:
2580 return ptp(axis=axis, out=out, **kwargs)
-> 2581 return _methods._ptp(a, axis=axis, out=out, **kwargs)
2582
2583
~/anaconda3/envs/python3/lib/python3.6/site-packages/numpy/core/_methods.py in _ptp(a, axis, out, keepdims)
245 def _ptp(a, axis=None, out=None, keepdims=False):
246 return um.subtract(
--> 247 umr_maximum(a, axis, None, out, keepdims),
248 umr_minimum(a, axis, None, None, keepdims),
249 out
ValueError: zero-size array to reduction operation maximum which has no identity
在AutoSarima_预测中(df_系列,ForecastWindow)
1 def AutoSarima_预测(df_系列,预测窗口):
2 autoModel=pm.auto\u arima(df\u series.Quantity,trace=True,error\u action='ignore',
---->3抑制(警告=真、季节=真、m=12、逐步=真)
4自动模型安装(df_系列数量)
5订单=autoModel.order
在auto_arima中~/anaconda3/envs/python3/lib/python3.6/site-packages/pmdarima/arima/auto.py(y,X,开始p,d,开始q,最大p,最大d,最大q,开始p,d,开始q,最大p,最大p,最大d,最大顺序,m,季节性,平稳性,信息标准,阿尔法,测试,季节性测试,逐步,n个作业,开始参数,趋势,方法,最大值,偏移测试参数,季节性测试参数,抑制警告,错误动作,跟踪,随机,随机状态,n拟合,返回_有效拟合、超出样本大小、计分、计分参数、带截距、sarimax、kwargs、**拟合参数)
521 elif D没有:#我们还没有D,我们需要一个(季节性的)
522 D=NSDiff(xx,m=m,测试=季节性测试,最大D=最大D,
-->523**季节性试验(参数)
524
525如果D>0且X不是无:
nsdiff中的~/anaconda3/envs/python3/lib/python3.6/site-packages/pmdarima/arima/utils.py(x,m,max_D,test,**kwargs)
121返回D
122
-->123 dodiff=testfunc(x)
124
125返回D
估算项中的~/anaconda3/envs/python3/lib/python3.6/site-packages/pmdarima/arima/季节性.py
590
591#获取m的临界值
-->592统计=自我计算测试统计(x)
593临界值=self.\u calc\u ocsb\u临界值(self.m)
594返回整数(统计>临界值)
~/anaconda3/envs/python3/lib/python3.6/site-packages/pmdarima/arima/季节性.py in_compute_test_statistic(self,x)
530范围内的滞后项(1,最大滞后+1):#1->最大滞后(包括)
531尝试:
-->532拟合=自拟合ocsb(x,m,滞后项,最大滞后)
533适合。附加(适合)
534 icvals.append(icfunc(fit))
~/anaconda3/envs/python3/lib/python3.6/site-packages/pmdarima/arima/季节性.py in_-fit_-ocsb(x,m,滞后,最大滞后)
486#线性模型的构造函数
487 mf=ylag[:y.形状[0]]
-->488 ar_fit=sm.OLS(y,加上常数(mf)).fit(方法='qr')
489
490#创建Z4
添加常量中的~/anaconda3/envs/python3/lib/python3.6/site-packages/statsmodels/tools/tools.py(数据,前置,具有常量)
336 raise VALUERROR('仅对二维数组实施')
337
-->338是非零常数=np。ptp(x,轴=0)==0
339是非零常数&=np.all(x!=0.0,轴=0)
340如果是非零常数any():
在ptp中(*args,**kwargs)
ptp中的~/anaconda3/envs/python3/lib/python3.6/site-packages/numpy/core/fromneric.py(a、axis、out、keepdims)
2579其他:
2580返回ptp(轴=轴,输出=输出,**kwargs)
->2581返回方法。ptp(a,轴=轴,输出=输出,**kwargs)
2582
2583
~/anaconda3/envs/python3/lib/python3.6/site-packages/numpy/core//u methods.py in\u ptp(a、axis、out、keepdims)
245 def_ptp(a,轴=无,输出=无,keepdims=假):
246返回um.subtract(
-->247 umr_最大值(a、轴、无、输出、保持),
最低248 umr_(a、轴、无、无、保持),
249分
ValueError:从零大小数组到没有标识的最大缩减操作
如果只是因为序列的长度而不是由pmdArima处理,那么解决问题的解决方法应该是什么