Download src/model_evaluation.py from ruoc188/ML1_project_temperature_forecast: direct link, hf CLI and curl.
- Browser
- Download file 2.69 kB
-
https://huggingface.co/spaces/ruoc188/ML1_project_temperature_forecast/resolve/main/src/model_evaluation.py
- Command line
-
hf download hf://spaces/ruoc188/ML1_project_temperature_forecast/src/model_evaluation.py
-
curl -L -o model_evaluation.py https://huggingface.co/spaces/ruoc188/ML1_project_temperature_forecast/resolve/main/src/model_evaluation.py
2.69 kB
| """ | |
| Model evaluation | |
| - RMSE, R2, MAE | |
| """ | |
| from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_percentage_error, mean_absolute_error | |
| import numpy as np | |
| import pandas as pd | |
| def evaluate(y_true, y_pred): | |
| rmse = np.sqrt(mean_squared_error(y_true, y_pred)) | |
| mae = mean_absolute_error(y_true, y_pred) | |
| r2 = r2_score(y_true, y_pred) | |
| y_true_safe = np.where(y_true == 0, np.finfo(float).eps, y_true) | |
| mape = np.mean(np.abs((y_true - y_pred) / y_true_safe)) * 100 | |
| return { | |
| 'RMSE': rmse, | |
| 'MAE': mae, | |
| 'R2': r2, | |
| 'MAPE': mape | |
| } | |
| def evaluate_multi_output(y_true, y_pred): | |
| """ | |
| Đánh giá mô hình đa đầu ra bằng cách tính trung bình các chỉ số | |
| và báo cáo chi tiết cho từng đầu ra (từng ngày dự báo). | |
| Args: | |
| y_true (pd.DataFrame or np.array): Giá trị thực tế (n_samples, n_outputs). | |
| y_pred (pd.DataFrame or np.array): Giá trị dự báo (n_samples, n_outputs). | |
| Returns: | |
| dict: Một dictionary chứa các chỉ số trung bình và chi tiết cho từng ngày. | |
| """ | |
| # Đảm bảo y_true và y_pred là numpy array để xử lý nhất quán | |
| if isinstance(y_true, pd.DataFrame): | |
| y_true = y_true.values | |
| if isinstance(y_pred, pd.DataFrame): | |
| y_pred = y_pred.values | |
| n_outputs = y_true.shape[1] | |
| results = { | |
| "average": {}, # Chỉ số trung bình | |
| "per_day": {} # Chỉ số từng ngày | |
| } | |
| # --- Phần tính toán chi tiết --- | |
| rmse_scores, mae_scores, r2_scores, mape_scores = [], [], [], [] | |
| for i in range(n_outputs): | |
| day = i + 1 | |
| true_day_i = y_true[:, i] | |
| pred_day_i = y_pred[:, i] | |
| # Tính các chỉ số | |
| rmse = np.sqrt(mean_squared_error(true_day_i, pred_day_i)) | |
| mae = mean_absolute_error(true_day_i, pred_day_i) | |
| r2 = r2_score(true_day_i, pred_day_i) | |
| #mape = mean_absolute_percentage_error(true_day_i, pred_day_i) * 100 | |
| # Lưu vào danh sách | |
| rmse_scores.append(rmse) | |
| mae_scores.append(mae) | |
| r2_scores.append(r2) | |
| #mape_scores.append(mape) | |
| # Lưu kết quả chi tiết từng ngày | |
| results["per_day"][f"RMSE_day_{day}"] = rmse | |
| results["per_day"][f"MAE_day_{day}"] = mae | |
| results["per_day"][f"R2_day_{day}"] = r2 | |
| #results["per_day"][f"MAPE_day_{day}"] = mape | |
| # --- Trung bình --- | |
| results["average"]["RMSE"] = np.mean(rmse_scores) | |
| results["average"]["MAE"] = np.mean(mae_scores) | |
| results["average"]["R2"] = np.mean(r2_scores) | |
| #results["average"]["MAPE"] = np.mean(mape_scores) | |
| return results | |