使用两个单独的变量存储嵌套 for 循环的值

Store value from nested for loop with two separate variables

我目前正在寻找存储在嵌套 for 循环中创建的变量:

for param in pdq:
    for param_seasonal in seasonal_pdq:
        mod = sm.tsa.statespace.SARIMAX(y, order=param, seasonal_order=param_seasonal, enforce_stationarity=False, enforce_invertibility=False)
        results = mod.fit()

在上面的示例中,我需要获得生成最佳结果的 paramparam_seasonal。我一直在尝试不同的数据结构,但一直无法找到任何有用的东西,更不用说 pythonic 了。

我正在寻找的结果是一种从 mod 获得最佳结果并能够使用相应的 paramparam_seasonal 作为参数的方法不同的功能。

如果我对你的问题的理解是正确的,那么下面的例子应该可以解决问题

想象一下

  • a 是参数
  • b 是 param_seasonal
  • ans 是 mod
def example_func(a, b):
    return(-a-b+(a**2)+(b**2))

best_score = 0
best_a = 0
best_b = 0

for a in [1, 2, 3, 4]:
    for b in [5,6,7,8]:
        
        answer =  example_func(a, b)
        
        if answer > best_score:
            best_score = answer
            best_a = a
            best_b = b
        
print(best_score)      
print(best_a)
print(best_b)

输出是

68
4
8

这意味着68是最佳值,并且是按a=4和b=8计算的。

假设答案越高越好,但可以很容易地mod确定答案越低越好。

然后您可以在 for 循环的外部和下方使用 best_a 和 best_b 将所需的变量传递给您想要的任何函数

当我进行参数调整时,我将结果存储在字典或数据框中,但主要是数据框,因为您可以更灵活地进行进一步处理(当然,您稍后也可以从字典创建数据框)。

import pandas as pd
df_parameter_tuning = pd.DataFrame()
for param in pdq:
    for param_seasonal in seasonal_pdq:
        mod = sm.tsa.statespace.SARIMAX(y, order=param, seasonal_order=param_seasonal, enforce_stationarity=False, enforce_invertibility=False)
        results = mod.fit()
        df_parameter_tuning = df_parameter_tuning.append(pd.DataFrame([[param_seasonal, results]],columns=["params", "results"]))

然后您可以通过查找最佳参数的索引来获得最佳 results/parameters:

print(df_parameter_tuning.loc[df_parameter_tuning["results"].argmax()])

这样做的好处是,您还可以探索其他参数及其结果,例如绘制它们以查看模式或其他要探索的数据点。