lbl= "SelfLearning QDA:"
            model = SelfLearningModel(WQDA())
        if i == 2:
            lbl= "CPLE(pessimistic) QDA:"
            model = CPLELearningModel(WQDA(), predict_from_probabilities=True)
        elif i == 3:
            lbl= "CPLE(optimistic) QDA:"
            CPLELearningModel.pessimistic = False
            model = CPLELearningModel(WQDA(), predict_from_probabilities=True)
        model.fit(Xs, ys)
    print ""
    print lbl
    print "Model training time: ", round(time.time()-t1, 3)

    # predict, and evaluate
    pred = model.predict(Xs)
    
    acc = np.mean(pred==ytrue)
    print "accuracy:", round(acc, 3)
    
    # plot probabilities
    [minx, maxx] = [np.min(Xs[:, 0]), np.max(Xs[:, 0])]
    [miny, maxy] = [np.min(Xs[:, 1]), np.max(Xs[:, 1])]
    gridsize = 100
    xx = np.linspace(minx, maxx, gridsize)
    yy = np.linspace(miny, maxy, gridsize).T
    xx, yy = np.meshgrid(xx, yy)
    Xfull = np.c_[xx.ravel(), yy.ravel()]
    probas = model.predict_proba(Xfull)
    plt.imshow(probas[:, 1].reshape((gridsize, gridsize)), extent=(minx, maxx, miny, maxy), origin='lower')
    
            lbl = "SelfLearning QDA:"
            model = SelfLearningModel(WQDA())
        if i == 2:
            lbl = "CPLE(pessimistic) QDA:"
            model = CPLELearningModel(WQDA())
        elif i == 3:
            lbl = "CPLE(optimistic) QDA:"
            CPLELearningModel.pessimistic = False
            model = CPLELearningModel(WQDA())
        model.fit(Xs, ys)
    print ""
    print lbl
    print "Model training time: ", round(time.time() - t1, 3)

    # predict, and evaluate
    pred = model.predict(Xs)

    acc = np.mean(pred == ytrue)
    print "accuracy:", round(acc, 3)

    # plot probabilities
    [minx, maxx] = [np.min(Xs[:, 0]), np.max(Xs[:, 0])]
    [miny, maxy] = [np.min(Xs[:, 1]), np.max(Xs[:, 1])]
    gridsize = 100
    xx = np.linspace(minx, maxx, gridsize)
    yy = np.linspace(miny, maxy, gridsize).T
    xx, yy = np.meshgrid(xx, yy)
    Xfull = np.c_[xx.ravel(), yy.ravel()]
    probas = model.predict_proba(Xfull)
    plt.imshow(probas[:, 1].reshape((gridsize, gridsize)), extent=(minx, maxx, miny, maxy), origin="lower")