import csv from clearml import Task print("Fetching tasks from ClearML...") tasks = Task.get_tasks( project_name='FocusGuards Large Group Project', tags=['optuna_manual'], task_filter={'status': ['completed', 'failed']} ) results = [] for t in tasks: if t.get_status() != 'completed': continue params = t.get_parameters() # We reported logloss as Loss/Val, and F1 as Summary/val_f1 metrics = t.get_last_scalar_metrics() val_loss = metrics.get('Loss', {}).get('Val', {}).get('last', float('inf')) val_f1 = metrics.get('Summary', {}).get('val_f1', {}).get('last', 0.0) val_acc = metrics.get('Summary', {}).get('val_accuracy', {}).get('last', 0.0) row = { 'task_id': t.id, 'val_loss': round(val_loss, 4) if val_loss != float('inf') else val_loss, 'val_f1': round(val_f1, 4), 'val_acc': round(val_acc, 4), } # Default Optuna parameter names parsed back from ClearML storage format for k in ['n_estimators', 'max_depth', 'learning_rate', 'subsample', 'colsample_bytree', 'reg_alpha', 'reg_lambda']: val = params.get(f"General/{k}") or params.get(k) row[k] = val results.append(row) # Sort by lowest validation loss results.sort(key=lambda x: x['val_loss']) filepath = 'models/xgboost/sweep_results_all_40.csv' with open(filepath, 'w', newline='') as f: fieldnames = ['task_id', 'val_loss', 'val_f1', 'val_acc', 'n_estimators', 'max_depth', 'learning_rate', 'subsample', 'colsample_bytree', 'reg_alpha', 'reg_lambda'] writer = csv.DictWriter(f, fieldnames=fieldnames, extrasaction='ignore') writer.writeheader() writer.writerows(results) print(f"Successfully grabbed {len(results)} trials and saved to {filepath}")