@@ -338,20 +338,47 @@ def columnwise_score(y, yp, score_func):
338338 return score_func (y , yp )
339339
340340
341- def accuracy_score (y , yp ):
342- return columnwise_score (y , yp , lambda y1 , y2 : np .mean (y1 == y2 ))
341+ def accuracy_score (y_true , y_pred ):
342+ return columnwise_score (y_true , y_pred , lambda y1 , y2 : np .mean (y1 == y2 ))
343343
344344
345- def log_loss (y , yp ):
345+ def log_loss (y_true , y_pred ):
346346 from sklearn .metrics import log_loss as sklearn_log_loss
347- y = convert_to_numpy (y )
348- yp = convert_to_numpy (yp )
349- return sklearn_log_loss (y , yp )
347+ y_true = convert_to_numpy (y_true )
348+ y_pred = convert_to_numpy (y_pred )
349+ return sklearn_log_loss (y_true , y_pred )
350+
350351
352+ def roc_auc_score (y_true , y_pred , multi_class = 'ovr' ):
353+ from sklearn .metrics import roc_auc_score as sklearn_roc_auc
354+ y_true = convert_to_numpy (y_true )
355+ y_pred = convert_to_numpy (y_pred )
356+ if y_pred .shape [1 ] == 2 : # binary case
357+ y_pred = y_pred [:, 1 ]
358+ return sklearn_roc_auc (y_true , y_pred , multi_class = multi_class )
351359
352- def rmse_score (y , yp ):
360+
361+ def rmse_score (y_true , y_pred ):
353362 return columnwise_score (
354- y , yp , lambda y1 , y2 : float (np .sqrt (np .mean ((y1 - y2 )** 2 ))))
363+ y_true , y_pred , lambda y1 , y2 : float (np .sqrt (np .mean ((y1 - y2 )** 2 ))))
364+
365+
366+ def r2_score (y_true , y_pred ):
367+ from sklearn .metrics import r2_score as sklearn_r2_score
368+ y_true = convert_to_numpy (y_true )
369+ y_pred = convert_to_numpy (y_pred )
370+ return sklearn_r2_score (y_true , y_pred )
371+
372+
373+ def davies_bouldin_score (X , labels ):
374+ from sklearn .metrics .cluster import davies_bouldin_score as sklearn_dbs
375+ X = convert_to_numpy (X )
376+ labels = convert_to_numpy (labels )
377+ try :
378+ res = sklearn_dbs (X , labels )
379+ except ValueError as ex :
380+ res = ex
381+ return res
355382
356383
357384def convert_data (data , dtype , data_order , data_format ):
@@ -488,16 +515,21 @@ def gen_basic_dict(library, algorithm, stage, params, data, alg_instance=None,
488515
489516
490517def print_output (library , algorithm , stages , params , functions ,
491- times , accuracy_type , accuracies , data , alg_instance = None ,
518+ times , metric_type , metrics , data , alg_instance = None ,
492519 alg_params = None ):
493520 if params .output_format == 'json' :
494521 output = []
495522 for i in range (len (stages )):
496523 result = gen_basic_dict (library , algorithm , stages [i ], params ,
497524 data [i ], alg_instance , alg_params )
498525 result .update ({'time[s]' : times [i ]})
499- if accuracy_type is not None :
500- result .update ({f'{ accuracy_type } ' : accuracies [i ]})
526+ if metric_type is not None :
527+ if isinstance (metric_type , str ):
528+ result .update ({f'{ metric_type } ' : metrics [i ]})
529+ elif isinstance (metric_type , list ):
530+ for ind , val in enumerate (metric_type ):
531+ if metrics [ind ][i ] is not None :
532+ result .update ({f'{ val } ' : metrics [ind ][i ]})
501533 if hasattr (params , 'n_classes' ):
502534 result ['input_data' ].update ({'classes' : params .n_classes })
503535 if hasattr (params , 'n_clusters' ):
0 commit comments