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

Erro: TypeError: 'numpy.float64' object is not callable

Olá,

estou com o seguinte erro na hora de chamar minha função onde retorna as 3 métricas (Silhouette, Davies-Bouldin e Calinski-Harabasz):

                    TypeError: 'numpy.float64' object is not callable

Chamando as métricas fora da função elas funcionam perfeitamente.

Por exemplo, antes de definir a função, chamei o silhouette dessa forma:

                    from sklearn.metrics import silhouette_score
                    silhouette_score = silhouette_score(valores, labels, metric='euclidean')
                    print(silhouette_score) 

                    saída: 0.364439277430815

Definindo a função:

                    def KMeans_with_metrics(qtd_clusters, valores):
                        kmeans = KMeans(n_clusters = qtd_clusters, n_init = 10, max_iter = 300)
                        kmeans.fit_predict(valores)
                        labels = kmeans.labels_

                        s = silhouette_score(valores, labels, metric='euclidean')
                        db = davies_bouldin_score(valores, labels)
                        ch = calinski_harabasz_score(valores, labels)

                        return s, db, ch

Chamada:

                        silhouete, davies_bouldin, calinski_harabasz = KMeans_with_metrics(3, valores)

Temos o erro:

<ipython-input-103-2fd2b99512cd> in KMeans_with_metrics(qtd_clusters, valores)
        6     labels = kmeans.labels_
        7 
----> 8     s = silhouette_score(valores, labels, metric='euclidean')
        9     db = davies_bouldin_score(valores, labels)
       10    ch = calinski_harabasz_score(valores, labels)

       **TypeError: 'numpy.float64' object is not callable**

Segue o link do meu notebook no Colab: https://colab.research.google.com/drive/1agyRyb7rGv5LIvBjcxX9zD5nuQCm5nfY?usp=sharing

Exportei o .py para meu PC e rodei no terminal também, mas com o mesmo erro. Talvez seja alguma coisa boba, mas não estou conseguindo ver o que é.

Obs: O SciKit Learn está na versão 0.24.2.

Muito obrigado :)

2 respostas
solução!

Olá Nadyan, tudo bem? Espero que sim!

O problema ocorreu porque o nome da função que importou é silhouette_score() e você fez a atribuição de uma variável com o mesmo nome que a função silhouette_score = silhouette_score(valores, labels, metric='euclidean'). Quando fez isso, você sobrescreveu a função silhouette_score() pela variável de mesmo nome.

Ao tentar utilizar a função posteriormente, o python tentará usar a variável e não a função. Como a variável é um número do tipo float, o python vai acusar um erro que que um objeto do tipo float não pode ser chamado como uma função. Basta mudar o nome da variável que foi atribuída no código, importe novamente a bilbioteca e para ter certeza de que nada que estava salvo anteriormente cause problemas, reinicie o ambiente de execução antes de executar as células modificadas.

Para reiniciar o ambiente de execução no Google Colab, basta selecionar a guia Ambiente de Execução e prosseguir com a opção Reiniciar ambiente de execução.

Guia de Ambiente de execução no Google Colaboratory, com a opção em destaque de Reiniciar ambiente de execução através de uma seta vermelha na imagem

Utilize sempre nomes de variáveis diferentes de termos especiais do python e de métodos de bibliotecas para que não cause nenhum conflito no código.

Espero que tenha tirado sua dúvida.

Estou à disposição. Bons estudos!

Boa tarde, João

Era exatamente esse o problema. Nem tinha me passado pela cabeça o esquema de nomes.

Muito obrigado :)