Первый запуск
This commit is contained in:
50
Tester/RegressionMetricsCalculator.py
Normal file
50
Tester/RegressionMetricsCalculator.py
Normal file
@@ -0,0 +1,50 @@
|
||||
import math
|
||||
from typing import List
|
||||
|
||||
|
||||
class RegressionMetricsCalculator:
|
||||
def __init__(self):
|
||||
self.errors: List[float] =[]
|
||||
|
||||
def add_sample(self, score: float):
|
||||
"""
|
||||
score: число от 0.0 до 1.0 (результат evaluate_template_similarity)
|
||||
Идеал - это 1.0. Ошибка - это то, насколько мы отклонились от 1.0.
|
||||
"""
|
||||
# Защита от кривых значений (если вдруг score вылезет за пределы)
|
||||
score = max(0.0, min(1.0, score))
|
||||
error = 1.0 - score
|
||||
self.errors.append(error)
|
||||
|
||||
def calculate(self) -> dict:
|
||||
n = len(self.errors)
|
||||
if n == 0:
|
||||
return {}
|
||||
|
||||
# 1. MAE (Mean Absolute Error) - Средняя абсолютная ошибка
|
||||
mae = sum(abs(e) for e in self.errors) / n
|
||||
|
||||
# 2. MSE (Mean Squared Error) - Среднеквадратичная ошибка
|
||||
mse = sum(e**2 for e in self.errors) / n
|
||||
|
||||
# 3. RMSE (Root Mean Squared Error) - Корень из MSE
|
||||
rmse = math.sqrt(mse)
|
||||
|
||||
# 4. MAPE (Mean Absolute Percentage Error) - в процентах
|
||||
# Так как наше "истинное" значение всегда 1.0, деление на 1.0 ничего не меняет,
|
||||
# мы просто умножаем на 100 для получения процентов.
|
||||
mape = (sum(abs(e) / 1.0 for e in self.errors) / n) * 100
|
||||
|
||||
# 5. MAD (Mean Absolute Deviation)
|
||||
# В статистике часто означает среднее отклонение от СРЕДНЕЙ ошибки
|
||||
# (чтобы показать разброс ошибок вокруг их собственного среднего).
|
||||
mean_error = sum(self.errors) / n
|
||||
mad = sum(abs(e - mean_error) for e in self.errors) / n
|
||||
|
||||
return {
|
||||
"MAE": round(mae, 4),
|
||||
"MAPE (%)": round(mape, 2),
|
||||
"MAD": round(mad, 4),
|
||||
"MSE": round(mse, 6),
|
||||
"RMSE": round(rmse, 4)
|
||||
}
|
||||
Reference in New Issue
Block a user