Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida no treino do classificador

Olá, tudo bem? Estou com um pouco de dúvida quanto ao treino do RandomForestClassifier. Ele foi treinado com para se ajustar os dados de treino_x e treino_y, classificador.fit(treino_x, treino_y). Após, isso foi utilizado o RFE() para encontrar as melhores features e realizada um transformação nos dados:

treino_rfe = selecionador_rfe.transform(treino_x)
teste_rfe = selecionador_rfe.transform(teste_x)

Para que por fim, fosse realizado um fit novamente no RandomForestClassifier: classificador.fit(treino_rfe, treino_y).

A minha dúvida é: o primeiro fit realizado com os dados de treino_x e treino_y pode ser ignorado, ou seja, posso partir para realizar o .fit com os dados após a transformação?

Espero que tenha possível entender minha dúvida.

1 resposta
solução!

Olá Guilherme! Tudo tranquilo?

Desculpe pela demora em dar retorno.

Sim, você pode omitir o primeiro fit sem qualquer implicação no seu resultado.

Conforme a documentação do RFE, é solicitado que o parâmetro estimator seja um estimador de aprendizado supervisionado (que é quando o conjunto de treinamento que é fornecido já inclui as soluções desejadas) que contenha o método fit capaz de fornecer informações sobre a imporância das features (características) usadas.

Mas antes, o que seria um estimador? É qualquer objeto que tenha a capacidade de estimar alguns parâmetros com base em algum conjunto de dados. A estimativa de fato é realizada pelo método fit, por isso a necessidade do estimador possuir tal método, passando os conjunto de dados treino_x e treino_y (no exemplo mostrado em aula).

Logo como o estimador usado é o RandomForestClassifier e possui o método fit, pode passa-lo diretamente para o parâmetro estimator da função RFE sem precisar executar um fit antes. Abaixo uma das formas de como ficaria o código:


from sklearn.feature_selection import RFE
from numpy import random

SEED = 1234
random.seed(SEED)

treino_x, teste_x, treino_y, teste_y = train_test_split(valores_exame_v6, diagnostico, test_size=0.3)
classificador = RandomForestClassifier(n_estimators=100, random_state=1234)

# Pegando as 5 melhores features:
selecionador_rfe = RFE(estimator = classificador, n_features_to_select=5, step=1)
selecionador_rfe.fit(treino_x, treino_y)
treino_rfe = selecionador_rfe.transform(treino_x)
teste_rfe = selecionador_rfe.transform(teste_x)
classificador.fit(treino_rfe, treino_y)

# calculando a acurácia:
print(f"{classificador.score(teste_rfe, teste_y)*100:.2f} %")

Saída

90.06 %

Caso surja alguma dúvida estou à disposição para ajudar.

:)

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