Recall везде + фиксы окружения
- recall_macro/recall_weighted во всех скриптах с метриками (train_simple, train_gpu, autolog_demo, hyperparam_sweep, grid_search_cv, load_and_predict, compare_runs) - grid_search_cv: multi-metric scoring (accuracy + recall_macro) - register_model: выбор лучшей модели по recall (--metric) - MLflow warnings: name вместо artifact_path, сигнатура модели, numpy input_example для pytorch, подавление env-var INFO - start_ui.sh: порт 5555 + file-store backend (фикс: UI не показывал эксперименты, т.к. скрипты писали в mlruns/, а сервер читал sqlite) - setup_server.sh: развилка macOS/Linux + проверка MPS - train_gpu: get_device CUDA→MPS→CPU, num_workers=0 на macOS - AGENTS.md: гид для агента + саморегламент обновления - README/CODE_WALKTHROUGH: выровнена нумерация уроков 8/9 - .gitignore: +.DS_Store - удалён scripts/setup_git.sh
This commit is contained in:
+19
-5
@@ -10,11 +10,15 @@ MLflow autolog автоматически залогирует КАЖУЮ поп
|
||||
from sklearn.datasets import load_digits
|
||||
from sklearn.ensemble import RandomForestClassifier
|
||||
from sklearn.model_selection import GridSearchCV, train_test_split
|
||||
from sklearn.metrics import accuracy_score
|
||||
from sklearn.metrics import accuracy_score, recall_score
|
||||
|
||||
import mlflow
|
||||
import mlflow.sklearn
|
||||
|
||||
# Подавляем INFO MLflow о переменных окружения (напр. OPENAI_API_KEY) при логировании модели
|
||||
import os
|
||||
os.environ.setdefault("MLFLOW_RECORD_ENV_VARS_IN_MODEL_LOGGING", "false")
|
||||
|
||||
|
||||
def main():
|
||||
# autolog для sklearn — залогирует все промежуточные попытки GridSearch
|
||||
@@ -56,7 +60,8 @@ def main():
|
||||
estimator=RandomForestClassifier(random_state=42, n_jobs=-1),
|
||||
param_grid=param_grid,
|
||||
cv=5,
|
||||
scoring="accuracy",
|
||||
scoring=["accuracy", "recall_macro"], # мульти-метрика: accuracy + recall
|
||||
refit="accuracy", # лучший выбираем по accuracy
|
||||
n_jobs=-1,
|
||||
verbose=1,
|
||||
)
|
||||
@@ -66,14 +71,23 @@ def main():
|
||||
best = grid.best_estimator_
|
||||
y_pred = best.predict(X_test)
|
||||
test_acc = accuracy_score(y_test, y_pred)
|
||||
test_recall_macro = recall_score(y_test, y_pred, average="macro")
|
||||
test_recall_weighted = recall_score(y_test, y_pred, average="weighted")
|
||||
best_cv_recall = grid.cv_results_["mean_test_recall_macro"][grid.best_index_]
|
||||
|
||||
mlflow.log_param("best_params", str(grid.best_params_))
|
||||
mlflow.log_metric("best_cv_score", grid.best_score_)
|
||||
mlflow.log_metric("best_cv_score", grid.best_score_) # accuracy (refit)
|
||||
mlflow.log_metric("best_cv_recall_macro", best_cv_recall)
|
||||
mlflow.log_metric("test_accuracy", test_acc)
|
||||
mlflow.log_metric("test_recall_macro", test_recall_macro)
|
||||
mlflow.log_metric("test_recall_weighted", test_recall_weighted)
|
||||
|
||||
print(f"\n🏆 Лучшие параметры: {grid.best_params_}")
|
||||
print(f" CV score: {grid.best_score_:.4f}")
|
||||
print(f" Test accuracy: {test_acc:.4f}")
|
||||
print(f" CV accuracy: {grid.best_score_:.4f}")
|
||||
print(f" CV recall_macro: {best_cv_recall:.4f}")
|
||||
print(f" Test accuracy: {test_acc:.4f}")
|
||||
print(f" Test recall_macro: {test_recall_macro:.4f}")
|
||||
print(f" Test recall_weighted: {test_recall_weighted:.4f}")
|
||||
print(f"\n📊 В MLflow UI:")
|
||||
print(f" Эксперимент: gridsearch_digits")
|
||||
print(f" Parent run: {run.info.run_id}")
|
||||
|
||||
Reference in New Issue
Block a user