コード例 #1
0
ファイル: nomenclature.py プロジェクト: inglada/iota2
    def createConfusionMatrix(self, otbmatrix):
        """Create a multi-level confusion matrix (pandas DataFrame)

        otbmatrix : csv file
            an OTB confusionMatrix file

        Return
        ------
        pandas.core.frame.DataFrame
            vector or raster QML style file
        """

        mat = fu.confCoordinatesCSV(otbmatrix)
        d = defaultdict(list)
        for k, v in mat:
            d[k].append(v)
        csv_f = list(d.items())

        # get matrix from csv
        matrix = fu.gen_confusionMatrix(csv_f, self.getCode(self.level))

        # MultiIndex Pandas dataframe
        cmdf = DataFrame(matrix, index=self.HierarchicalNomenclature, \
                         columns=self.HierarchicalNomenclature)
        cmdf.sort_index(level=self.level - 1, inplace=True, axis=1)
        cmdf.sort_index(level=self.level - 1, inplace=True, axis=0)

        return cmdf
コード例 #2
0
def merge_confusions(csv_in, labels, csv_out):
    """
    from a list of confusion matrix, generate an unique one

    Parameters
    ----------
    csv_in : list
        paths to csv confusion matrix
    labels : list
        all possible labels
    csv_out : string
        output path
    """
    csv = fu.confCoordinatesCSV(csv_in)
    csv_f = fu.sortByFirstElem(csv)
    conf_mat = fu.gen_confusionMatrix(csv_f, labels)
    write_csv(conf_mat, labels, csv_out)
コード例 #3
0
def confusion_fusion(input_vector: str, data_field: str, csv_out: str,
                     txt_out: str, csv_path: str, runs: int, crop_mix: bool,
                     annual_crop: List[str],
                     annual_crop_label_replacement: int) -> None:
    """merge otb tile confusion matrix

    Parameters
    ----------
    input_vector: str
        input database
    data_field: str
        data field
    csv_out: str
        output csv file which will contains the merge of matrix
    txt_out: str
        diretory which will contains the resulting file of merged matrix
    csv_path: str
        path to the directory which contains all *.csv files to merge
    runs: int
        number of random learning/validation samples-set
    crop_mix: bool
        inform if cropMix workflow is enable
    annual_crop: list
        list of annual labels
    annual_crop_label_replacement: int
        replace annual labels by annual_crop_label_replacement
    """

    for seed in range(runs):
        #Recherche de toute les classes possible
        all_class = []
        all_class = fu.getFieldElement(input_vector, "ESRI Shapefile",
                                       data_field, "unique")
        all_class = sorted(all_class)

        #Initialisation de la matrice finale
        all_conf = fu.FileSearch_AND(csv_path, True,
                                     "seed_" + str(seed) + ".csv")
        csv = fu.confCoordinatesCSV(all_conf)
        csv_f = fu.sortByFirstElem(csv)

        conf_mat = fu.gen_confusionMatrix(csv_f, all_class)
        if crop_mix:
            write_csv(
                conf_mat, all_class,
                csv_out + "/MatrixBeforeClassMerge_" + str(seed) + ".csv")
            conf_mat, all_class = replace_annual_crop_in_conf_mat(
                conf_mat, all_class, annual_crop,
                annual_crop_label_replacement)
            write_csv(conf_mat, all_class,
                      csv_out + "/Classif_Seed_" + str(seed) + ".csv")
        else:
            write_csv(conf_mat, all_class,
                      csv_out + "/Classif_Seed_" + str(seed) + ".csv")

        nbr_good = conf_mat.trace()
        nbr_sample = conf_mat.sum()

        if nbr_sample > 1:
            overall_acc = float(nbr_good) / float(nbr_sample)
        else:
            overall_acc = 0.0
        kappa = compute_kappa(conf_mat)
        precision = compute_precision_by_class(conf_mat, all_class)
        recall = compute_recall_by_class(conf_mat, all_class)
        f_score = compute_fscore_by_class(precision, recall, all_class)

        write_results(
            f_score, recall, precision, kappa, overall_acc, all_class,
            txt_out + "/ClassificationResults_seed_" + str(seed) + ".txt")