x = xs[0].copy() x[z[:,1]] = xs[1][z[:,1]] x[z[:,2]] = xs[2][z[:,2]] z_ind = np.zeros(n, dtype=int) z_ind[z[:,1]] = 1 z_ind[z[:,2]] = 2 # Run SA # Note that some runs for small sample sizes run have issues with # singular covariance matrices, so I simply try a couple times # if there is an issue. res_sa, _ = sim_anneal( x, init_mu, init_sigma, init_mix, num_iter=iter_num, temp_func=lambda i: max(1e-4, 100*.992**i)) # Run EM res_em, _ = em_alg( x, init_mu, init_sigma, init_mix, num_iter=iter_num) # Run DA res_da, _ = em_alg( x, init_mu, init_sigma, init_mix, num_iter=iter_num, beta_func=lambda i: 1.-np.exp(-(i+1)/5)) distances = np.array([cluster_dist(mu, res_sa[0]), cluster_dist(mu, res_em[0]), cluster_dist(mu, res_da[0])]) # Store results
init_mix, num_iter=250) res_da, (logliks_da, times_da) = em_alg(x, init_mu, init_sigma, init_mix, num_iter=250, beta_func=lambda i: 1. - np.exp(-(i + 1) / 5)) res_sa, (logliks_sa, times_sa) = sim_anneal(x, init_mu, init_sigma, init_mix, num_iter=250, seed=29624, temp_func=lambda i: max(1e-4, 100 * .992**i)) # Save results colnames = \ 'logliks_em, times_em, logliks_da, times_da, logliks_sa, times_sa' np.savetxt('./intermediate_data/singlerun_results.csv', np.column_stack((logliks_em, times_em, logliks_da, times_da, logliks_sa['best'], times_sa)), header=colnames, delimiter=',', comments='') np.savetxt('./intermediate_data/sa_singlerun.csv',
fig.savefig('./sim_data.pdf') # Estimate init_mu = np.array([[0., 0.], [1., 1.], [2., 2.]]) init_sigma = [np.identity(2) for i in range(3)] init_mix = np.array([1., 1., 1.])/3 res_em, (logliks_em, times_em) = em_alg( x, init_mu, init_sigma, init_mix, num_iter=250) res_da, (logliks_da, times_da) = em_alg( x, init_mu, init_sigma, init_mix, num_iter=250, beta_func=lambda i: 1.-np.exp(-(i+1)/5)) res_sa, (logliks_sa, times_sa) = sim_anneal( x, init_mu, init_sigma, init_mix, num_iter=250, seed=29624, temp_func=lambda i: max(1e-4, 100*.992**i)) # Save results colnames = \ 'logliks_em, times_em, logliks_da, times_da, logliks_sa, times_sa' np.savetxt( './intermediate_data/singlerun_results.csv', np.column_stack((logliks_em, times_em, logliks_da, times_da, logliks_sa['best'], times_sa)), header=colnames, delimiter=',', comments='') np.savetxt('./intermediate_data/sa_singlerun.csv', np.column_stack((logliks_sa['curr'], logliks_sa['best'])), header='logliks_curr, logliks_best', delimiter=',', comments='')
x = xs[0].copy() x[z[:,1]] = xs[1][z[:,1]] x[z[:,2]] = xs[2][z[:,2]] z_ind = np.zeros(n, dtype=int) z_ind[z[:,1]] = 1 z_ind[z[:,2]] = 2 # Run SA # Note that some runs for small sample sizes run have issues with # singular covariance matrices, so I simply try a couple times # if there is an issue. try: _, (loglik_sa, time_sa) = sim_anneal( x, init_mu, init_sigma, init_mix, num_iter=iter_num, temp_func=lambda i: max(1e-4, 100*.992**i)) except LinAlgError: try: _, (loglik_sa, time_sa) = sim_anneal( x, init_mu, init_sigma, init_mix, num_iter=iter_num, temp_func=lambda i: max(1e-4, 100*.992**i)) except LinAlgError: _, (loglik_sa, time_sa) = sim_anneal( x, init_mu, init_sigma, init_mix, num_iter=iter_num, temp_func=lambda i: max(1e-4, 100*.992**i)) # Run EM _, (logliks_em, times_em) = em_alg( x, init_mu, init_sigma, init_mix, num_iter=iter_num)