我在这个领域很新。我正在尝试迭代一些 SARIMAX 模型并将数据存储在 Dataframe 中。但是在我的 M1 Macbook 中运行这些单元需要 10 多分钟。有没有更好的方法来编写这些行以获得相同的结果?
P=D=Q= range (0,3)
s=12
PDQ=itertools.product(P,D,Q)
PDQS=[]
for x in list(PDQ):
PDQS.append((x[0],x[1],x[2],s))
import warnings
warnings.simplefilter('ignore')
cols = ['p', 'd', 'q', 'sP', 'sD', 'sQ','s','AIC', 'BIC']
Results = pd.DataFrame(np.zeros((3*5*3*len(PDQS),len(cols))))
Results.columns = cols
mod_num=0
for p in range(5):
for d in range(3):
for q in range(5):
for seasonal_order in PDQS:
if p == 0 and q == 0:
continue
mod = sm.tsa.statespace.SARIMAX(df_Sales['Sales'].astype(float), order=(p,d,q), seasonal_order= seasonal_order, enforce_invertibility=False)
try:
res = mod.fit(disp=False)
Results.iloc[mod_num,0] = p
Results.iloc[mod_num,1] = d
Results.iloc[mod_num,2] = q
Results.iloc[mod_num,3] = seasonal_order[0]
Results.iloc[mod_num,4] = seasonal_order[1]
Results.iloc[mod_num,5] = seasonal_order[2]
Results.iloc[mod_num,6] = seasonal_order[3]
Results.iloc[mod_num,7] = res.aic
Results.iloc[mod_num,8] = res.bic
mod_num+=1
except:
continue
Results
我还尝试了与 (P,D,Q,S) 一样的小型 (p,d,q) 的 itertools,但它甚至花费了两倍以上的时间。