123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- # time: 2024/9/23 15:27
- # file: formula.py
- # author: David
- # company: shenyang JY
- import numpy as np
- class Formulas(object):
- def __init__(self, opt):
- self.opt = opt
- def calculate_acc(self, label_data, predict_data):
- loss = np.sum((label_data - predict_data) ** 2) / len(label_data) # mse
- loss_sqrt = np.sqrt(loss) # rmse
- loss_acc = (1 - loss_sqrt / self.opt.cap) * 100
- return loss_acc
- def calculate_acc_south(self, label_data, predict_data):
- cap = 0.1 * self.opt.cap
- mask = (label_data < cap) & (predict_data < cap)
- label_data = label_data[~mask]
- predict_data = predict_data[~mask]
- diff = label_data - predict_data
- base = np.where(label_data < self.opt.cap * 0.2, self.opt.cap * 0.2, label_data)
- acc = np.sum((diff / base) ** 2) / len(diff)
- acc = (1 - np.sqrt(acc)) * 100
- return acc
- def calculate_acc_northwest(self, label_data, predict_data):
- cap = 0.03 * self.opt.cap
- mask = (label_data < cap) & (predict_data < cap)
- label_data = label_data[~mask]
- predict_data = predict_data[~mask]
- diff = np.abs(label_data - predict_data)
- base1 = label_data + predict_data + 1e-9
- base2 = np.sum(diff) + 1e-9
- acc = (1 - 2 * np.sum(np.abs(label_data / base1 - 0.5) * diff / base2)) * 100
- return acc
- def calculate_acc_northeast(self, label_data, predict_data):
- cap = 0.1 * self.opt.cap
- mask = (label_data < cap) & (predict_data < cap)
- label_data = label_data[~mask]
- predict_data = predict_data[~mask]
- diff = np.abs(predict_data - label_data)
- deviation = diff / np.abs(predict_data + 1e-9)
- acc = np.where(deviation >= 1, 1, deviation)
- acc = 1 - np.mean(acc)
- return acc
- if __name__ == '__main__':
- from config import myargparse
- args = myargparse(discription="场站端配置", add_help=False)
- opt = args.parse_args_and_yaml()
- formula = Formulas(opt)
|