results = pd.DataFrame() # sweep over the parameter lambda for sigma in sigmas: # reset total error counts for mean error metric SFCLS_Error_Total = 0 FCLS_Error_Total = 0 LASSO_Error_Total = 0 p_norm_Error_Total = 0 delta_Error_Total = 0 # initialize experiment np.random.seed(1) random.seed(1) endmembs = spec_lib("asu", ascii_spectra="input/endmemb_libs/rogers_tes73.txt", meta_csv="input/endmemb_libs/rogers_meta.csv") synth = SynthMix(thresh=min_endmemb) metrics = [] N = endmembs.spectra.shape[0] # number of spectral channels M = endmembs.spectra.shape[1] # number of endmembers # iterate over K mixtures for i in range(K): # create synthetic mixture mixture = synth.mars_mix(endmembs) mixture_noisy = mixture.perturb(method="gauss", deviation=sigma) # SFCLS prediction x, _ = SFCLS_unmix(endmembs.spectra, mixture_noisy.spectra,
idx_73pnt = np.append(idx_73pnt, np.arange(64, 110)) channels = 73 # import dataframe of emissivities and metadata print("loading data from:") file_name = "TES_emissivity_0.csv" df = pd.read_csv(file_path + file_name) print(file_path + file_name) for i in range(1, 7): file_name = "TES_emissivity_{}.csv".format(i) df = df.append(pd.read_csv(file_path + file_name)) print(file_path + file_name) # import bedrock endmembers endmembs = spec_lib( "asu_hdf", hdf_file="/home/john/datasets/asu/bedrock_lib_v5_73pnts_highSi.hdf") bedrock_idx = endmembs.index # append atmospheric endmembers atmosphere = spec_lib("asu_hdf", hdf_file="/home/john/datasets/asu/atmlib_73channels.hdf") endmembs.append(atmosphere) Ne = endmembs.spectra.shape[1] # setup output FCLS_abundance = np.zeros((int(Nx), int(Ny), Ne)) FCLS_RMS = np.zeros((int(Nx), int(Ny))) FCLS_SD = np.zeros((int(Nx), int(Ny), Ne)) SFCLS_abundance = np.zeros((int(Nx), int(Ny), Ne)) SFCLS_RMS = np.zeros((int(Nx), int(Ny)))
def main(): # start from a random seed np.random.seed(seed) # initialize experiment endmembs = spec_lib("asu", ascii_spectra="input/kim/kim_library_tab.txt", meta_csv="input/kim/kim_library_meta.csv") mixtures = MixClass(ascii_spectra="input/kim/mtes_kimmurray_rocks_full_tab.txt", meta_csv="input/kim/mtes_kimmurray_rocks_full_meta.csv") # crop spectra at 400 wavenumbers endmembs.spectra = endmembs.spectra[104:, :] mixtures.spectra = mixtures.spectra[104:, :] endmembs.bands = endmembs.bands[104:] metrics_FCLS = [] metrics_inftyNorm = [] metrics_LASSO = [] metrics_pnorm = [] metrics_delta = [] # iterate over mixtures for i in range(len(mixtures.names)): # extract next mixture mixture = mixtures.single(i) idx_pos_truth = np.nonzero(mixture.presence > 0)[0] # check if mixture is labelled as valid if mixture.category == "valid_mixture": # spectral unmixing if run_inftyNorm: # SFCLS prediction x = inftyNorm_unmix(endmembs.spectra, mixture.spectra, lam=lam_infty) metrics_inftyNorm.append(Metrics(x, mixture, mixture, endmembs.spectra, idx_pos_truth)) if run_FCLS: # FCLS prediction x = FCLS_unmix(endmembs.spectra, mixture.spectra) metrics_FCLS.append(Metrics(x, mixture, mixture, endmembs.spectra, idx_pos_truth)) if run_LASSO: # LASSO prediction x = LASSO_unmix(endmembs.spectra, mixture.spectra, lam=lam_LASSO) x = x / sum(x) metrics_LASSO.append(Metrics(x, mixture, mixture, endmembs.spectra, idx_pos_truth)) if run_pnorm: # p-norm prediction x = pNorm_unmix(endmembs.spectra, mixture.spectra, lam=lam_pnorm, p=p) metrics_pnorm.append(Metrics(x, mixture, mixture, endmembs.spectra, idx_pos_truth)) if run_delta: # delta norm prediction x = deltaNorm_unmix(endmembs.spectra, mixture.spectra, lam=lam_delta, delta=delta) metrics_delta.append(Metrics(x, mixture, mixture, endmembs.spectra, idx_pos_truth)) # save metrics result_path, today = create_directory() # create experiment index i = 0 while os.path.exists(result_path + today + "_experiment_params%d.csv" % i): i += 1 # store experiment parameters to export with results experiment_params = [{"seed": seed, "K": K, "sigma": sigma, "thresh": thresh, "run_FCLS": run_inftyNorm, "run_LASSO": run_LASSO, "run_pnorm": run_pnorm, "run_delta": run_delta, "lam_LASSO": lam_LASSO, "lam_delta": lam_delta, "lam_pnorm": lam_pnorm, "delta": delta, "p": p}] saveListOfDicts(experiment_params, "labmix_params", result_path, today, i) # save results of experiments if run_inftyNorm: saveListOfDicts(metrics_inftyNorm, "labmix_infty", result_path, today, i) if run_delta: saveListOfDicts(metrics_delta, "labmix_delta", result_path, today, i) if run_FCLS: saveListOfDicts(metrics_FCLS, "labmix_FCLS", result_path, today, i) if run_LASSO: saveListOfDicts(metrics_LASSO, "labmix_LASSO", result_path, today, i) if run_pnorm: saveListOfDicts(metrics_pnorm, "labmix_pnorm", result_path, today, i)