data_root = "data"
label_path = "labels/combined_windows.json"
param_path = "params_supervised.json"
params = load_params(param_path)
all_files = sort(collect(keys(params)))
for filename in all_files
println("\nProcessing: $filename")
file_path = joinpath(data_root, filename)
# Load data and parameters
timestamps, values, labels = load_data_with_labels(file_path, label_path)
config = params[filename]
train_ratio = config["train_ratio"]
calib_ratio = config["calib_ratio"]
window_size = Int(config["window_size"])
epochs = Int(config["epochs"])
lr = Float64(config["lr"])
dropout = Float64(config["dropout"])
conf = Float64(config["conf"])
# Split and normalize data
clean_data = split_and_normalize(values, labels, train_ratio, calib_ratio)
# Create sequences
x_train, y_train = create_sequences(clean_data.train_values, clean_data.train_labels, window_size)
x_calib, y_calib = create_sequences(clean_data.calib_values, clean_data.calib_labels, window_size)
x_test, y_test = create_sequences(clean_data.test_values, clean_data.test_labels, window_size)
# Train model
model = train_model(
x_train, y_train;
window_size=window_size,
epochs=epochs,
lr=lr,
dropout=dropout
)
# Classification
y_pred_class, test_prob, threshold = conformal_threshold(
model, x_calib, y_calib, x_test, conf)
if !isfinite(threshold)
save_metrics(filename, (;TP=0, FP=0, FN=0, precision=0.0, recall=0.0, f1=0.0, mse=0.0, mae=0.0))
continue
end
# Evaluation
y_true = Int.(vec(y_test))
y_pred = vec(y_pred_class)
metrics = compute_metrics(filename, y_true, y_pred)
# Save metrics
save_metrics(filename, metrics)
end
println("\nAll files processed successfully")