O meu código está idêntico ao do curso, porem parece o seguinte erro:
Taxa de acerto do algoritmo MultinomialNB: 82.0
acertou 164 de 200 elementos
Taxa de acerto do algoritmo AdaBoostClassifier: 84.5
acertou 169 de 200 elementos
Traceback (most recent call last):
File "classifica_busca.py", line 79, in <module>
teste_real(vencedor, validacao_dados, validacao_marcacoes)
File "classifica_busca.py", line 54, in teste_real
resultado = modelo.predict(validacao_dados)
File "C:\Python27\lib\site-packages\sklearn\ensemble\weight_boosting.py", line 600, in predict
pred = self.decision_function(X)
File "C:\Python27\lib\site-packages\sklearn\ensemble\weight_boosting.py", line 659, in decision_function
X = self._validate_X_predict(X)
File "C:\Python27\lib\site-packages\sklearn\ensemble\weight_boosting.py", line 267, in _validate_X_predict
X = check_array(X, accept_sparse='csr', dtype=DTYPE)
File "C:\Python27\lib\site-packages\sklearn\utils\validation.py", line 416, in check_array
context))
ValueError: Found array with 0 sample(s) (shape=(0, 5)) while a minimum of 1 is required.
O meu código é:
from collections import Counter
import pandas as pd
df = pd.read_csv('busca_substituido.csv')
X_df = df[['home', 'busca', 'logado']]
Y_df = df['comprou']
Xdummies_df = pd.get_dummies(X_df).astype(int)
Ydummies_df = Y_df
X = Xdummies_df.values
Y = Ydummies_df.values
porcentagem = 0.8
porcentagem_teste = 0.1
qtd_de_treino = porcentagem * len(Y)
qtd_de_teste = porcentagem * len(Y)
qtd_de_validacao = len(Y) - qtd_de_treino - qtd_de_teste
qtd_de_treino = int(qtd_de_treino)
qtd_de_teste = int(qtd_de_teste)
qtd_de_validacao = int(qtd_de_validacao)
treino_dados = X[:qtd_de_treino]
treino_marcacoes = Y[:qtd_de_treino]
fim_teste = qtd_de_treino + qtd_de_teste
teste_dados = X[qtd_de_treino:fim_teste]
teste_marcacoes = Y[qtd_de_treino:fim_teste]
validacao_dados = X[fim_teste:]
validacao_marcacoes = Y[fim_teste:]
def fit_and_predict(modelo, treino_dados, treino_marcacoes,teste_dados, teste_marcacoes, nome):
modelo.fit(treino_dados, treino_marcacoes)
resultado = modelo.predict(teste_dados)
acertos = resultado == teste_marcacoes
total_de_elementos = len(teste_dados)
total_de_acertos = sum(acertos)
taxa_acerto = 100.0 * total_de_acertos/total_de_elementos
print("Taxa de acerto do algoritmo {0}: {1}".format(nome, taxa_acerto))
print("acertou %s de %s elementos" % (total_de_acertos, total_de_elementos))
return taxa_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
from sklearn.ensemble import AdaBoostClassifier
modelo_multinomial = MultinomialNB()
modelo_adabooster = AdaBoostClassifier()
resultado_multinomial = fit_and_predict(modelo_multinomial, treino_dados, treino_marcacoes, teste_dados, teste_marcacoes, 'MultinomialNB')
resultado_adabooster = fit_and_predict(modelo_adabooster, treino_dados, treino_marcacoes, teste_dados, teste_marcacoes, 'AdaBoostClassifier')
if resultado_multinomial > resultado_adabooster:
vencedor = modelo_multinomial
else:
vencedor = modelo_adabooster
teste_real(vencedor, validacao_dados, validacao_marcacoes)
acerto_base = max(Counter(validacao_marcacoes).itervalues())
taxa_de_acerto_base = 100.0 * acerto_base / len(validacao_marcacoes)
print("Taxa de acerto do algoritmo base: %s%%" % taxa_de_acerto_base)
Alguém sabe oque significa?