else: model_file = os.path.join(dest, 'train_test_var_%.2f_%.2f_dim_%d_par_%d_test_%d.pkl' % ( var_x, var_comp, n_dim, n_particle, nt)) if not os.path.exists(model_file): # change file extension from pkl to txt for writing log log = os.path.splitext(model_file)[0] + ".txt" eval_log = os.path.splitext(model_file)[0] + "_eval.txt" if os.path.exists(log): os.remove(log) if os.path.exists(eval_log): os.remove(eval_log) if model == 'brescal': _model = PFBayesianRescal(n_dim, var_x=var_x, n_particles=n_particle, compute_score=False, parallel=False, log=log, eval_log=eval_log, dest=model_file, sample_all=True) elif model == 'bcomp_add': _model = PFBayesianCompRescal(n_dim, compositionality='additive', var_x=var_x, var_comp=var_comp, n_particles=n_particle, compute_score=False, log=log, dest=model_file, eval_log=eval_log) elif model == 'bcomp_mul': _model = PFBayesianCompRescal(n_dim, compositionality='multiplicative', var_x=var_x, var_comp=var_comp, n_particles=n_particle, compute_score=False, log=log, dest=model_file, eval_log=eval_log) elif model == 'logit': _model = PFBayesianLogitRescal(n_dim, log=log, dest=model_file, compute_score=False) else: raise Exception('No such model exists %s' % model) seq = _model.fit(T, obs_mask=obs_mask, max_iter=max_iter, test_mask=test_mask)
parallel=False, sample_all=True) elif model == 'bcomp_add': _model = PFBayesianCompRescal(n_dim, compositionality='additive', var_x=var_x, var_comp=var_comp, n_particles=n_particle, compute_score=False) elif model == 'bcomp_mul': _model = PFBayesianCompRescal(n_dim, compositionality='multiplicative', var_x=var_x, var_comp=var_comp, n_particles=n_particle, compute_score=False) elif model == 'logit': _model = PFBayesianLogitRescal(n_dim, compute_score=False, n_particles=n_particle) elif model == 'logit_mul': _model = PFBayesianCompRescal(n_dim, compositionality='logit_mul', n_particles=n_particle, compute_score=False) else: raise Exception('No such model exists %s' % model) seq = _model.fit(T, obs_mask=train.copy(), max_iter=max_iter) particle = _model.p_weights.argmax() _X = _model._reconstruct(_model.E[particle], _model.R[particle]) val_auc = roc_auc_score(T[validT == 1].flatten(), _X[validT == 1].flatten()) auc = roc_auc_score(T[testT == 1].flatten(), _X[testT == 1].flatten()) if (model, p) not in result: result[(model, p)] = list() result[(model, p)].append([val_auc, auc]) print(model, p, val_auc, auc) pickle.dump(result, open(output_file, 'wb')) pickle.dump(_model, open(os.path.join(dest, '%s_%.2f.pkl' % (model, p)), 'wb')) pickle.dump(_model.E[particle], open(os.path.join(dest, 'E_%s_%.2f.pkl' % (model, p)), 'wb')) pickle.dump(_model.R[particle], open(os.path.join(dest, 'R_%s_%.2f.pkl' % (model, p)), 'wb'))