Aqui esta o meu codigo completo
import pandas as pd
import numpy as np
from sklearn.svm import LinearSVC
from sklearn.model_selection import cross_val_score
from collections import Counter
import nltk
from sklearn.multiclass import OneVsRestClassifier,OneVsOneClassifier
from sklearn.naive_bayes import MultinomialNB
from sklearn.ensemble import AdaBoostClassifier
emails = pd.read_csv("emails.csv", encoding ='utf-8')
email = emails['email']
modelos = {"MultinomialNB": MultinomialNB(),
"OneVsRestClassifier": OneVsRestClassifier(LinearSVC(random_state = 0)),
"OneVsOneClassifier": OneVsOneClassifier(LinearSVC(random_state = 0)),
"AdaBoostClassifier":AdaBoostClassifier(random_state = 0)}
texto = email.str.lower().str.split(" ")
def GetPalavra(dicta,texto):
vetores = [0] * len(dicta)
for i in texto:
if i in dicta:
vetores[dicta[i]] += 1
return vetores
def fit(modelos,treino_dados,treino_marcacoes):
resultado = {}
k = 10
for i in modelos:
print(i)
pontos = cross_val_score(modelos[i],treino_dados,treino_marcacoes, cv = k)
taxa = np.mean(pontos) * 100
resultado[taxa] = modelos[i]
return resultado
stopword = nltk.corpus.stopwords.words("portuguese")
stemmer = nltk.stem.RSLPStemmer()
palavras = set()
for i in texto:
valida = [stemmer.stem(bolo) for bolo in i if bolo not in stopword]
palavras.update(valida)
zipado = list(zip(palavras,range(0,len(palavras))))
dicta = {Palavra:Indice for Palavra,Indice in zipado}
resp = []
for i in texto:
resp.append(GetPalavra(dicta,i))
marcas = emails['classificacao']
X = np.array(resp)
Y = np.array(marcas.tolist())
LengthDetreino = int(0.8 * len(X))
LengthDeValidacao = LengthDetreino - len(X)
treino_dados = X[:LengthDetreino]
treino_marcacao = Y[:LengthDetreino]
validacaoDados = X[LengthDetreino:]
validacaoMarca = Y[LengthDetreino:]
resultados = fit(modelos,treino_dados,treino_marcacao)
print(resultados)
for i in resultados:
print("Modelo: {} Taxa: {}".format(resultados[i],i))
vencedor = resultados[max(resultados)]
print(max(resultados))
vencedor.fit(treino_dados,treino_marcacao)
resultado = vencedor.predict(validacaoDados)
acertos = resultado == validacaoMarca
total_de_acertos = sum(acertos)
total_de_elementos = len(validacaoMarca)
taxa_de_acerto = 100.0 * total_de_acertos / total_de_elementos
msg = "Taxa de acerto do vencedor com algoritmos no mundo real: {0}".format(taxa_de_acerto)
print(msg)
acerto_base = max(Counter(validacaoMarca).values())
taxa_de_acerto_base = 100.0 * acerto_base / len(validacaoMarca)
print("Taxa de acerto base: %f" % taxa_de_acerto_base)
total_de_elementos = len(validacaoDados)
print("Total de teste: %d" % total_de_elementos)