File size: 4,445 Bytes
d2f661a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import os
import numpy as np

def anomaly_correlation_coefficient(ground_truth, predictions):
    # Tính toán mean của ground truth và predictions
    num_variables = ground_truth.shape[1]
    acc_values = []
    for i in range(num_variables):
        observed_var = ground_truth[:, i]
        predicted_var = predictions[:, i]
        mean_observed = np.mean(observed_var)
        mean_predicted = np.mean(predicted_var)
        covariance = np.mean((observed_var - mean_observed) * (predicted_var - mean_predicted))
        std_observed = np.std(observed_var)
        std_predicted = np.std(predicted_var)
        acc = covariance / (std_observed * std_predicted)
        acc_values.append(acc)
    mean_acc = np.mean(acc_values)
    return mean_acc

def root_mean_square_error(ground_truth, predictions):
    mse = np.mean((ground_truth - predictions)**2)
    rmse = np.sqrt(mse)
    return rmse

def weighted_mean_square_error(ground_truth, predictions, weights):
    mse = np.mean(weights * (ground_truth - predictions)**2)
    return mse

def root_weighted_mean_square_error(ground_truth, predictions, weights):
    wmse = weighted_mean_square_error(ground_truth, predictions, weights)
    rwmse = np.sqrt(wmse)
    return rwmse

def crps(predicted_probs, observed_value):
    # Sắp xếp các xác suất dự đoán theo thứ tự tăng dần
    predicted_probs_sorted = np.sort(predicted_probs)
    
    # Tính toán số lượng điểm xác suất
    n = len(predicted_probs)
    
    # Tính toán CRPS bằng cách sử dụng công thức CRPS diskret
    crps = 0
    for i in range(n):
        crps += (predicted_probs_sorted[i] - (i + 0.5) / n)**2
    
    crps *= 1 / n
    
    # Thêm thành phần phân phối Gaussian
    crps += np.mean((predicted_probs - observed_value)**2)
    
    return crps


# Đường dẫn đến thư mục chứa file ground truth và predictions
#folder_ground_truth = '/data/data_WF/finetune/output/exp_GT'
#folder_predictions = '/data/data_WF/finetune/output/exp_pred'
folder_ground_truth = '/data/data_WF/finetune/output/x_GT'
folder_predictions = '/data/data_WF/finetune/output/x_pred'
#folder_ground_truth = '/data/data_WF/ldcast_precipitation/train_ground_truth'
#folder_predictions = '/data/data_WF/ldcast_precipitation/train'
folder_weights = ''

# Danh sách các tên file trong thư mục ground truth và predictions
gt_files = os.listdir(folder_ground_truth)
pred_files = os.listdir(folder_predictions)
# weight_files = os.listdir(folder_weights)

# Khởi tạo một danh sách để lưu trữ các giá trị MSE
mse_list = []
acc_list = []
rmse_list = []
# wmse_list = []
# rwmse_list = []
crps_list = []

# Vòng lặp qua các file trong thư mục
for gt_file, pred_file in zip(gt_files, pred_files):
    # Đọc dữ liệu từ file ground truth và file dự đoán
    ground_truth = np.load(os.path.join(folder_ground_truth, gt_file))
    predictions = np.load(os.path.join(folder_predictions, pred_file))
    ground_truth = ground_truth * 1000
    predictions = predictions * 1000
    
    mse = np.mean((ground_truth - predictions)**2)
    acc = anomaly_correlation_coefficient(ground_truth, predictions)
    rmse = root_mean_square_error(ground_truth, predictions)
    crps_score = crps(predictions, ground_truth)
    
    # wmse = weighted_mean_square_error(ground_truth, predictions, weights)
    # rwmse = root_weighted_mean_square_error(ground_truth, predictions, weights)
    
    # Thêm MSE vào danh sách
    mse_list.append(mse)
    acc_list.append(acc)
    rmse_list.append(rmse)
    # wmse_list.append(wmse)
    # rwmse_list.append(rwmse)
    crps_list.append(crps_score)
# Tính toán trung bình của các giá trị MSE
average_mse = np.mean(mse_list)
average_acc = np.mean(acc_list)
average_rmse = np.mean(rmse_list)
# average_wmse = np.mean(wmse_list)
# average_rwmse = np.mean(rwmse_list)
average_crps = np.mean(crps_list)

print("Average Mean Square Error (MSE) across all files:", average_mse)
print("Average Anomaly Correlation Coefficient (ACC) across all files:", average_acc)
print("Average Root Mean Square Error (RMSE) across all files:", average_rmse)
# print("Average Weighted Mean Square Error (WMSE) across all files:", average_wmse)
# print("Average Root Weighted Mean Square Error (RWMSE) across all files:", average_rwmse)
print("Average Continuous Ranked Probability Score (CRPS) across all files:", average_crps)