r"""Calculate Root Mean Squared Error (RMSE). Args: input_trues (Sequence[float]): Ground truth values. input_preds (Sequence[float]): Predicted values. Returns: Optional[float]: RMSE value, or None if inputs have different lengths.
(
input_trues: Sequence[float],
input_preds: Sequence[float],
)
| 63 | |
| 64 | |
| 65 | def rmse( |
| 66 | input_trues: Sequence[float], |
| 67 | input_preds: Sequence[float], |
| 68 | ) -> Optional[float]: |
| 69 | r"""Calculate Root Mean Squared Error (RMSE). |
| 70 | |
| 71 | Args: |
| 72 | input_trues (Sequence[float]): Ground truth values. |
| 73 | input_preds (Sequence[float]): Predicted values. |
| 74 | |
| 75 | Returns: |
| 76 | Optional[float]: RMSE value, or None if inputs have different lengths. |
| 77 | """ |
| 78 | if len(input_trues) != len(input_preds): |
| 79 | logger.warning("Input lengths mismatch in RMSE calculation") |
| 80 | return None |
| 81 | |
| 82 | trues = np.array(input_trues) |
| 83 | preds = np.array(input_preds, dtype=float) |
| 84 | |
| 85 | # Ignore NaN values in predictions |
| 86 | eval_idx = ~np.isnan(preds) |
| 87 | if not np.any(eval_idx): |
| 88 | logger.warning("No valid predictions for RMSE calculation") |
| 89 | return None |
| 90 | |
| 91 | trues = trues[eval_idx] |
| 92 | preds = preds[eval_idx] |
| 93 | |
| 94 | return float(np.sqrt(np.mean((preds - trues) ** 2))) |
| 95 | |
| 96 | |
| 97 | def auroc(trues: Sequence[bool], preds: Sequence[float]) -> float: |
no test coverage detected