Diff of /python/basic_fusion.py [000000] .. [4d064f]

Switch to unified view

a b/python/basic_fusion.py
1
#!/usr/bin/env python
2
3
"""
4
basic_fusion.py
5
    
6
VARPA, University of Coruna
7
Mondejar Guerra, Victor M.
8
30 Oct 2017
9
"""
10
11
from train_SVM import *
12
13
# Compute the basic rule from the list of probs 
14
# selected by rule index:
15
# 0 = product
16
# 1 = sum
17
# 2 = minimum
18
# 3 = minimum
19
# 4 = majority
20
# and return the predictions
21
22
def basic_rules(probs_ensemble, rule_index):
23
24
    n_ensembles, n_instances, n_classes = probs_ensemble.shape
25
    predictions_rule = np.zeros(n_instances)
26
27
    # Product rule
28
    if rule_index == 0:
29
        probs_rule = np.ones([n_instances, n_classes])
30
31
        for p in range(n_instances):
32
            for e in range(n_ensembles):
33
                probs_rule[p] = probs_rule[p] * probs_ensemble[e,p]
34
            predictions_rule[p] = np.argmax(probs_rule[p])
35
    
36
    # Sum rule
37
    elif rule_index == 1:
38
        probs_rule = np.zeros([n_instances, n_classes])
39
40
        for p in range(n_instances):
41
            for e in range(n_ensembles):
42
                probs_rule[p] = probs_rule[p] + probs_ensemble[e,p]
43
            predictions_rule[p] = np.argmax(probs_rule[p])
44
    
45
    # Minimum rule
46
    elif rule_index == 2:
47
        probs_rule = np.ones([n_instances, n_classes])
48
49
        for p in range(n_instances):
50
            for e in range(n_ensembles):
51
                probs_rule[p] = np.minimum(probs_rule[p], probs_ensemble[e,p])
52
            predictions_rule[p] = np.argmax(probs_rule[p])
53
54
    # Maximum rule
55
    elif rule_index == 3:
56
        probs_rule = np.zeros([n_instances, n_classes])
57
58
        for p in range(n_instances):
59
            for e in range(n_ensembles):
60
                probs_rule[p] = np.maximum(probs_rule[p], probs_ensemble[e,p])
61
            predictions_rule[p] = np.argmax(probs_rule[p])
62
    
63
    # Majority rule
64
    elif rule_index == 4:
65
        rank_rule = np.zeros([n_instances, n_classes])
66
        # Just simply adds the position of the ranking 
67
        for p in range(n_instances):
68
69
            for e in range(n_ensembles):
70
                rank = np.argsort(probs_ensemble[e,p])
71
                for j in range(n_classes):
72
                    rank_rule[p,rank[j]] = rank_rule[p,rank[j]] + j
73
            predictions_rule[p] = np.argmax(rank_rule[p])
74
75
    return predictions_rule
76
77
78
def main():
79
    DS = 'DS2'
80
    print("Runing basic_fusion.py!" + DS)
81
82
    oversamp = '' #'', 'SMOTEENN/', 'SMOTE/', 'SMOTETomek/', 'ADASYN/'
83
    # Load gt labelso
84
    eval_labels = np.loadtxt('/home/mondejar/Dropbox/ECG/code/ecg_classification/python/mit_db/' + DS + '_labels.csv') 
85
86
    # Configuration
87
    results_path = '/home/mondejar/Dropbox/ECG/code/ecg_classification/python/results/ovo/MLII/'
88
89
    if DS == 'DS2':     
90
        model_RR            = results_path + oversamp + 'rm_bsln/' + 'maxRR/' + 'RR/' + 'norm_RR/'   + 'weighted/' + 'C_0.001' + '_decision_ovo.csv'
91
        model_wvl           = results_path + oversamp + 'rm_bsln/' + 'maxRR/' + 'wvlt/'              + 'weighted/' + 'C_0.001' + '_decision_ovo.csv'       
92
        model_LBP           = results_path + oversamp + 'rm_bsln/' + 'maxRR/' + 'lbp/'               + 'weighted/' + 'C_0.001' + '_decision_ovo.csv' 
93
        model_HOS           = results_path + oversamp + 'rm_bsln/' + 'maxRR/' + 'HOS/'               + 'weighted/' + 'C_0.001' + '_decision_ovo.csv'
94
        model_myDesc        = results_path + oversamp + 'rm_bsln/' + 'maxRR/' + 'myMorph/'           + 'weighted/' + 'C_0.001' + '_decision_ovo.csv'
95
96
    # Load Predictions!
97
98
    prob_ovo_RR         = np.loadtxt(model_RR)
99
    prob_ovo_wvl        = np.loadtxt(model_wvl)
100
    prob_ovo_LBP        = np.loadtxt(model_LBP)
101
    prob_ovo_HOS        = np.loadtxt(model_HOS)
102
    prob_ovo_MyDescp    = np.loadtxt(model_myDesc)
103
104
105
    prob_ovo_HBF    = np.loadtxt(model_HBF)
106
   
107
    predict, prob_ovo_RR_sig      = ovo_voting_exp(prob_ovo_RR, 4) #voting_ovo_w(prob_ovo_RR)           #voting_ovo_raw(prob_ovo_RR)
108
    predict, prob_ovo_wvl_sig     = ovo_voting_exp(prob_ovo_wvl, 4) #voting_ovo_w(prob_ovo_wvl)          #voting_ovo_raw(prob_ovo_wvl)
109
    predict, prob_ovo_LBP_sig     = ovo_voting_exp(prob_ovo_LBP, 4) #voting_ovo_w(prob_ovo_HOS_myDesc)   #voting_ovo_raw(prob_ovo_HOS_myDesc)
110
    predict, prob_ovo_HOS_sig     = ovo_voting_exp(prob_ovo_HOS, 4) #voting_ovo_w(prob_ovo_HOS_myDesc)   #voting_ovo_raw(prob_ovo_HOS_myDesc)
111
    predict, prob_ovo_MyDescp_sig = ovo_voting_exp(prob_ovo_MyDescp, 4) #voting_ovo_w(prob_ovo_HOS_myDesc)   #voting_ovo_raw(prob_ovo_HOS_myDesc)
112
113
    predict, prob_ovo_HBF_sig = ovo_voting_exp(prob_ovo_HBF, 4) 
114
115
    ##########################################################
116
    # Combine the predictions!
117
    ##########################################################
118
    # 2
119
    #probs_ensemble = np.stack((prob_ovo_RR_sig, prob_ovo_wvl_sig))
120
    #probs_ensemble = np.stack((prob_ovo_RR_sig, prob_ovo_HOS_sig))
121
    #probs_ensemble = np.stack((prob_ovo_RR_sig, prob_ovo_LBP_sig))
122
    #probs_ensemble = np.stack((prob_ovo_RR_sig, prob_ovo_MyDescp_sig))
123
124
    #probs_ensemble = np.stack((prob_ovo_wvl_sig, prob_ovo_HOS_sig))
125
    #probs_ensemble = np.stack((prob_ovo_wvl_sig, prob_ovo_LBP_sig))
126
    #probs_ensemble = np.stack((prob_ovo_wvl_sig, prob_ovo_MyDescp_sig))
127
    
128
    #probs_ensemble = np.stack((prob_ovo_HOS_sig, prob_ovo_LBP_sig))
129
    #probs_ensemble = np.stack((prob_ovo_HOS_sig, prob_ovo_MyDescp_sig))
130
131
    #probs_ensemble = np.stack((prob_ovo_LBP_sig, prob_ovo_MyDescp_sig))
132
133
    # 3
134
    #probs_ensemble = np.stack((prob_ovo_RR_sig, prob_ovo_wvl_sig, prob_ovo_HOS_sig))
135
    #probs_ensemble = np.stack((prob_ovo_RR_sig, prob_ovo_wvl_sig, prob_ovo_LBP_sig))
136
    #probs_ensemble = np.stack((prob_ovo_RR_sig, prob_ovo_wvl_sig, prob_ovo_MyDescp_sig))
137
    #probs_ensemble = np.stack((prob_ovo_RR_sig, prob_ovo_HOS_sig, prob_ovo_LBP_sig))
138
    #probs_ensemble = np.stack((prob_ovo_RR_sig, prob_ovo_HOS_sig, prob_ovo_MyDescp_sig))
139
    #probs_ensemble = np.stack((prob_ovo_RR_sig, prob_ovo_LBP_sig, prob_ovo_MyDescp_sig))
140
141
    #probs_ensemble = np.stack((prob_ovo_wvl_sig, prob_ovo_HOS_sig, prob_ovo_LBP_sig))
142
    #probs_ensemble = np.stack((prob_ovo_wvl_sig, prob_ovo_HOS_sig, prob_ovo_MyDescp_sig))
143
    #probs_ensemble = np.stack((prob_ovo_wvl_sig, prob_ovo_LBP_sig, prob_ovo_MyDescp_sig))
144
    #probs_ensemble = np.stack((prob_ovo_HOS_sig, prob_ovo_LBP_sig, prob_ovo_MyDescp_sig))
145
146
    # 4
147
    #probs_ensemble = np.stack((prob_ovo_RR_sig, prob_ovo_wvl_sig, prob_ovo_HOS_sig, prob_ovo_LBP_sig))
148
    #probs_ensemble = np.stack((prob_ovo_RR_sig, prob_ovo_wvl_sig, prob_ovo_HOS_sig, prob_ovo_MyDescp_sig))
149
    #probs_ensemble = np.stack((prob_ovo_RR_sig, prob_ovo_wvl_sig, prob_ovo_LBP_sig, prob_ovo_MyDescp_sig))
150
    #probs_ensemble = np.stack((prob_ovo_RR_sig, prob_ovo_HOS_sig, prob_ovo_LBP_sig, prob_ovo_MyDescp_sig))
151
    #probs_ensemble = np.stack((prob_ovo_wvl_sig, prob_ovo_HOS_sig, prob_ovo_LBP_sig, prob_ovo_MyDescp_sig))
152
153
    # 5
154
    probs_ensemble = np.stack((prob_ovo_RR_sig, prob_ovo_wvl_sig, prob_ovo_HOS_sig, prob_ovo_LBP_sig, prob_ovo_MyDescp_sig))
155
156
    n_ensembles, n_instances, n_classes = probs_ensemble.shape
157
    
158
    ###########################################
159
    # product rule!
160
    predictions_prob_rule = basic_rules(probs_ensemble, 0)
161
    perf_measures = compute_AAMI_performance_measures(predictions_prob_rule.astype(int), eval_labels)
162
    write_AAMI_results( perf_measures, results_path + 'fusion/prod_rule_score_Ijk_' + str(format(perf_measures.Ijk, '.2f')) + '_' + DS +  '.txt')
163
        
164
    ###########################################
165
    # Sum rule!
166
    """
167
    predictions_sum_rule = basic_rules(probs_ensemble, 1)
168
    perf_measures = compute_AAMI_performance_measures(predictions_sum_rule.astype(int), eval_labels)
169
    write_AAMI_results( perf_measures, results_path + 'fusion/sum_rule_score_Ijk_' + str(format(perf_measures.Ijk, '.2f')) + '_' + DS +  '.txt')
170
    """
171
    # min rule!
172
    """
173
    predictions_min_rule = basic_rules(probs_ensemble, 2)
174
    perf_measures = compute_AAMI_performance_measures(predictions_min_rule.astype(int), eval_labels)
175
    write_AAMI_results( perf_measures, results_path + 'fusion/min_rule_score_Ijk_' + str(format(perf_measures.Ijk, '.2f')) + '_' + DS + '.txt')
176
    """
177
    
178
    # max rule!
179
    """
180
    predictions_max_rule = basic_rules(probs_ensemble, 3)
181
    perf_measures = compute_AAMI_performance_measures(predictions_max_rule.astype(int), eval_labels)
182
    write_AAMI_results( perf_measures, results_path + 'fusion/max_rule_score_Ijk_' + str(format(perf_measures.Ijk, '.2f')) + '_' + DS + '.txt')
183
    """
184
185
    # Mayority rule / Ranking
186
    """
187
    predictions_rank_rule = basic_rules(probs_ensemble, 4)
188
    perf_measures = compute_AAMI_performance_measures(predictions_rank_rule.astype(int), eval_labels)
189
    write_AAMI_results( perf_measures, results_path + 'fusion/rank_rule_score_Ijk_' + str(format(perf_measures.Ijk, '.2f')) + '_' + DS + '.txt')
190
    """
191
192
if __name__ == '__main__':
193
194
    import sys
195
196
    main()