Todas as previsões saindo com os mesmos valores

Home Fóruns Fórum Deep Learning com Python de A a Z: O Curso Completo Todas as previsões saindo com os mesmos valores

Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #45425
    Samuel Mendes
    Participante

      Boa noite pessoal, após finalizar as aulas de classificação binária, resolvi realizar a avaliação de uma outra base de dados binária simplesmente por mera curiosidade, não obtive nenhum erro na execução dos algoritimos pois segui exatamente as instruções que o professor Jones passou, porém por mais que não haja erro nos algoritimos, estou enfrentando um grande problema com as previsões, todas estão saindo com mesmo valor, como se a rede neural não estivesse processando todos os dados ou simplesmente fazendo uma analise de um dado e ignorando todo o resto. Por gentileza, sabem me dizer o que pode estar causando isso? Acredito que seja uma dúvida pertinente pois isso pode acontecer em um cenário real dentro de uma empresa por exemplo, desde já agradeço muito pela ajuda pessoal. Abaixo deixo o código e a base de dados utilizada. Infelizmente não consegui anexar o arquivo em CSV mas no final está um print com os dados estão.

      import pandas as pd
      from sklearn.model_selection import train_test_split
      import keras
      from keras.models import Sequential
      from keras.layers import Dense
      from sklearn.metrics import confusion_matrix, accuracy_score
      base = pd.read_csv('nba_logreg.csv')
      previsores = base.iloc[:, 1:20].values
      classe = base.iloc[:, 20].values
      print(base.shape)
      previsores_treinamento, previsores_teste, classe_treinamento, classe_teste = train_test_split(previsores, classe, test_size=0.25)
      previsores_treinamento = previsores_treinamento.astype('float32')
      classe_treinamento = classe_treinamento.astype('int32')
      print(previsores_treinamento.dtype)
      print(classe_treinamento.dtype)
      classificador = Sequential()
      classificador.add(Dense(units=10, activation='relu', kernel_initializer='random_uniform', input_dim=19))
      classificador.add(Dense(units=10, activation='relu', kernel_initializer='random_uniform'))
      classificador.add(Dense(units=1, activation='sigmoid'))
      classificador.compile(optimizer='adam', loss='binary_crossentropy', metrics=['binary_accuracy'])
      classificador.fit(previsores_treinamento, classe_treinamento, batch_size=10, epochs=100)
      pesos0 = classificador.layers[0].get_weights()
      
      previsoes = classificador.predict(previsores_teste)
      
      resultado = classificador.evaluate(previsores_teste, classe_teste)
      
      

      #45429
      Denny Ceccon
      Moderador

        Samuel, é muito difícil dizer sem fazer uma inspeção detalhada do problema, mas devido ao número de alunos, não temos como inspecionar implementações pessoais.

        Entretanto, se você fez tudo certo, ainda assim é possível obter uma predição constante, se os dados que você passou não são suficientes para identificar a classe alvo. Por exemplo, suponha que você esteja usando indicadores sanguíneos para determinar a cor dos olhos das pessoas, dificilmente as variáveis preditoras têm relação com a variável alvo, portanto não existe uma relação para o algoritmo descobrir. Nestes casos, a maior acurácia que o algoritmo pode alcançar é prevendo sempre a classe majoritária nos dados de treinamento (por exemplo, se 80% das pessoas têm olho castanho, então prever sempre olho castanho vai entregar uma acurácia média de 80%).

        Outra possibilidade é relacionada ao formato dos dados. Vi que você converteu previsores_treinamento para float32, vale a pena tentar fazer o mesmo com previsores_teste.

        Uma terceira possibilidade é que o algoritmo que você escolheu (rede neural) não seja adequado para identificar as classes. Neste caso, vale a pena testar outros algoritmos. A própria rede neural pode ser alterada para tentar obter resultados melhores.

        #45441
        Samuel Mendes
        Participante

          Boa noite, Denny. Sem problemas e, aliás, muito obrigado. Eu só fiquei na dúvida porque queria entender o motivo pelo qual as previsões estavam saindo todas iguais. Formatei os previsores de treinamento em float32, como você recomendou. Porém, o máximo que consegui foi um binary_accuracy de 0.66, mas com um loss de 0.64. Adicionei dois dropouts de 0.2 também para ver se ajudava, mas ainda não funcionou como eu esperava. Enfim, creio que ao longo da trilha de Deep Learning vou aprender e desenvolver a habilidade de analisar um dataset e verificar se os dados fazem sentido, além de resolver probleminhas pontuais como esse. Muito obrigado novamente, Denny.

          #45445
          Denny Ceccon
          Moderador

            Isso mesmo, ao longo dos estudos você vai conhecendo melhor como os métodos funcionam e quais estratégias pode adotar para melhorar seus resultados. Boa sorte!

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.