Example #1
0
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)
Example #2
0
def test_naive_multiclass_ova_asgd():

    rstate = RandomState(45)

    n_classes = 10

    X, y = get_fake_multiclass_data(N_POINTS, N_FEATURES, n_classes, rstate)
    Xtst, ytst = get_fake_multiclass_data(N_POINTS, N_FEATURES, n_classes,
                                          rstate)

    clf = OVAASGD(n_classes,
                  N_FEATURES,
                  sgd_step_size0=1e-3,
                  l2_regularization=1e-6,
                  n_iterations=4,
                  dtype=np.float32,
                  rstate=rstate)

    clf.fit(X, y)

    ytrn_preds = clf.predict(X)
    ytst_preds = clf.predict(Xtst)
    ytrn_acc = (ytrn_preds == y).mean()
    ytst_acc = (ytst_preds == y).mean()

    assert_equal(ytrn_acc, 0.335)
    assert_equal(ytst_acc, 0.092)
Example #3
0
def test_naive_ova_asgd_wrong_labels():

    rstate = RandomState(42)

    n_classes = 10

    Xtrn, ytrn = get_fake_multiclass_data(N_POINTS, N_FEATURES, n_classes,
                                          rstate)

    clf = OVAASGD(*((n_classes,) + DEFAULT_ARGS),
                  rstate=RandomState(999), **DEFAULT_KWARGS)
    ytrn_bad = rstate.randint(n_classes + 42, size=len(ytrn))
    clf.partial_fit(Xtrn, ytrn_bad)
Example #4
0
def test_naive_ova_asgd_wrong_labels():

    rstate = RandomState(42)

    n_classes = 10

    Xtrn, ytrn = get_fake_multiclass_data(N_POINTS, N_FEATURES, n_classes,
                                          rstate)

    clf = OVAASGD(*((n_classes, ) + DEFAULT_ARGS),
                  rstate=RandomState(999),
                  **DEFAULT_KWARGS)
    ytrn_bad = rstate.randint(n_classes + 42, size=len(ytrn))
    clf.partial_fit(Xtrn, ytrn_bad)
Example #5
0
def test_naive_asgd_multi_labels():

    rstate = RandomState(44)

    X, y = get_fake_binary_data_multi_labels(N_POINTS, N_FEATURES, rstate)
    Xtst, ytst = get_fake_binary_data_multi_labels(N_POINTS, N_FEATURES,
                                                   rstate)

    # n_classes is 2 since it is actually a binary case
    clf = OVAASGD(2, N_FEATURES, sgd_step_size0=1e-3, l2_regularization=1e-6,
                  n_iterations=4, dtype=np.float32, rstate=rstate)
    clf.fit(X, y)
    ytrn_preds = clf.predict(X)
    ytst_preds = clf.predict(Xtst)
    ytrn_acc = (ytrn_preds == y).mean()
    ytst_acc = (ytst_preds == y).mean()
    assert_equal(ytrn_acc, 0.728)
    assert_equal(ytst_acc, 0.52)
Example #6
0
def test_naive_asgd_multi_labels():

    rstate = RandomState(44)

    X, y = get_fake_binary_data_multi_labels(N_POINTS, N_FEATURES, rstate)
    Xtst, ytst = get_fake_binary_data_multi_labels(N_POINTS, N_FEATURES,
                                                   rstate)

    # n_classes is 2 since it is actually a binary case
    clf = OVAASGD(2,
                  N_FEATURES,
                  sgd_step_size0=1e-3,
                  l2_regularization=1e-6,
                  n_iterations=4,
                  dtype=np.float32,
                  rstate=rstate)
    clf.fit(X, y)
    ytrn_preds = clf.predict(X)
    ytst_preds = clf.predict(Xtst)
    ytrn_acc = (ytrn_preds == y).mean()
    ytst_acc = (ytst_preds == y).mean()
    assert_equal(ytrn_acc, 0.728)
    assert_equal(ytst_acc, 0.52)
Example #7
0
def test_naive_multiclass_ova_asgd():

    rstate = RandomState(45)

    n_classes = 10

    X, y = get_fake_multiclass_data(N_POINTS, N_FEATURES, n_classes, rstate)
    Xtst, ytst = get_fake_multiclass_data(N_POINTS, N_FEATURES, n_classes,
                                          rstate)

    clf = OVAASGD(n_classes, N_FEATURES, sgd_step_size0=1e-3,
                  l2_regularization=1e-6, n_iterations=4, dtype=np.float32,
                  rstate=rstate)

    clf.fit(X, y)

    ytrn_preds = clf.predict(X)
    ytst_preds = clf.predict(Xtst)
    ytrn_acc = (ytrn_preds == y).mean()
    ytst_acc = (ytst_preds == y).mean()

    assert_equal(ytrn_acc, 0.335)
    assert_equal(ytst_acc, 0.092)
Example #8
0
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)