def classifier(self, training_set, eval_set, categories):
     self.liste_textes = training_set + eval_set
     self.training_set = training_set
     self.eval_set = eval_set
     self.categories = categories
     vecteurs = [t.vecteur for t in self.liste_textes]
     nouveaux_vecteurs = pca(vecteurs)
     if self.pc:
         for k in range(len(self.liste_textes)):
             self.liste_textes[k].vecteur_pca = nouveaux_vecteurs[k][:max(self.nombre_composantes, len(nouveaux_vecteurs[k]))]
     else:
         for k in range(len(self.liste_textes)):
             self.liste_textes[k].vecteur_pca = vecteurs[k][:max(self.nombre_composantes, len(nouveaux_vecteurs[k]))]
     vecteurs_training = np.array([t.vecteur_pca for t in self.training_set])
     categories_training = np.array([t.categorie for t in self.training_set])
     clf = SVC(kernel = self.kernel, gamma=self.gamma, C=self.C)
     clf.fit(vecteurs_training, categories_training)
     classification = []
     for t in self.eval_set:
         categorie_reelle = t.categorie
         categorie_supposee = clf.predict([t.vecteur_pca])[0]
         classification.append((t, categorie_reelle, categorie_supposee))
     self.classification = classification
     self.clusters = self.classification_to_clusters()
     self.p, self.p_ref = self.classification_to_matrices()
def clusters_plot(clusters):
    """ Cette fonction dessine en 2D chaque cluster de la liste des clusters passée en argument"""
    plt.close()
    k = len(clusters)
    vecteurs = []
    for c in clusters:
        for t in c:
            vecteurs.append(t.vecteur)
    vecteurs = pca(vecteurs)
    x = 0
    for i in range(k):
        A = []
        B = []
        for t in clusters[i]:
            v = vecteurs[x]
            A.append(v[0])
            B.append(v[1])
            x += 1
        plt.plot(A,
                 B,
                 '.',
                 color=colors_list[i % nb_colors],
                 label='cluster {}'.format(i))
    plt.legend(loc='best')
    plt.show()
Пример #3
0
def fourier_texte(oeuvre, composante_max):
    taille_creneau = 1000

    liste_textes = []
    auteur = oeuvre.auteur
    numero = oeuvre.numero
    langue = oeuvre.langue

    L = len(oeuvre.tags)
    k = 0
    while k < min(100000, L) - taille_creneau:
        mots = oeuvre.mots[k:k + taille_creneau]
        texte_brut = " ".join(mots)
        racines = oeuvre.racines[k:k + taille_creneau]
        POS = oeuvre.POS[k:k + taille_creneau]
        T = Texte(auteur, numero, langue, k // taille_creneau, texte_brut,
                  mots, racines, POS)
        liste_textes.append(T)
        k += taille_creneau // 10
        # print(k / (L - taille_creneau))

    analyseur = Analyseur(
        [freq_gram, plus_courants, freq_ponct, freq_stopwords])

    for texte in liste_textes:
        analyseur.analyser(texte)

    vecteurs = []
    for texte in liste_textes:
        vecteurs.append(np.array(texte.vecteur))

    # Moyen-âge
    for i in range(len(vecteurs) - 5):
        vecteurs[i] = (vecteurs[i] + vecteurs[i + 1] + vecteurs[i + 2] +
                       vecteurs[i + 3] + vecteurs[i + 5]) / 5

    # vecteurs = derivee_seconde_textes
    vecteurs = pca(vecteurs)

    # xr = [v[0] for v in vecteurs]
    # yr = [v[1] for v in vecteurs]

    return [
        fourier(vecteurs[i], 0, 5000)
        for i in range(min(len(vecteurs), composante_max))
    ]
Пример #4
0
def test_afficher():
    nb_textes, nb_auteurs = p.shape
    nouveaux_vecteurs = pca(vecteurs)
    textes_justes_par_auteur = [[] for j in range(nb_auteurs)]
    textes_faux_par_auteur = [[] for j in range(nb_auteurs)]
    for i in range(nb_textes):
        for j in range(nb_auteurs):
            if p[i, j] == 1:
                j_sup = j
            if p_ref[i, j] == 1:
                j_reel = j
        if j_sup == j_reel:
            textes_justes_par_auteur[j_sup].append(nouveaux_vecteurs[i])
        else:
            textes_faux_par_auteur[j_sup].append(nouveaux_vecteurs[i])
    for j in range(nb_auteurs):
        J = textes_justes_par_auteur[j]
        F = textes_faux_par_auteur[j]
        if len(J) > 0:
            XJ = [v[0] for v in J]
            YJ = [v[1] for v in J]
            plt.plot(XJ,
                     YJ,
                     linestyle="None",
                     color=colors_list[j],
                     marker=markers_list[0])
        if len(F) > 0:
            XF = [v[0] for v in F]
            YF = [v[1] for v in F]
            plt.plot(XF,
                     YF,
                     linestyle="None",
                     color=colors_list[j],
                     marker=markers_list[1])
    plt.show()


#test_afficher()
Пример #5
0
def afficher_points(classifieur):
    p = classifieur.p
    p_ref = classifieur.p_ref
    nb_textes, nb_auteurs = p.shape
    nouveaux_vecteurs = pca([t.vecteur for t in classifieur.eval_set])
    textes_justes_par_auteur = [[] for j in range(nb_auteurs)]
    textes_faux_par_auteur = [[] for j in range(nb_auteurs)]
    for i in range(nb_textes):
        for j in range(nb_auteurs):
            if p[i, j] == 1:
                j_sup = j
            if p_ref[i, j] == 1:
                j_reel = j
        if j_sup == j_reel:
            textes_justes_par_auteur[j_sup].append(nouveaux_vecteurs[i])
        else:
            textes_faux_par_auteur[j_sup].append(nouveaux_vecteurs[i])
    for j in range(nb_auteurs):
        J = textes_justes_par_auteur[j]
        F = textes_faux_par_auteur[j]
        if len(J) > 0:
            XJ = [v[0] for v in J]
            YJ = [v[1] for v in J]
            plt.plot(XJ,
                     YJ,
                     linestyle="None",
                     color=colors_list[j],
                     marker=markers_list[1])
        if len(F) > 0:
            XF = [v[0] for v in F]
            YF = [v[1] for v in F]
            plt.plot(XF,
                     YF,
                     linestyle="None",
                     color=colors_list[j],
                     marker=markers_list[2])
    plt.show()
Пример #6
0
 def classifier(self, training_set, eval_set, categories):
     self.eval_set = eval_set
     self.training_set = training_set
     self.categories = categories
     vecteurs_training = [t.vecteur for t in training_set]
     auteurs_training = [t.categorie for t in training_set]
     t = len(vecteurs_training)
     vecteurs_eval = [t.vecteur for t in eval_set]
     auteurs_eval = [t.categorie for t in eval_set]
     vecteurs = vecteurs_training + vecteurs_eval
     vecteurs = pca(vecteurs)
     vecteurs_training = vecteurs[0:t]
     vecteurs_eval = vecteurs[t:len(vecteurs)]
     Intermediaires = Apprentissage(vecteurs_training, auteurs_training)
     Probabilite = Test(vecteurs_eval, Intermediaires[1])
     self.p = Probabilite
     self.auteurs = Intermediaires[0]
     k = np.shape(Probabilite)[1]
     m = np.shape(Probabilite)[0]
     Reference = np.zeros((m,k))
     for i in range(m):
         max = Probabilite[i][0]
         if(max == 1/k):
             indecis += 1
         categorie = 0
         for j in range(k):
             if(Probabilite[i][j]>max):
                 max = Probabilite[i][j]
                 categorie = j
         ref = Intermediaires[0].index(auteurs_eval[i])
         if(ref==categorie):
             vrai += 1
         else:
             faux += 1
         Reference[i][ref] = 1
     self.p_ref = Reference