Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Warning quando executando código classifica_busca.py

Boa noite.

Ao executar o código da aula 03 (Vídeo 7), foi exibido o seguinte resultado:

Air-de-Duany:alura-ia duany$ python classifica_buscas.py 
classifica_buscas.py:19: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
  treino_dados = X[:tamanho_de_treino]
classifica_buscas.py:20: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
  treino_marcacoes = Y[:tamanho_de_treino]
classifica_buscas.py:22: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
  teste_dados = X[-tamanho_de_teste:]
classifica_buscas.py:23: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
  teste_marcacoes = Y[-tamanho_de_teste:]
82.0
100

Obtive 82% de acerto no conjunto de testes. Entretanto, minha dúvida refere-se ao warning exibido. Creio que seja em virtude do valor das variáveis tamanho_de_treino e tamanho_de_teste serem decimais, pois elas foram obtidas da seguinte forma:

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

Acredito que esse warning não ocorreu no vídeo da Aula em razão da versão do ambiente python que utilizo (Python versão 3.5).

Gostaria de saber como proceder para resolver isso da forma mais elegante. Posso apenas utilizar a função int() na declaração das variáveis tamanho_de_treino e tamanho_de_teste, como no exemplo abaixo?

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

Abraços.

3 respostas

Fala aí Duany, blz?

Cara parece que isso é por conta da versão do numpy que esta no seu projeto. Pelo que li esse warning foi depreciado a partir da versão 1.8 do numpy.

Espero ter ajudado!

solução

Bom dia Duany,

Como o Fernando indicou, parece que já tem uma solução, caso não seja suficiente, você pode converter números com ponto flutuante (seu tamanho_de_treino e de teste) para int de duas maneiras. Essa primeira funciona como esperado para números positivos (nosso caso), mas arrendonda para baixo em números negativos (-2.9 vira -3):

import math
valor_inteiro=math.floor(valor_com_ponto)

Ou simplesmente faz o cast, que joga fora a parte decimal:

valor_inteiro = int(valor_com_ponto)

Pode conferir?

Att

Obrigado pelas respostas, Fernando e Guilherme.

Optei pela segunda alternativa dada pelo Guilherme, por ser mais simples em resolver a situação. Ficou assim:

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

Funcionou direitinho aqui.

Abraços.