@@ -185,6 +185,43 @@ def _binary_clf_curve(y_true, y_score, pos_label=None, sample_weight=None,
185
185
return ret .execute (session = session , ** (run_kwargs or dict ()))
186
186
187
187
188
+ def _binary_roc_auc_score (y_true , y_score , sample_weight = None ,
189
+ max_fpr = None , session = None , run_kwargs = None ):
190
+ """Binary roc auc score."""
191
+
192
+ from numpy import interp
193
+
194
+ if len (mt .unique (y_true ).execute ()) != 2 :
195
+ raise ValueError ("Only one class present in y_true. ROC AUC score "
196
+ "is not defined in that case." )
197
+
198
+ fpr , tpr , _ = roc_curve (y_true , y_score , sample_weight = sample_weight ,
199
+ session = session , run_kwargs = run_kwargs )
200
+ fpr , tpr = mt .ExecutableTuple ([fpr , tpr ]).fetch (session = session )
201
+
202
+ if max_fpr is None or max_fpr == 1 :
203
+ return auc (fpr , tpr , session = session , run_kwargs = run_kwargs ).fetch (session = session )
204
+ if max_fpr <= 0 or max_fpr > 1 :
205
+ raise ValueError (f"Expected max_fpr in range (0, 1], got: { max_fpr } " )
206
+
207
+ # Add a single point at max_fpr by linear interpolation
208
+ stop = mt .searchsorted (fpr , max_fpr , 'right' ).execute (
209
+ session = session , ** (run_kwargs or dict ())).fetch (session = session )
210
+ x_interp = [fpr [stop - 1 ], fpr [stop ]]
211
+ y_interp = [tpr [stop - 1 ], tpr [stop ]]
212
+ tpr = list (tpr [:stop ])
213
+ tpr .append (interp (max_fpr , x_interp , y_interp ))
214
+ fpr = list (fpr [:stop ])
215
+ fpr .append (max_fpr )
216
+ partial_auc = auc (fpr , tpr , session = session , run_kwargs = run_kwargs )
217
+
218
+ # McClish correction: standardize result to be 0.5 if non-discriminant
219
+ # and 1 if maximal
220
+ min_area = 0.5 * max_fpr ** 2
221
+ max_area = max_fpr
222
+ return 0.5 * (1 + (partial_auc .fetch (session = session ) - min_area ) / (max_area - min_area ))
223
+
224
+
188
225
def roc_curve (y_true , y_score , pos_label = None , sample_weight = None ,
189
226
drop_intermediate = True , session = None , run_kwargs = None ):
190
227
"""Compute Receiver operating characteristic (ROC)
0 commit comments