使用两个单独的变量存储嵌套 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()
在上面的示例中,我需要获得生成最佳结果的 param
和 param_seasonal
。我一直在尝试不同的数据结构,但一直无法找到任何有用的东西,更不用说 pythonic 了。
我正在寻找的结果是一种从 mod
获得最佳结果并能够使用相应的 param
和 param_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()])
这样做的好处是,您还可以探索其他参数及其结果,例如绘制它们以查看模式或其他要探索的数据点。
我目前正在寻找存储在嵌套 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()
在上面的示例中,我需要获得生成最佳结果的 param
和 param_seasonal
。我一直在尝试不同的数据结构,但一直无法找到任何有用的东西,更不用说 pythonic 了。
我正在寻找的结果是一种从 mod
获得最佳结果并能够使用相应的 param
和 param_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()])
这样做的好处是,您还可以探索其他参数及其结果,例如绘制它们以查看模式或其他要探索的数据点。