def fit_standard_hawkes_model_bfgs(S, K, B, dt, dt_max, output_path, init_len=10000, xv_len=1000): """ Fit :param S: :return: """ # Check for existing results if os.path.exists(out_path + ".bfgs.pkl"): print("Existing BFGS results found. Loading from file.") with open(output_path + ".bfgs.pkl", 'r') as f: init_model, init_time = pickle.load(f) else: print("Fitting the data with a standard Hawkes model") # betas = np.logspace(-3,-0.8,num=10) betas = np.array([0.01, 0.1, 1.0, 10.0, 20.0]) # betas = np.concatenate(([0], betas)) init_models = [] S_init = S[:init_len, :] xv_ll = np.zeros(len(betas)) S_xv = S[init_len:init_len + xv_len, :] # Make a model to initialize the parameters init_model = DiscreteTimeStandardHawkesModel(K=K, dt=dt, B=B, dt_max=dt_max, beta=0.0) init_model.add_data(S_init) # Initialize the background rates to their mean init_model.initialize_to_background_rate() start = time.clock() for i, beta in enumerate(betas): print("Fitting with BFGS on first ", init_len, " time bins, beta = ", beta) init_model.beta = beta init_model.fit_with_bfgs() init_models.append(init_model.copy_sample()) # Compute the heldout likelihood on the xv data xv_ll[i] = init_model.heldout_log_likelihood(S_xv) if not np.isfinite(xv_ll[i]): xv_ll[i] = -np.inf init_time = time.clock() - start # Take the best model print("XV predictive log likelihoods: ") for beta, ll in zip(betas, xv_ll): print("Beta: %.2f\tLL: %.2f" % (beta, ll)) best_ind = np.argmax(xv_ll) print("Best beta: ", betas[best_ind]) init_model = init_models[best_ind] if best_ind == 0 or best_ind == len(betas) - 1: print("WARNING: Best BFGS model was for extreme value of beta. " \ "Consider expanding the beta range.") # Save the model (sans data) with open(output_path + ".bfgs.pkl", 'w') as f: print("Saving BFGS results to ", (output_path + ".bfgs.pkl")) pickle.dump((init_model, init_time), f, protocol=-1) return init_model, init_time
def fit_standard_hawkes_model_bfgs(S, K, dt, dt_max, output_path, W_max=None): """ Fit :param S: :return: """ # Check for existing results if os.path.exists(out_path + ".bfgs.pkl"): print "Existing BFGS results found. Loading from file." with open(output_path + ".bfgs.pkl", "r") as f: init_model, init_time = cPickle.load(f) else: print "Fitting the data with a standard Hawkes model" # betas = np.logspace(-1,1.3,num=1) # betas = [ 0.0 ] # We want the max W ~ -.025 and the mean to be around 0.01 # W ~ Gamma(alpha, beta) => E[W] = alpha/beta, so beta ~100 * alpha alpha = 1.1 betas = [alpha * 1.0 / 0.01] init_models = [] xv_len = 10000 init_len = S.shape[0] - 10000 S_init = S[:init_len, :] xv_ll = np.zeros(len(betas)) S_xv = S[init_len : init_len + xv_len, :] # Make a model to initialize the parameters test_basis = IdentityBasis(dt, dt_max, allow_instantaneous=True) init_model = DiscreteTimeStandardHawkesModel( K=K, dt=dt, dt_max=dt_max, alpha=alpha, beta=0.0, basis=test_basis, allow_self_connections=False, W_max=W_max, ) init_model.add_data(S_init) # Initialize the background rates to their mean init_model.initialize_to_background_rate() start = time.clock() for i, beta in enumerate(betas): print "Fitting with BFGS on first ", init_len, " time bins, ", "beta = ", beta, "W_max = ", W_max init_model.beta = beta init_model.fit_with_bfgs() init_models.append(init_model.copy_sample()) # Compute the heldout likelihood on the xv data xv_ll[i] = init_model.heldout_log_likelihood(S_xv) if not np.isfinite(xv_ll[i]): xv_ll[i] = -np.inf init_time = time.clock() - start # Take the best model print "XV predictive log likelihoods: " for beta, ll in zip(betas, xv_ll): print "Beta: %.2f\tLL: %.2f" % (beta, ll) best_ind = np.argmax(xv_ll) print "Best beta: ", betas[best_ind] init_model = init_models[best_ind] if best_ind == 0 or best_ind == len(betas) - 1: print "WARNING: Best BFGS model was for extreme value of beta. " "Consider expanding the beta range." # Save the model (sans data) with open(output_path + ".bfgs.pkl", "w") as f: print "Saving BFGS results to ", (output_path + ".bfgs.pkl") cPickle.dump((init_model, init_time), f, protocol=-1) return init_model, init_time
def fit_standard_hawkes_model_bfgs(S, K, dt, dt_max, output_path, W_max=None): """ Fit :param S: :return: """ # Check for existing results if os.path.exists(out_path + ".bfgs.pkl"): print "Existing BFGS results found. Loading from file." with open(output_path + ".bfgs.pkl", 'r') as f: init_model, init_time = cPickle.load(f) else: print "Fitting the data with a standard Hawkes model" # betas = np.logspace(-1,1.3,num=1) # betas = [ 0.0 ] # We want the max W ~ -.025 and the mean to be around 0.01 # W ~ Gamma(alpha, beta) => E[W] = alpha/beta, so beta ~100 * alpha alpha = 1.1 betas = [alpha * 1.0 / 0.01] init_models = [] xv_len = 10000 init_len = S.shape[0] - 10000 S_init = S[:init_len, :] xv_ll = np.zeros(len(betas)) S_xv = S[init_len:init_len + xv_len, :] # Make a model to initialize the parameters test_basis = IdentityBasis(dt, dt_max, allow_instantaneous=True) init_model = DiscreteTimeStandardHawkesModel( K=K, dt=dt, dt_max=dt_max, alpha=alpha, beta=0.0, basis=test_basis, allow_self_connections=False, W_max=W_max) init_model.add_data(S_init) # Initialize the background rates to their mean init_model.initialize_to_background_rate() start = time.clock() for i, beta in enumerate(betas): print "Fitting with BFGS on first ", init_len, " time bins, ", \ "beta = ", beta, "W_max = ", W_max init_model.beta = beta init_model.fit_with_bfgs() init_models.append(init_model.copy_sample()) # Compute the heldout likelihood on the xv data xv_ll[i] = init_model.heldout_log_likelihood(S_xv) if not np.isfinite(xv_ll[i]): xv_ll[i] = -np.inf init_time = time.clock() - start # Take the best model print "XV predictive log likelihoods: " for beta, ll in zip(betas, xv_ll): print "Beta: %.2f\tLL: %.2f" % (beta, ll) best_ind = np.argmax(xv_ll) print "Best beta: ", betas[best_ind] init_model = init_models[best_ind] if best_ind == 0 or best_ind == len(betas) - 1: print "WARNING: Best BFGS model was for extreme value of beta. " \ "Consider expanding the beta range." # Save the model (sans data) with open(output_path + ".bfgs.pkl", 'w') as f: print "Saving BFGS results to ", (output_path + ".bfgs.pkl") cPickle.dump((init_model, init_time), f, protocol=-1) return init_model, init_time
def fit_standard_hawkes_model_bfgs(S, K, B, dt, dt_max, output_path, init_len=10000, xv_len=1000): """ Fit :param S: :return: """ # Check for existing results if os.path.exists(out_path + ".bfgs.pkl"): print "Existing BFGS results found. Loading from file." with open(output_path + ".bfgs.pkl", 'r') as f: init_model, init_time = cPickle.load(f) else: print "Fitting the data with a standard Hawkes model" # betas = np.logspace(-3,-0.8,num=10) betas = np.array([0.01, 0.1, 1.0, 10.0, 20.0]) # betas = np.concatenate(([0], betas)) init_models = [] S_init = S[:init_len,:] xv_ll = np.zeros(len(betas)) S_xv = S[init_len:init_len+xv_len, :] # Make a model to initialize the parameters init_model = DiscreteTimeStandardHawkesModel(K=K, dt=dt, B=B, dt_max=dt_max, beta=0.0) init_model.add_data(S_init) # Initialize the background rates to their mean init_model.initialize_to_background_rate() start = time.clock() for i,beta in enumerate(betas): print "Fitting with BFGS on first ", init_len, " time bins, beta = ", beta init_model.beta = beta init_model.fit_with_bfgs() init_models.append(init_model.copy_sample()) # Compute the heldout likelihood on the xv data xv_ll[i] = init_model.heldout_log_likelihood(S_xv) if not np.isfinite(xv_ll[i]): xv_ll[i] = -np.inf init_time = time.clock() - start # Take the best model print "XV predictive log likelihoods: " for beta, ll in zip(betas, xv_ll): print "Beta: %.2f\tLL: %.2f" % (beta, ll) best_ind = np.argmax(xv_ll) print "Best beta: ", betas[best_ind] init_model = init_models[best_ind] if best_ind == 0 or best_ind == len(betas) - 1: print "WARNING: Best BFGS model was for extreme value of beta. " \ "Consider expanding the beta range." # Save the model (sans data) with open(output_path + ".bfgs.pkl", 'w') as f: print "Saving BFGS results to ", (output_path + ".bfgs.pkl") cPickle.dump((init_model, init_time), f, protocol=-1) return init_model, init_time