def test_gen_binary_roc_curve(): y = [0, 1, 0, 1, 0, 1, 0, 1, 1, 0] y_prob = [0.1, 0.9, 0.8, 0.2, 0.7, 0.8, 0.3, 0.6, 0.65, 0.4] results = _gen_classifier_curve(is_binomial=True, y=y, y_probs=y_prob, labels=[0, 1], curve_type="roc") assert np.allclose( results.plot_fn_args["data_series"][0][1], np.array([0.0, 0.0, 0.2, 0.4, 0.4, 0.8, 0.8, 1.0]), rtol=1e-3, ) assert np.allclose( results.plot_fn_args["data_series"][0][2], np.array([0.0, 0.2, 0.4, 0.4, 0.8, 0.8, 1.0, 1.0]), rtol=1e-3, ) assert results.plot_fn_args["xlabel"] == "False Positive Rate" assert results.plot_fn_args["ylabel"] == "True Positive Rate" assert results.plot_fn_args["line_kwargs"] == { "drawstyle": "steps-post", "linewidth": 1 } assert np.isclose(results.auc, 0.66, rtol=1e-3)
def test_gen_multiclass_roc_curve(): y = [0, 1, 2, 1, 2] y_probs = [ [0.7, 0.1, 0.2], [0.2, 0.3, 0.5], [0.25, 0.4, 0.35], [0.3, 0.4, 0.3], [0.8, 0.1, 0.1], ] results = _gen_classifier_curve( is_binomial=False, y=y, y_probs=y_probs, labels=[0, 1, 2], curve_type="roc" ) print(results) expected_x_data_list = [ [0.0, 0.25, 0.25, 1.0], [0.0, 0.33333333, 0.33333333, 1.0], [0.0, 0.33333333, 0.33333333, 1.0, 1.0], ] expected_y_data_list = [[0.0, 0.0, 1.0, 1.0], [0.0, 0.5, 1.0, 1.0], [0.0, 0.0, 0.5, 0.5, 1.0]] line_labels = ["label=0,AUC=0.750", "label=1,AUC=0.750", "label=2,AUC=0.333"] for index, (name, x_data, y_data) in enumerate(results.plot_fn_args["data_series"]): assert name == line_labels[index] assert np.allclose(x_data, expected_x_data_list[index], rtol=1e-3) assert np.allclose(y_data, expected_y_data_list[index], rtol=1e-3) assert results.plot_fn_args["xlabel"] == "False Positive Rate" assert results.plot_fn_args["ylabel"] == "True Positive Rate" assert results.plot_fn_args["line_kwargs"] == {"drawstyle": "steps-post", "linewidth": 1} expected_auc = [0.75, 0.75, 0.3333] assert np.allclose(results.auc, expected_auc, rtol=1e-3)
def test_gen_binary_precision_recall_curve(): y = [0, 1, 0, 1, 0, 1, 0, 1, 1, 0] y_prob = [0.1, 0.9, 0.8, 0.2, 0.7, 0.8, 0.3, 0.6, 0.65, 0.4] results = _gen_classifier_curve(is_binomial=True, y=y, y_probs=y_prob, labels=[0, 1], curve_type="pr") assert np.allclose( results.plot_fn_args["data_series"][0][1], np.array([1.0, 0.8, 0.8, 0.8, 0.6, 0.4, 0.4, 0.2, 0.0]), rtol=1e-3, ) assert np.allclose( results.plot_fn_args["data_series"][0][2], np.array([ 0.55555556, 0.5, 0.57142857, 0.66666667, 0.6, 0.5, 0.66666667, 1.0, 1.0 ]), rtol=1e-3, ) assert results.plot_fn_args["xlabel"] == "recall" assert results.plot_fn_args["ylabel"] == "precision" assert results.plot_fn_args["line_kwargs"] == { "drawstyle": "steps-post", "linewidth": 1 } assert np.isclose(results.auc, 0.7088888888888889, rtol=1e-3)
def test_gen_multiclass_precision_recall_curve(): y = [0, 1, 2, 1, 2] y_probs = [ [0.7, 0.1, 0.2], [0.2, 0.3, 0.5], [0.25, 0.4, 0.35], [0.3, 0.4, 0.3], [0.8, 0.1, 0.1], ] results = _gen_classifier_curve( is_binomial=False, y=y, y_probs=y_probs, labels=[0, 1, 2], curve_type="pr" ) expected_x_data_list = [[1.0, 0.0, 0.0], [1.0, 0.5, 0.0], [1.0, 0.5, 0.5, 0.5, 0.0, 0.0]] expected_y_data_list = [ [0.5, 0.0, 1.0], [0.66666667, 0.5, 1.0], [0.4, 0.25, 0.33333333, 0.5, 0.0, 1.0], ] line_labels = ["label=0,AP=0.500", "label=1,AP=0.722", "label=2,AP=0.414"] for index, (name, x_data, y_data) in enumerate(results.plot_fn_args["data_series"]): assert name == line_labels[index] assert np.allclose(x_data, expected_x_data_list[index], rtol=1e-3) assert np.allclose(y_data, expected_y_data_list[index], rtol=1e-3) assert results.plot_fn_args["xlabel"] == "recall" assert results.plot_fn_args["ylabel"] == "precision" assert results.plot_fn_args["line_kwargs"] == {"drawstyle": "steps-post", "linewidth": 1} expected_auc = [0.25, 0.6666666666666666, 0.2875] assert np.allclose(results.auc, expected_auc, rtol=1e-3)