예제 #1
0
def RegionalMetrics(y_pred, y_test, Regions, lons, lats, lons1, lats1,
                    filenames_train, filenames_test, savefolder, areas_flat):
    Ntest, p = y_pred.shape
    print(y_pred.shape)
    # check Ntest == 1
    full_metrics_dict = {}
    Nreg = len(Regions)
    # Do global metrics on full grid
    metrics_dict = CalcMetrics(y_test[0, :], y_pred[0, :], areas_flat)
    # Initialise full metric dictionary and add the full global metrics
    keys = metrics_dict.keys()
    full_metrics_dict = {"Regions": ["Full Grid"] + Regions + ["All Regions"]}
    for key in keys:
        full_metrics_dict[key] = np.zeros((Nreg + 2))
        full_metrics_dict[key][0] = metrics_dict[key]
    # Now do regional metrics by taking average over regions
    if p > 1000:
        y_pred_reg = split_into_regions(y_pred, areas_flat, lons, lats, lons1,
                                        lats1, Regions)
        y_test_reg = split_into_regions(y_test, areas_flat, lons, lats, lons1,
                                        lats1, Regions)
    else:
        y_pred_reg = y_pred
        y_test_reg = y_test

    for (i, reg) in zip(range(Nreg), Regions):
        print(i, y_pred_reg[0, i])
        metrics_dict = CalcMetrics(np.array([y_test_reg[0, i]]),
                                   np.array([y_pred_reg[0, i]]),
                                   np.array([1.0]))
        for key in metrics_dict.keys():
            full_metrics_dict[key][i + 1] = metrics_dict[key]

    metrics_dict = CalcMetrics(y_test_reg[0, :], y_pred_reg[0, :],
                               np.ones(Nreg))
    for key in keys:
        full_metrics_dict[key][Nreg + 1] = metrics_dict[key]

    colnames = ["Regions"] + list(keys)
    print(colnames)
    print(full_metrics_dict)
    df = pd.DataFrame(data=full_metrics_dict, columns=colnames)
    print(df)
    df.to_csv(savefolder + 'RegionalMetrics.csv')
    return full_metrics_dict
예제 #2
0
 def regional_y(self, regions):
     print((self.y.shape))
     print(self.area_y.shape)
     y_regional = split_into_regions(self.y, self.area_y, 
                   self.lons, self.lats, self.lons1, self.lats1, 
                   regions)
     self.y = y_regional
     self.y_regions = regions
     self.area_y = np.ones(len(regions))
     self.y_type = 'Regional'
     self.info = self.info + '\nRegional y'
예제 #3
0
 def regional_X(self, regions):
     # this should only be used if X is still the original X
     # add an error catcher here for if regional_X or mean_X etc. 
     # has been applied already- or if already split into training data
     X_regional = split_into_regions(self.X, self.area_X, 
                    self.lons, self.lats, self.lons1, self.lats1, 
                    regions)
     self.X = X_regional
     self.X_type = 'Regional'
     self.area_X = np.ones(len(regions))
     self.info = self.info + '\nRegional X'