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()
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)) ]
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()
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()
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