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
- Este tópico contém 3 respostas, 2 vozes e foi atualizado pela última vez 10 meses atrás por
Denny Ceccon.
- AutorPosts
- 14 de junho de 2024 às 22:48 #45425
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)
15 de junho de 2024 às 12:07 #45429Samuel, é 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 comprevisores_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.
17 de junho de 2024 às 19:52 #45441Boa 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.
18 de junho de 2024 às 07:51 #45445Isso 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!
- AutorPosts
- Você deve fazer login para responder a este tópico.