Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Na Aula 3 da introdução não consiguo rodar o código

Ao tentar rodar aparece o seguinte erro:

Traceback (most recent call last):
  File "C:\Python27\situacao_do_cliente.py", line 23, in <module>
    treino_dados = int(X[:tamanho_de_treino])
TypeError: slice indices must be integers or None or have an __index__ method

Será que alguém poderia me ajudar?

4 respostas

Oi Gene, você poderia postar seu código? :)

Estou usando o Python 2.7 - Tentei corrigir colocando int, mas ainda aparece erro.

# -*- coding: cp1252 -*-
import pandas as pd
from collections import Counter

df = pd.read_csv('situacao_do_cliente.csv')

X_df = df[['recencia','frequencia', 'semanas_de_inscricao']]
Y_df = df['situacao'] 

Xdummies_df = pd.get_dummies(X_df).astype(int)
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 = 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[int(fim_de_treino):]
validacao_marcacoes = Y[int(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 algoritmo {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
modeloMultinomial = MultinomialNB()
resultadoMultinomial = fit_and_predict("MultinomialNB", modeloMultinomial, treino_dados, treino_marcacoes, teste_dados, teste_marcacoes)

from sklearn.ensemble import AdaBoostClassifier
modeloAdaBoost = AdaBoostClassifier()
resultadoAdaBoost = fit_and_predict("AdaBoostClassifier", modeloAdaBoost, treino_dados, treino_marcacoes, teste_dados, teste_marcacoes)

if resultadoMultinomial > resultadoAdaBoost:
    vencedor = modeloMultinomial
else:
    vencedor = modeloAdaBoost

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 base: %f" % taxa_de_acerto_base)

total_de_elementos = len(validacao_dados)
print("Total de teste: %d" % total_de_elementos)

agora

Traceback (most recent call last):
  File "C:\Python27\situacao_do_cliente.py", line 64, in <module>
    from sklearn.naive_bayes import MultinomialNB
  File "C:\Python27\lib\site-packages\sklearn\__init__.py", line 57, in <module>
    from .base import clone
  File "C:\Python27\lib\site-packages\sklearn\base.py", line 10, in <module>
    from scipy import sparse
ImportError: No module named scipy
solução!

Você está utilizando o Windows né?

Baixe o Anaconda e tente rodar por lá.

https://www.continuum.io/downloads

Baixei o Anaconda. Mais ao rodar o código faltava atualizar. Abrir no promp do anaconda de dei o comando:

conda update --all

baixou todos os doc necessários. Tudo ok. Valeu Daniel.