Spaces:
Runtime error
Runtime error
File size: 2,184 Bytes
92b63f0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# evaluation.py
import logging
import mlflow
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
import pandas as pd
from sklearn.base import BaseEstimator
# from zenml.client import Client
# experiment_tracker = Client().active_stack.experiment_tracker
class ModelEvaluator:
def __init__(self, model: BaseEstimator, X_test: pd.DataFrame, y_test: pd.Series):
"""
Initializes the ModelEvaluator with model, test data, and experiment details.
Parameters:
model : BaseEstimator
The trained model to evaluate.
X_test : pd.DataFrame
The test features.
y_test : pd.Series
The true labels for the test set.
experiment_name : str, optional
Name of the MLflow experiment to log metrics. Default is 'default_experiment'.
"""
self.model = model
self.X_test = X_test
self.y_test = y_test
self.logger = logging.getLogger(__name__)
def evaluate_model(self) -> dict:
"""
Evaluates the model and logs metrics to MLflow.
Returns:
-------
dict
A dictionary containing accuracy, precision, recall, and f1-score.
"""
# Set experiment explicitly
# mlflow.set_experiment(self.experiment_name)
# with mlflow.start_run():
y_pred = self.model.predict(self.X_test)
# Calculate and log evaluation metrics
metrics = {
"accuracy": accuracy_score(self.y_test, y_pred),
"precision": precision_score(self.y_test, y_pred, average='binary'),
"recall": recall_score(self.y_test, y_pred, average='binary'),
"f1_score": f1_score(self.y_test, y_pred, average='binary')
}
# # Log evaluation metrics
# for metric_name, metric_value in metrics.items():
# mlflow.log_metric(metric_name, metric_value)
for metric_name, metric_value in metrics.items():
# mlflow.log_metric(metric_name, metric_value)
self.logger.info(f"{metric_name.capitalize()}: {metric_value:.4f}")
return metrics
|