Ao rodar o classifica_emails.py, o meu resultado do OneVsOne está saindo com o mesmo resultado do OneVsRest, já revisei o código e não encontrei aonde se encontra o erro, se é que existe um. Mais alguém com este problema? Segue o código.
classifica_emails.py
#!-*- coding: utf8 -*-
def main():
import pandas as pd
import numpy as np
from libdados import vetorizar_texto
from libdados import execTestes
classificacoes = pd.read_csv('emails.csv')
textoPuro = classificacoes['email']
textoQuebrado = textoPuro.str.lower().str.split(' ')
dicionario = set()
for lista in textoQuebrado:
dicionario.update(lista)
totalPalavras = len(dicionario)
tuplas = zip(dicionario, xrange(totalPalavras))
palavrasEIndices = {palavra:indice for palavra, indice in tuplas}
vetoresDeTexto = [vetorizar_texto(texto, palavrasEIndices) for texto in textoQuebrado]
marcas = classificacoes['classificacao']
x = np.array(vetoresDeTexto)
y = np.array(marcas.tolist())
porcentagemTreino = 0.8
tamanhoTreino = int(porcentagemTreino * len(y))
tamanhoValidacao = len(y) - tamanhoTreino
print tamanhoTreino
dadosTreino = x[0:tamanhoTreino]
marcacoesTreino = y[0:tamanhoTreino]
dadosValidacao = x[tamanhoTreino:]
marcacoesValidacao = y[tamanhoTreino:]
execTestes( dadosTreino, marcacoesTreino )
main()
libdados.py
def fit_and_predict(nome, modelo, treino_dados, treino_marcacoes):
'''Realiza cross_val_score com 10-fold'''
from collections import Counter
from sklearn.cross_validation import cross_val_score
import numpy as np
k = 10
scores = cross_val_score(modelo, treino_dados, treino_marcacoes)
taxa_de_acerto = np.mean(scores)
print 'Taxa de acerto do algoritmo {0}: {1} '.format(nome, taxa_de_acerto)
return taxa_de_acerto
def execTestes(dadosTreino, marcacoesTreino):
'''
Procedure que realiza testes com OneVsRest, OneVsOne, MultinomialNB e AdaBoostClassifier,
utilizando cross_val_score (funcao fit_and_predict) com 10-fold
'''
from sklearn.multiclass import OneVsRestClassifier
from sklearn.multiclass import OneVsOneClassifier
from sklearn.naive_bayes import MultinomialNB
from sklearn.ensemble import AdaBoostClassifier
from sklearn.svm import LinearSVC
resultados = {}
modeloOVR = OneVsRestClassifier(LinearSVC(random_state=0))
resultadoOneVsRest = fit_and_predict("OneVsRest", modeloOVR, dadosTreino, marcacoesTreino)
resultados[resultadoOneVsRest] = modeloOVR
modeloOVO = OneVsOneClassifier(LinearSVC(random_state=0))
resultadoOneVsOne = fit_and_predict("OneVsOne", modeloOVO, dadosTreino, marcacoesTreino)
resultados[resultadoOneVsOne] = modeloOVO
modeloMNB = MultinomialNB()
resultadoMultinomial = fit_and_predict("MultinomialNB", modeloMNB, dadosTreino, marcacoesTreino)
resultados[resultadoMultinomial] = modeloMNB
modeloABC = AdaBoostClassifier()
resultadoABC = fit_and_predict("AdaBoostClassifier", modeloABC, dadosTreino, marcacoesTreino)
resultados[resultadoABC] = modeloABC
Os testes são feitos pela função execTestes() que está no arquivo libdados.py. A minha pergunta é se alguém consegue achar algum erro, ou se desde a gravação do curso, os dados da SpreadSheet emails.csv mudaram, de forma que ambos os resultados são iguais... Obrigado