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

2024-05-29 12:02:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前希望存储在嵌套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在不同的函数中用作参数


Tags: 方法inmodfalseforparamordersm
2条回答

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

想象

  • a是param
  • b是季节性的吗
  • 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计算

假设答案越高越好,但如果答案越低越好,则很容易修改

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

当我进行参数调优时,我会将结果存储在字典或数据帧中,但大部分存储在数据帧中,因为您可以更灵活地进行进一步处理(ofc您以后也可以从字典创建数据帧)

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"]))

然后,通过如下方式查找最佳参数的索引,可以获得最佳结果/参数:

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

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

相关问题 更多 >

    热门问题