Predição de Regressão com Redes Neurais Profundas: Algoritmos Eficientes e Sistema de Métricas de Avaliação no Ambiente MATLAB

Predição de Regressão com Redes Neurais Profundas: Abordagem Prática em MATLAB

A tarefa de predição por regressão pode ser desafiadora, mas com as ferramentas adequadas, os resultados podem ser significativamente melhorados. Neste guia prático, exploraremos como utilizar a caixa de ferrramentas de deep learning do MATLAB para realizar predições de regressão, desde a importação dos dados até a avaliação do modelo. Códigos prontos estão disponíveis para cópia e adaptação com seus próprios dados.

Preparação dos Dados: Compreendendo o Formato

Considere que seus dados estão organizados em uma tabela com N linhas e M colunas, onde as primeiras M-1 colunas representam as características (features) e a última coluna contém o valor alvo (target). Por exemplo:

% Supondo que os dados estão armazenados em dados.csv  
dadosBrutos = readmatrix('dados.csv');  
X = dadosBrutos(:, 1:end-1);  % Características  
Y = dadosBrutos(:, end);      % Valor alvo  

Atenção crucial: a normalização dos dados. Redes neurais são sensíveis à escala dos dados, e sem normalização, o risco de explosão de gradientes é elevado!

[X_treino, X_teste, Y_treino, Y_teste] = dividirConjuntos(X, Y, 0.8); % Implemente sua própria função de divisão ou use cvpartition

% Normalização (recomenda-se usar parâmetros do conjunto de treino para processar o conjunto de teste)  
[~, mediaX, desvioX] = zscore(X_treino);  
X_treino = (X_treino - mediaX) ./ desvioX;  
X_teste = (X_teste - mediaX) ./ desvioX;  

mediaY = mean(Y_treino);  
desvioY = std(Y_treino);  
Y_treino = (Y_treino - mediaY) / desvioY;  

Construção do Modelo: Simplicidade é Chave

Vamos começar com uma rede neural totalmente conectada de três camadas. A função trainNetwork do MATLAB, embora menos flexível que frameworks como PyTorch, oferece conveniência e simplicidade.

camadas = [  
    camadaEntradaCaracteristicas(size(X_treino,2))  % Camada de entrada  
    camadaTotalmenteConectada(64)                  % Primeira camada com 64 neurônios  
    camadaReLU                                    % Função de ativação ReLU  
    camadaTotalmenteConectada(32)  
    camadaReLU  
    camadaTotalmenteConectada(1)                  % Camada de saída  
    camadaRegressao                               % Específica para tarefas de regressão  
];

opcoesTreino = trainingOptions('adam', ...  
    'MaxEpocas', 200, ...  
    'TamanhoLoteMinibatch', 32, ...  
    'DadosValidacao', {X_teste, Y_teste}, ...  
    'Graficos', 'progresso-treinamento');  

Pontos importantes:

  • A camadaEntradaCaracteristicas deve especificar o número de características de entrada para evitar problemas de dimensão durante a execução;
  • A última camada deve ser uma camadaRegressao para tarefas de regressão (tarefas de classificação usam softmax);
  • O otimizador Adam é mais robusto a flutuações que o SGD, sendo ideal para iniciantes.

Treinamento e Predição: Executando o Processo

rede = trainNetwork(X_treino, Y_treino, camadas, opcoesTreino);  
Y_predito = predict(rede, X_teste);  
Y_predito = Y_predito * desvioY + mediaY;  % Desnormalização  
Y_teste = Y_teste * desvioY + mediaY;  

Métricas de Avaliação: Além de R²

Aqui estão sete métricas essenciais para avaliação:

mae = mean(abs(Y_predito - Y_teste));  
mse = mean((Y_predito - Y_teste).^2);  
rmse = sqrt(mse);  
ssr = sum((Y_predito - mean(Y_teste)).^2);  
sst = sum((Y_teste - mean(Y_teste)).^2);  
r2 = ssr / sst;  
rpd = std(Y_teste) / rmse;  
mape = mean(abs((Y_teste - Y_predito) ./ Y_teste)) * 100;  

fprintf('MAE: %.3f\nMSE: %.3f\nR²: %.3f\nMAPE: %.2f%%\n', mae, mse, r2, mape);  

Dicas de prevenção de problemas:

  • O MAPE pode gerar erros quando há valores zero nos dados; nesse caso, considere o uso de sMAPE;
  • Um RPD (Desvio Preditivo Relativo) > 2 indica um modelo confiável, enquanto valores < 1.4 sugerem necessidade de revisão.

Visualização: Uma Imagem Vale Mais que Mil Paalvras

figure;  
dispersao(Y_teste, Y_predito);  
hold on;  
linhaReferencia = [min(Y_teste), max(Y_teste)];  
linhaReferencia2 = [min(Y_teste), max(Y_teste)];  
plot(linhaReferencia, linhaReferencia2, 'r--');  
xlabel('Valores Reais');  
ylabel('Valores Preditos');  
title('Dispersão: Preditos vs Reais');  

figure;  
plot(Y_teste - Y_predito, 'bo');  
linhaZero = refline(0,0);  
linhaZero.Color = 'r';  
title('Distribuição dos Resíduos');  

Considerações Finais

Após o treinamento do modelo, não feche o MATLAB sem salvar a rede e os parâmetros de normalização:

salvar('modelo_regressao.mat', 'rede', 'mediaX', 'desvioX', 'mediaY', 'desvioY');  

Para uso futuro, carregue o modelo e aplique a mesma normalização aos novos dados para realizar predições. Embora o processo possa parecer detalhado, essa é a abordagem padrão para implantações industriais.

(Códigos testados e validados no MATLAB 2021b e versões superiores. Para grandes volumes de dados, aumente o TamanhoLoteMinibatch para evitar treinamentos excessivamente longos.)

Tags: Redes Neurais MATLAB deep learning Predição de Regressão Métricas de Avaliação

Publicado em 7-7 06:53