Skip to content
Snippets Groups Projects
Regression_metrics.py 1.28 KiB
Newer Older
  • Learn to ignore specific revisions
  • DIANE's avatar
    DIANE committed
    from Packages import *
    
    
    DIANE's avatar
    DIANE committed
    
    
    DIANE's avatar
    DIANE committed
    class metrics:
        def __init__(self, meas, pred):
    
            if isinstance(meas, pd.DataFrame):
                self.meas = meas.to_numpy()
            else :
                self.meas = meas.ravel()
    
    DIANE's avatar
    DIANE committed
            
            if isinstance(pred, pd.DataFrame):
                self.pred = pred.to_numpy().ravel()
            else :
                self.pred = pred.ravel()
    
    DIANE's avatar
    DIANE committed
        
        @property
        def evaluate_(self):
               xbar = np.mean(self.meas) # the average of measured values
    
    DIANE's avatar
    DIANE committed
               e2 = np.square(np.subtract(self.meas, self.pred))# the squared error
    
    DIANE's avatar
    DIANE committed
    
    
    DIANE's avatar
    DIANE committed
              # Sum of squared:
               # TOTAL
               sst = np.sum((self.meas-xbar)**2)
               # RESIDUAL
               ssr = np.sum(e2)
               # REGRESSION OR MODEL
               ssm = np.sum(self.pred - xbar)
    
               
    
              # Compute statistical metrics
               metr = pd.DataFrame()
               metr['r'] = [np.corrcoef(self.meas.ravel(), self.pred)[0,1]]
    
    DIANE's avatar
    DIANE committed
               metr['r2'] = [ssm/sst]
    
    DIANE's avatar
    DIANE committed
               metr['rmse'] = [np.sqrt(np.mean(e2))]
               metr['mae'] = [np.mean(np.abs(e2))]
               metr['rpd'] = [np.std(self.meas)/np.sqrt(np.mean(e2))]
               metr['rpiq'] = [(np.quantile(self.meas,.75)-np.quantile(self.meas,.25))/np.sqrt(np.mean(e2))]
    
    DIANE's avatar
    DIANE committed
               return metr.round(3)