O código é este
from collections import Counter
import pandas as pd
df= pd.read_csv('buscas1.csv')
X_df = df[['home','busca','logado']]
Y_df = df['comprou']
Xdummies_df = pd.get_dummies(X_df)
Ydummies_df = Y_df
X= Xdummies_df.values
Y= Ydummies_df.values
porcentagem_de_treino=0.8
porcentagem_de_teste=0.1
tamanho_de_treino=porcentagem_de_treino * len(Y)
tamanho_de_teste= porcentagem_de_teste * len(Y)
tamanho_de_validacao=len(Y)-tamanho_de_treino- tamanho_de_teste
treino_dados = X[:int(tamanho_de_treino)]
treino_marcacoes= Y[:int(tamanho_de_treino)]
fim_de_treino=int(tamanho_de_treino+tamanho_de_teste)
teste_dados= X[int(tamanho_de_treino):int(fim_de_treino)]
teste_marcacoes= Y[int(tamanho_de_treino):int(fim_de_treino)]
validacao_dados=X[fim_de_treino:]
validacao_marcacoes=Y[fim_de_treino:]
def fit_and_predict(nome,modelo,treino_dados,treino_marcacoes,teste_dados,teste_marcacoes):
modelo.fit(treino_dados,treino_marcacoes)
resultado= modelo.predict(teste_dados)
acertos= (resultado==teste_marcacoes)
total_de_acertos= sum(acertos)
total_de_elementos=len(teste_dados)
taxa_de_acerto= 100.0*total_de_acertos/total_de_elementos
msg= "Taxa de acerto do {0}:{1}".format(nome,taxa_de_acerto)
print(msg)
return taxa_de_acerto
def teste_real(modelo,validacao_dados, validacao_marcacoes):
resultado= modelo.predict(validacao_dados)
acertos= resultado == validacao_marcacoes
total_de_acertos= sum(acertos)
total_de_elementos= len(validacao_marcacoes)
taxa_de_acerto = 100.0*total_de_acertos/total_de_elementos
msg= "Taxa de acerto do vencedor entre os dois algoritmos no mundo real: {0}". format(taxa_de_acerto)
print(msg)
from sklearn.naive_bayes import MultinomialNB
modelo=MultinomialNB()
resultadoMultinomial = fit_and_predict("MultinomialNB",modelo,treino_dados,treino_marcacoes,teste_dados,teste_marcacoes)
from sklearn.ensemble import AdaBoostClassifier
modelo= AdaBoostClassifier()
resultadoAdaBoost = fit_and_predict("AdaBoostClassifier",modelo,treino_dados,treino_marcacoes,teste_dados,teste_marcacoes)
if resultadoMultinomial> resultadoAdaBoost:
vencedor= resultadoMultinomial
else:
vencedor= resultadoAdaBoost
teste_real(vencedor,validacao_dados,validacao_marcacoes)
#a eficacia do algoritmo que chuta tudo um unico valor
acerto_base= max(Counter(validacao_marcacoes).itervalues())
taxa_de_acerto_base= 100.0*acerto_base/len(validacao_marcacoes)
print("Taxa de acerto base: %f "%taxa_de_acerto_base)
print("Total de testes: %d" %len(validacao_dados))
e o erro é este aqui
Taxa de acerto do MultinomialNB:82.0
Taxa de acerto do AdaBoostClassifier:84.0
Traceback (most recent call last):
File "classifica_buscas.py", line 74, in <module>
teste_real(vencedor,validacao_dados,validacao_marcacoes)
File "classifica_buscas.py", line 50, in teste_real
resultado= modelo.predict(validacao_dados)
AttributeError: 'float' object has no attribute 'predict'
P.S os int que eu tive que colocar dentro das arrays foi para tirar um outro erro que estava dando. Estava dizendo que o que estava dentro não era um número.