示例#1
0
文件: tme4_etu.py 项目: ATidiane/ARF
def learn_plot_perceptron2D(perceptron,
                            trainx,
                            trainy,
                            testx,
                            testy,
                            gradient_descent,
                            title="Batch gradient descent"):
    """FIXME! briefly describe function

    :param perceptron: Perceptron utilisé pour afficher les données
    :param trainx: Données d'apprentissage
    :param trainy: Labels des données d'apprentissage
    :param testx: Données de test
    :param testy: Labels des données de test
    :param gradient_descent: type de gradient descent utilisé
    :param title: titre du graphique
    :returns: affiche un graphique
    :rtype: void

    """

    perceptron.fit(trainx, trainy, gradient_descent=gradient_descent)
    print("Erreur : train %f, test %f\n" %
          (perceptron.score(trainx, trainy), perceptron.score(testx, testy)))
    plot_frontiere(testx, perceptron.predict, 20)
    plot_data(testx, testy, title=title)
    # plt.savefig("ktg23100h.png")
    plt.show()
示例#2
0
def main():

    
    # Création des données selon deux distributions gaussiennes
    plt.ion()
    trainx,trainy = gen_arti(nbex=1000, data_type=0, epsilon=1)
    testx,testy = gen_arti(nbex=1000, data_type=0, epsilon=1)
    # Base pour projection en distance gaussienne :
    base = trainx[np.random.randint(trainx.shape[0], size=100),:]
    
    # Tracé de l'isocontour de l'erreur pour MSE et HINGE
    plot_error(trainx,trainy,mse)
    plot_error(trainx,trainy,hinge)
    
    # Modèle standard avec MSE
    perceptron = Lineaire(mse,mse_g,max_iter=1000,eps=0.01)
    perceptron.fit(trainx,trainy)
    print("\nErreur mse : train %f, test %f"% (perceptron.score(trainx,trainy),perceptron.score(testx,testy)))
    plt.figure()
    plot_frontiere(trainx,perceptron.predict,200)
    plot_data(trainx,trainy)
    plot_trajectory(trainx,trainy,perceptron)
    plt.show()
    
    # Modèle standard Hinge
    perceptron = Lineaire(hinge,hinge_g,max_iter=1000,eps=0.1)
    perceptron.fit(trainx,trainy)
    print("\nErreur hinge : train %f, test %f"% (perceptron.score(trainx,trainy),perceptron.score(testx,testy)))
    plt.figure()
    plot_frontiere(trainx,perceptron.predict,200)
    plot_data(trainx,trainy)
    plot_trajectory(trainx,trainy,perceptron)
    plt.show()
    
    
    # Modèle MSE avec biais
    perceptron = Lineaire(mse,mse_g,max_iter=1000,eps=0.01, bias=True)
    perceptron.fit(trainx,trainy)
    print("\nErreur mse biais : train %f, test %f"\
          % (perceptron.score(trainx,trainy),perceptron.score(testx,testy)))
    plt.figure()
    plot_frontiere(trainx,perceptron.predict,200)
    plot_data(trainx,trainy)
    plot_trajectory(trainx,trainy,perceptron)
    plt.show()

    # Modèle hinge avec biais
    perceptron = Lineaire(hinge, hinge_g, max_iter=1000, eps=0.1, bias=True)
    perceptron.bias = True
    perceptron.fit(trainx,trainy)
    print("\nErreur hinge biais : train %f, test %f"\
          % (perceptron.score(trainx,trainy),perceptron.score(testx,testy)))
    plt.figure()
    plot_frontiere(trainx,perceptron.predict,200)
    plot_data(trainx,trainy)
    plot_trajectory(trainx,trainy,perceptron)
    plt.show()
    

    # Attention : l'affichage de la frontières avec projections sont très longues à générer
    """
    # Modèle hinge avec projection gaussienne
    perceptron = Lineaire(hinge, hinge_g, max_iter=1000, eps=0.5, bias=False, project="gauss")
    perceptron.base = base
    perceptron.fit(trainx,trainy)
    print("\nErreur hinge gauss : train %f, test %f"\
          %(perceptron.score(trainx,trainy),perceptron.score(testx,testy)))
    plt.figure()
    plot_frontiere(trainx,perceptron.predict,200)
    plot_data(trainx,trainy)
    plot_trajectory(trainx,trainy,perceptron)
    plt.show()

    # Modèle hinge avec projection polynomiale
    perceptron = Lineaire(hinge, hinge_g, max_iter=100, eps=0.1, bias=False, project="polynomial")
    perceptron.fit(trainx,trainy)
    print("\nErreur hinge polynomial : train %f, test %f"\
          %(perceptron.score(trainx,trainy),perceptron.score(testx,testy)))
    plt.figure()
    plot_frontiere(trainx,perceptron.predict,200)
    plot_data(trainx,trainy)
    plot_trajectory(trainx,trainy,perceptron)
    plt.show()
    """
    
    # Données USPS
    datax_train, datay_train = load_usps("USPS_test.txt")
    datax_test, datay_test = load_usps("USPS_train.txt")
    
    #6 vs 9    
    trainx = datax_train[np.where(np.logical_or(datay_train == 6,datay_train == 9))]
    trainy = datay_train[np.where(np.logical_or(datay_train == 6,datay_train == 9))]
    labely_train = np.sign(trainy - 7)
    testx = datax_test[np.where(np.logical_or(datay_test == 6,datay_test == 9))]
    testy = datay_test[np.where(np.logical_or(datay_test == 6,datay_test == 9))]
    labely_test = np.sign(testy - 7)

    perceptron = Lineaire(hinge, hinge_g, max_iter=1000, eps=0.1)
    perceptron.fit(trainx, labely_train)
    print("Erreur 2 classes 6/9: train %f, test %f"% (perceptron.score(trainx,labely_train),\
                                                      perceptron.score(testx,labely_test)))

    plot_vector(perceptron.w.reshape(16,16))
    plot_learning_curve(trainx, labely_train, testx, labely_test, start=0, stop=501, step=10)
        
    #6 vs all
    labely_train = 2 * (datay_train == 6) - 1
    labely_test = 2 * (datay_test == 6) - 1
    
    perceptron = Lineaire(hinge, hinge_g, max_iter=1000, eps=0.1)
    perceptron.fit(datax_train, labely_train)
    print("Erreur one vs all: train %f, test %f"% (perceptron.score(datax_train,labely_train),\
                                                   perceptron.score(datax_test,labely_test)))
    
    # Attention : la courbe d'apprentissage est très longue à générer
    """
    plt.ion()
    trainx, trainy = a.gen_arti(nbex=1000, data_type=0, epsilon=1)
    testx, testy = a.gen_arti(nbex=1000, data_type=0, epsilon=1)
    plt.figure()
    plot_error(trainx, trainy, mse)
    plt.figure()
    plot_error(trainx, trainy, hinge)

    #hinge (Perceptron)

    perceptron = Lineaire(hinge, hinge_g, max_iter=10, eps=0.1)
    perceptron.fit(trainx, trainy)
    print("Erreur hinge: train %f, test %f" %
          (perceptron.score(trainx, trainy), perceptron.score(testx, testy)))
    plt.figure()
    a.plot_frontiere(testx, perceptron.predict, 200)
    a.plot_data(testx, testy)

    #mse (Descente de gradient)
    """
    perceptron = Lineaire(mse,mse_g,max_iter=3,eps=0.1)
    perceptron.fit(trainx,trainy)
    print("Erreur mse: train %f, test %f"% (perceptron.score(trainx,trainy),perceptron.score(testx,testy)))
    plt.figure()
    a.plot_frontiere(trainx,perceptron.predict,200)
    a.plot_data(trainx,trainy)
    """

    #Hinge avec Biais
    """
    perceptron = Lineaire(hinge,hinge_g_bias,max_iter=1000,eps=0.1,b=True)
示例#4
0
文件: tme3_etu.py 项目: yamidevs/ML
if __name__ == "__main__":
    plt.close("all")
    """ Tracer des isocourbes de l'erreur """
    plt.ion()

    trainx, trainy = gen_arti(nbex=1000, data_type=1, epsilon=1)
    testx, testy = gen_arti(nbex=1000, data_type=1, epsilon=1)

    #Pour tester si le biais fonctionne
    #testx += 1
    #trainx += 1

    perceptron = Lineaire(hinge, hinge_g, max_iter=1000, eps=0.05, hist=True)
    perceptron.fit(trainx, trainy)

    plt.figure()
    plot_error(trainx, trainy, mse)
    plt.figure()
    plot_error(trainx, trainy, hinge)
    color = np.empty((perceptron.w_hist.shape[0], 3))
    color[:, 0] = 1
    color[:, 1] = np.linspace(0, 1, color.shape[0])
    color[:, 2] = np.linspace(0, 1, color.shape[0])
    plt.scatter(perceptron.w_hist[:, 0], perceptron.w_hist[:, 1], c=color)
    print("Erreur : train %f, test %f" %
          (perceptron.score(trainx, trainy), perceptron.score(testx, testy)))
    plt.figure()
    plot_frontiere(trainx, perceptron.predict, 200)
    plot_data(trainx, trainy)
示例#5
0
文件: tme3_usps.py 项目: yamidevs/ML
    #     plot_frontiere(trainx, lambda x: perceptron.predict(projection_polynomiale(x)), 200)
    #     plot_data(trainx,trainy)
    # =============================================================================

    #projection gaussienne

    plt.close("all")

    trainx, trainy = gen_arti(nbex=4000, data_type=2)
    testx, testy = gen_arti(nbex=4000, data_type=2)

    x1min = trainx[:, 0].min()
    x2min = trainx[:, 1].min()
    x1max = trainx[:, 0].max()
    x2max = trainx[:, 1].max()
    n1 = 40
    n2 = 40
    ntrainx = projection_gaussienne(trainx, x1min, x1max, x2min, x2max, n1, n2)
    ntestx = projection_gaussienne(testx, x1min, x1max, x2min, x2max, n1, n2)

    perceptron = Lineaire(hinge, hinge_g, max_iter=1000, eps=0.05)
    perceptron.fit(ntrainx, trainy)

    print("Erreur : train %f, test %f" %
          (perceptron.score(ntrainx, trainy), perceptron.score(ntestx, testy)))
    plt.figure()
    plot_frontiere(
        trainx, lambda x: perceptron.predict(
            projection_gaussienne(x, x1min, x1max, x2min, x2max, n1, n2)), 200)
    plot_data(trainx, trainy)
示例#6
0
def main():

    # Affichage de f et df en fonction du nombre d'itérations
    plot_nb_iter(f1, df1, 5, 0.1, 30)
    plot_nb_iter(f2, df2, 5, 0.1, 30)
    plot_nb_iter(f3, df3, np.array([-1, -1]).reshape(1, 2), 0.001, 20)

    # Affichage 2D de f1, f2 et 3D de f3
    plot_2d(f1, df1, 5, 0.1, 30)
    plot_2d(f2, df2, 5, 0.1, 30)
    plot_3d(f3, df3, np.array([-1, -1]).reshape(1, 2), 0.001, 20)

    # Affichage des distances à l'optimum de l'historique
    plot_distance(f1, df1, 5, 0.1, 30)
    plot_distance(f2, df2, 5, 0.1, 30)
    plot_distance(f3, df3, np.array([-1, -1]).reshape(1, 2), 0.001, 50)

    # Regression logistique avec données USPS
    datax_train, datay_train = load_usps("USPS_test.txt")
    datax_test, datay_test = load_usps("USPS_train.txt")

    ## On test la reconnaissance 6 vs 9 (on isole puis transforme les données en -1 et 1)
    datax_train_2 = datax_train[np.where(
        np.logical_or(datay_train == 1, datay_train == 8))]
    datay_train_2 = datay_train[np.where(
        np.logical_or(datay_train == 1, datay_train == 8))]
    labely_train = np.sign(datay_train_2 - 2)
    datax_test_2 = datax_test[np.where(
        np.logical_or(datay_test == 1, datay_test == 8))]
    datay_test_2 = datay_test[np.where(
        np.logical_or(datay_test == 1, datay_test == 8))]
    labely_test = np.sign(datay_test_2 - 2)

    model = Learner(max_iter=1000, eps=0.05)
    model.fit(datax_train_2, labely_train)
    print("Erreur de classification 6/9: train %f, test %f"\
          % (model.score(datax_train_2,labely_train),model.score(datax_test_2,labely_test)))

    ## Affichage des poids
    weights = model.w
    plot_vector(weights.reshape(16, 16))

    ## Classification 1 versus toutes les autres
    model2 = Learner(max_iter=1000, eps=0.05)
    labely_train = 2 * (datay_train == 6) - 1
    labely_test = 2 * (datay_test == 6) - 1

    model2.fit(datax_train, labely_train)
    print("Erreur one vs all: train %f, test %f"\
          % (model2.score(datax_train,labely_train),model2.score(datax_test,labely_test)))

    ## Essai sur gen_arti pour tester les performances
    trainx, trainy = gen_arti(nbex=1000, data_type=0, epsilon=1)
    testx, testy = gen_arti(nbex=1000, data_type=0, epsilon=1)
    model1 = Learner(max_iter=100, eps=0.01)
    model1.fit(trainx, trainy)
    print("Erreur de classification gen_arti: train %f, test %f"\
          % (model1.score(trainx,trainy),model1.score(testx,testy)))
    plt.figure()
    plot_frontiere(trainx, model1.predict, 200)
    plot_data(trainx, trainy)