18
respostas

Não executa >>> X[:tamanho_de_treino]

ao Executar:

X[:tamanho_de_treino]

aparece o seguinte erro:

Traceback (most recent call last): File "", line 1, in TypeError: slice indices must be integers or None or have an index method

Alguem pode me ajudar?

18 respostas

Oi Gene,

Provavelmente a variável tamanho_de_treino não é um inteiro. Onde ela está sendo inicializada?

import pandas as pd
df = pd.read_csv('buscas.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

tamanho_de_treino = 0.9 * len(Y)
tamanho_de_teste = len(Y) - tamanho_de_treino

Faltou converter para int

tamanho_de_treino = int(0.9 * len(Y))

Acontece que estou acompanhando na aula_7/7, o do professor também não é um inteiro, e o dele roda..

mas quando tento execultar dar esse erro!

Valeu Gabriel, era isso mesmo. converti para int e deu certo Obrigado!

Isso provavelmente é um problema de versão. Você utiliza Python 2.7.10?

Bom dia, também cai na mesma dúvida e tinha resolvido utilizando int(). Estou usando o python 2.7. O erro não acontece em uma versão superior?

Acabei de olhar no vídeo e o instrutor está usando Python 2.7.10 e minha versão é o Python 2.7.12.

É difícil dizer com certeza se isso é a causa. Outra possibilidade é a versão do numpy. De qualquer forma, o ideal é sempre utilizar int() nesses casos.

Obrigado Gabriel!

Pessoal,

tentei rodar e apareceu esse erro:

modelo.fit(treino_dados, treino_marcacoes) TypeError: fit() missing 1 required positional argument: 'y'

Alguém consegue me ajudar?

Insira o código pra gente poder debugar

import pandas as pd df = pd.read_csv('busca.csv')

x_df = df[['home', 'busca', 'logado']] y_df = df['comprou']

x_dummies = pd.get_dummies(x_df['busca']) y_dummies = y_df

x = x_dummies.values y = y_dummies.values

porcentagem_de_treino = 0.9 tamanho_de_treino = int(porcentagem_de_treino * len(y)) tamanho_de_teste = len(y) - tamanho_de_treino

treino_dados = x[:tamanho_de_treino] treino_marcacoes = y[:tamanho_de_treino]

teste_dados = x[-tamanho_de_teste:] teste_marcacoes = y[-tamanho_de_teste:]

from sklearn.naive_bayes import MultinomialNB modelo = MultinomialNB modelo.fit(treino_dados, treino_marcacoes)

resultado = modelo.predict(teste_dados) diferencas = resultado - teste_marcacoes

acertos = [d for d in diferencas if d==0] total_de_acertos = len(acertos) total_de_elementos = len(teste_dados) taxa_de_acerto = 100.0 * total_de_acertos/ total_de_elementos

print(taxa_de_acerto) print(total_de_elementos)

comentei onde estava errado

import pandas as pd 
df = pd.read_csv('busca.csv')

x_df = df[['home', 'busca', 'logado']] 
y_df = df['comprou']

x_dummies = pd.get_dummies(x_df['busca']) 
y_dummies = y_df

x = x_dummies.values 
y = y_dummies.values

porcentagem_de_treino = 0.9 
tamanho_de_treino = int(porcentagem_de_treino * len(y)) 
tamanho_de_teste = len(y) - tamanho_de_treino

treino_dados = x[:tamanho_de_treino] 
treino_marcacoes = y[:tamanho_de_treino]

teste_dados = x[-tamanho_de_teste:] 
teste_marcacoes = y[-tamanho_de_teste:]

from sklearn.naive_bayes import MultinomialNB 
#modelo = MultinomialNB falto parenteses
modelo = MultinomialNB() 
modelo.fit(treino_dados, treino_marcacoes)

resultado = modelo.predict(teste_dados) 
print(resultado)
print(teste_marcacoes)

#reveja algum ponto, pois aqui o conteudo de resultado e teste_marcacoes agora são strings 'sim' ou 'não'
diferencas = resultado - teste_marcacoes

acertos = [d for d in diferencas if d==0] 
total_de_acertos = len(acertos) 
total_de_elementos = len(teste_dados) 
taxa_de_acerto = 100.0 * total_de_acertos/ total_de_elementos

print(taxa_de_acerto) 
print(total_de_elementos)

Carlos,

mudei algumas coisas e nada. Tentei transformar alguns resultados em int, mas sem sucesso.

Pessoal,

já tentei mudar diversas vezes essa parte:

from sklearn.naive_bayes import MultinomialNB modelo = MultinomialNB() modelo.fit(treino_dados, treino_marcacoes)

resultado = modelo.predict(teste_dados) print(resultado) print(teste_marcacoes)

diferencas = resultado - teste_marcacoes

acertos = [d for d in diferencas if d==0] total_de_acertos = len(acertos) total_de_elementos = len(teste_dados) taxa_de_acerto = 100.0 * total_de_acertos/ total_de_elementos

print(taxa_de_acerto) print(total_de_elementos)

Não consigo sair desse erro de 'sim' 'não'

Alguém pode me ajudar?

Meu código tbm estava dando o erro por não ser um inteiro. Arrumei e deu certo. A porcentagem de acerto foi pra 82%, enquanto do professor era de 53%. Isso pode ocorrer?

Alice

O meu também foi para 82% Creio que aumentou pela natureza dos dados mesmo