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

TypeError: 'numpy.ndarray' object is not callable

Olá, o meu código está dando erro de objeto não chamável. Ele fala que está na linha

confusion_matrix = confusion_matrix(test_y, model.predict(test_rfe))

Alguém saberia dizer o que está errado? Revisei algumas vezes mas não consegui encontrar o erro...

from sklearn.feature_selection import RFE

SEED = 1234
random.seed(SEED)

train_x, test_x, train_y, test_y = train_test_split(x_v6, labels, test_size=0.3)

model = RandomForestClassifier(n_estimators=100, random_state=1234)
model.fit(train_x, train_y)

rfe_selector = RFE(estimator=model, n_features_to_select=10, step=1)
rfe_selector.fit(train_x, train_y)
train_rfe = rfe_selector.transform(train_x)
test_rfe = rfe_selector.transform(test_x)

model.fit(train_rfe, train_y)

confusion_matrix = confusion_matrix(test_y, model.predict(test_rfe))
plt.figure(figsize=(10, 8))
sns.set(font_scale=1.5)
sns.heatmap(confusion_matrix, annot=True, fmt="d").set(xlabel='Predicted', ylabel='Real')

print("Our model's score is now %.2f%%" % (model.score(test_rfe, test_y) * 100))

Obrigado.

6 respostas

Olá, Pedro! Tudo bem com você?

Executei seu código na minha máquina e funcionou perfeitamente, então provavelmente o erro que está acontecendo está relacionado com células anteriores do seu notebook.

Nesse outro [tópico] explico um pouco sobre esse erro, verifique se a solução apresentada lá soluciona seu problema, tudo bem?

Só uma observação, lá mostro como reiniciar e executar todo seu notebook no colab, mas caso você utilize o Jupyter Notebook você pode realizar isso da seguinte forma:

Barra superior de funções do Jupyter Notebook, com um retângulo vermelho sem preenchimento destacando a opção Kernel, uma seta vermelha apontando para a opção Restart & Run All.

Espero ter ajudado, mas se ainda persistir alguma dúvida estou sempre à disposição.

:)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!

Oi Bruno! Eu dei restart e executei todas as células, mas o problema permanece... E eu não entendi de qual tópico você está falando, era para ter um link? Obrigado!

Olá, Pedro.

Sim, era pra ter ido um link em "[tópico]", peço desculpas pelo erro. O Tópico a qual estou me referindo é relacionado a esse link, em que explico algumas situações que podem ocasionar esse erro. Verifique se o que está apresentado no tópico ocorre em alguma célula do seu notebook e caso você verifique que não está ocorrendo, peço que você nos encaminhe seu notebook para sermos mais assertivos na resposta, visto que testei somente o trecho de código enviado e funcionou normalmente. Uma ideia é upar no Google Drive e mandar o link.

Fico no aguardo.

Olá, Bruno!

Eu tentei de tudo mas não consegui arrumar o erro de jeito algum... Está difícil dar continuidade ao curso com os códigos dando erro kkkkk.

Coloquei o notebook todo num Drive, conforme você sugeriu. Você se importaria em dar uma olhadinha?

O link tá aqui -> https://colab.research.google.com/drive/1ns3jEvSJS9sqYmHSupTHVPjP4ld4L6mj?usp=sharing

Obrigado desde já!

solução!

Oi, Pedro! Tudo bem com você?

O comportamento encontrado está acontecendo porque você está sobrescrevendo a função confusion_matrix do scikit-learn, mais especificamente nesse trecho de código:

from sklearn.metrics import confusion_matrix

confusion_matrix = confusion_matrix(test_y, model.predict(test_kbest))
confusion_matrix

Saída:

array([[105,   0],
       [  7,  59]])

Esse trecho de código está imediatamente anterior ao trecho que você chama o médodo RFE.

Observe que a variável a qual você atribui o resultado está com o mesmo nome da função e com isso você está sobrescrevendo-a para um numpy.ndarray, para verificar isso basta realizar o seguinte comando:

type(confusion_matrix)

Saída:

numpy.ndarray

Como agora confusion_matrix deixou de ser uma função para ser um numpy.ndarray, você não consegue realizar a chamada conf_matrix = confusion_matrix(test_y, model.predict(test_rfe)), pois um array não aceita chamada como função.

Para consertar isso basta alterar o nome da variável que está recebendo o valor para um nome diferente da função, aqui um exemplo de como você pode realizar isso:

from sklearn.metrics import confusion_matrix

matrix_conf = confusion_matrix(test_y, model.predict(test_kbest))
matrix_conf

Para plotar a matriz de confusão:

plt.figure(figsize=(10, 8))
sns.set(font_scale=1.5)
sns.heatmap(matrix_conf, annot=True, fmt="d").set(xlabel='Predicted', ylabel='Real')

Prontinho, agora basta reiniciar o kernel e executar novamente seu código da seguinte forma:

Barra superior de opções do ambiente do Google Colab com um retângulo de contorno vermelho sem preenchimento que enfatiza a opção "Ambiente de execução" e uma seta vermelha aponta para a opção "Reiniciar e executar tudo".

Execute as mudanças em seu código e veja se realmente funciona para você. Se ainda não ficou claro algum ponto, você pode me chamar no Discord da Alura que batemos um papo sobre ou postar por aqui mesmo.

Só uma observação, notei que você sobrescreve novamente a função confusion_matrix quando você utiliza o método RFECV, na linha confusion_matrix = confusion_matrix(test_y, model.predict(test_rfecv)), lembre-se de trocar o nome da variável nesse trecho de código também.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!

Faz total sentido! Arrumei aqui e funcionou perfeitamente :)

Muito obrigado pela rápida resposta e pelo empenho em responder de forma didática!

Abraços!