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

Dica para quem encontrar erros com o numpy ao usar o scikit-optimize

Olá.

Tive problemas nessa aula devido a incompatibilidades entre o scikit-optimize e o numpy em versões atuais. Estou seguindo as aulas usando um virtual environment para Python no Visual Studio, então não sei se o mesmo problema acontece ao usar o Google Colab. Mesmo assim, segue minha dica, caso alguém encontre um problema semelhante.

O scikit-optimize não é atualizado há alguns anos, então versões mais novas do numpy podem trazer problemas. No caso, eu estava usando a versão 1.26.2 do numpy e, ao rodar o cross_val_score com o BayesSearchCV, recebi o seguinte erro:

AttributeError: module 'numpy' has no attribute 'int'.
`np.int` was a deprecated alias for the builtin `int`. To avoid this error in existing code, use `int` by itself. Doing this will not modify any behavior and is safe. When replacing `np.int`, you may wish to use e.g. `np.int64` or `np.int32` to specify the precision. If you wish to review your current use, check the release note link for additional information.
The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:...

A solução era fazer o downgrade do numpy para uma versão anterior à 1.20, mas aí eu ia cair em outro problema: estou usando a versão 3.10 do Python, que não suporta versões antigas do numpy. Isso ia ser uma dor de cabeça para mim, então procurei por uma solução alternativa e encontrei nas issues abertas no GitHub do scikit-optimize.

Esses problemas de incompatilibidade com o numpy são reportados por lá, e um usuário apresentou um fix para isso, que não foi aceito até hoje (acho que o grupo do scikit-optimize não está mais atualizando o projeto...). No entanto, quando modifiquei meu código com a fix do usuário, deu certo e o cross_val_score rodou!

Segue então o link do arquivo que precisa ser modificado diretamente na pasta do skopt (...\site-packages\skopt\space\transformers.py): https://github.com/scikit-optimize/scikit-optimize/pull/1187/files. É uma alteração bem simples em duas linhas de código. Depois de modificado, é só fazer um restart do kernel (ou abrir e fechar a IDE que você estiver usando).

4 respostas

Oi Matheus, tudo bem?

Muito obrigada por compartilhar sua experiência e solução para esse problema de incompatibilidade entre o scikit-optimize e o numpy. Isso pode ser realmente útil para outros estudantes que estejam enfrentando a mesma situação.

Sua solução de modificar o código de acordo com a fix proposta no GitHub do scikit-optimize é uma ótima alternativa para não ter que fazer o downgrade do numpy, especialmente considerando que você está usando uma versão mais recente do Python que não suporta versões antigas do numpy.

Parabéns por contribuir com a comunidade.

Um abraço e bons estudos.

solução!

Acabei abrindo na trilha da aula 4, o mesmo erro.

Tentei fazer este downgrade para o numpy que o professor cita na página de ambiente:

Matheus,

O que você escreveu também me interessa, que é saber sobre essa harmonização entre as bibliotecas.

Minha versão do python é a 3.9.16 .

Para conseguir rodar a aula, eu fiz um downgrade do numpy para a versão colocada na trilha da aula 1, preparando ambiente:

Primeiramente fazendo downgrade do numpy

!pip install numpy==1.23.5

Aí rodou, mas ainda sou cru de boas práticas com python.

Abraços,

Udo

Valeu Udo, você levantou um ponto que eu não percebi!

Eu havia visto essa versão 1.23.5 nas aulas, mas como o aviso de deprecate no notebook era para versões a partir do numpy 1.20, eu acabei assumindo que não funcionaria para nenhuma versão a partir da 1.20.

Pesquisando agora, vi que a np.int foi apenas descontinuada a partir da 1.20, sendo efetivamente removida a partir da 1.24. Como a minha era 1.26, eu recebi o erro, mas na sua 1.23.5 não vai dar erro (talvez algum warning) e ainda vai conseguir rodar com o Python 3.8-3.11.

Como dica, se você quiser saber em qual versão do Python uma versão da numpy roda, você pode dar uma olhada nos Release Notes que eles emitem para cada versão nova. Segue a do 1.23.5: https://numpy.org/doc/stable/release/1.23.5-notes.html

Matheus,

Valeu pela sua explicação e a dica com link!

Grato, Udo