Пример #1
0
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,
Пример #2
0
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)))
Пример #3
0
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)