def test_naive_multiclass_ova_vs_binary_asgd(): rstate = RandomState(42) n_classes = 3 Xtrn, ytrn = get_fake_multiclass_data(N_POINTS, N_FEATURES, n_classes, rstate) Xtst, ytst = get_fake_multiclass_data(N_POINTS, N_FEATURES, n_classes, rstate) # -- ground truth 'gt': emulate OVA with binary asgd classifiers # binary assignments ytrns = ytrn[np.newaxis, :] == np.arange(n_classes)[:, np.newaxis] # transform into -1 / +1 ytrns = 2 * ytrns - 1 # get individual predictions basgds = [ BinaryASGD(*DEFAULT_ARGS, rstate=RandomState(999), **DEFAULT_KWARGS).partial_fit(Xtrn, ysel) for ysel in ytrns ] ytsts = [basgd.decision_function(Xtst) for basgd in basgds] # convert to array of shape (n_classes, n_points) gt = np.array(ytsts).T # -- given 'gv': use the OVA class clf = OVAASGD(*((n_classes, ) + DEFAULT_ARGS), rstate=RandomState(999), **DEFAULT_KWARGS) clf.partial_fit(Xtrn, ytrn) gv = clf.decision_function(Xtst) # -- test assert_allclose(gv, gt, rtol=RTOL, atol=ATOL)
def test_naive_multiclass_ova_vs_binary_asgd(): rstate = RandomState(42) n_classes = 3 Xtrn, ytrn = get_fake_multiclass_data( N_POINTS, N_FEATURES, n_classes, rstate) Xtst, ytst = get_fake_multiclass_data( N_POINTS, N_FEATURES, n_classes, rstate) # -- ground truth 'gt': emulate OVA with binary asgd classifiers # binary assignments ytrns = ytrn[np.newaxis, :] == np.arange(n_classes)[:, np.newaxis] # transform into -1 / +1 ytrns = 2 * ytrns - 1 # get individual predictions basgds = [ BinaryASGD( *DEFAULT_ARGS, rstate=RandomState(999), **DEFAULT_KWARGS).partial_fit(Xtrn, ysel) for ysel in ytrns ] ytsts = [basgd.decision_function(Xtst) for basgd in basgds] # convert to array of shape (n_classes, n_points) gt = np.array(ytsts).T # -- given 'gv': use the OVA class clf = OVAASGD(*((n_classes,) + DEFAULT_ARGS), rstate=RandomState(999), **DEFAULT_KWARGS) clf.partial_fit(Xtrn, ytrn) gv = clf.decision_function(Xtst) # -- test assert_allclose(gv, gt, rtol=RTOL, atol=ATOL)