Source code for equisolve.utils.metrics
# -*- Mode: python; tab-width: 4; indent-tabs-mode:nil; coding:utf-8 -*-
#
# Copyright (c) 2023 Authors and contributors
# (see the AUTHORS.rst file for the full list of names)
#
# Released under the BSD 3-Clause "New" or "Revised" License
# SPDX-License-Identifier: BSD-3-Clause
"""Functions for evaluating the quality of a model’s predictions."""
from typing import List
import metatensor
import numpy as np
from metatensor import TensorMap
[docs]
def rmse(y_true: TensorMap, y_pred: TensorMap, parameter_key: str) -> List[float]:
"""Mean squared error regression loss.
:param y_true: Ground truth (correct) target values.
:param y_pred: Estimated target values.
:param parameter_key: Parameter to perform the rmse for. Examples are ``"values"``,
``"positions"`` or ``"cell"``.
:returns loss: A non-negative floating point value (the best value is 0.0), or
a tuple of floating point values, one for each block in
``y_pred``.
"""
if not metatensor.equal_metadata(y_true, y_pred):
raise ValueError("Metadata of X and sample_weight does not agree!")
loss = []
for key, y_pred_block in y_pred.items():
y_true_block = y_true.block(key)
if parameter_key == "values":
y_pred_values = y_pred_block.values
y_true_values = y_true_block.values
else:
y_pred_values = y_pred_block.gradient(parameter_key).values
y_true_values = y_true_block.gradient(parameter_key).values
y_pred_values = y_pred_values.flatten()
y_true_values = y_true_values.flatten()
loss.append(np.sqrt(np.mean((y_pred_values - y_true_values) ** 2)))
return loss