Optimization with multiple losses in lmfit

37 views Asked by At

I am trying to fit parameters to minimize the errors for both ET and T (see below) i.e., with multiple losses using library lmfit. ET and T can have different lengths. What modification do I need to make in function min_model to consider multiple losses (loss_1 and loss_2) during optimization?

from lmfit import Minimizer, Parameters
def min_model(params,df,obs_LE,weekly_T_obs_global):
    mod_LE,_,_,_,T_ET_pre = calLE_PM(df,params)
    weekly_LE_mod = weekly_average(DateTime,mod_LE)
    weekly_LE_obs = weekly_average(DateTime,obs_LE)
    weekly_T_ET_mod = weekly_average(DateTime,T_ET_pre)
    weekly_T_mod = weekly_LE_mod*weekly_T_ET_mod
    temp = pd.DataFrame({'weekly_T_obs_global':weekly_T_obs_global,'weekly_T_mod':weekly_T_mod,
                        'weekly_LE_obs':weekly_LE_obs,'weekly_LE_mod':weekly_LE_mod})
    temp = temp.dropna()
    weekly_T_obs_global_1 = temp['weekly_T_obs_global'].values
    weekly_T_mod_1 = temp['weekly_T_mod'].values
    weekly_LE_mod_1 = temp['weekly_LE_mod']
    weekly_LE_obs_1 = temp['weekly_LE_obs']
    loss_1 = (obs_LE - mod_LE) ** 2         # Loss 1
    loss_2 = (weekly_LE_obs_1 - weekly_LE_mod_1)**2    # Loss 2
    return loss_1

def fit_gsurf_params(df,weekly_T_obs_global, tag=1, min_fit_var='LE_c'):
    params = setup_params(tag)
    LE_obs = df[min_fit_var]
    minner = Minimizer(min_model, params, fcn_args=(df,LE_obs,weekly_T_obs_global))
    fit = minner.minimize()
    LE_pm,g_surf_mod,g_canopy_mod,g_soil_mod,_ = calLE_PM(df,fit.params)
    return g_surf_mod, g_soil_mod, g_canopy_mod, LE_pm
0

There are 0 answers