Pular para conteúdo

Prognose com RNA


Warning

Esta biblioteca está em desenvolvimento, nenhuma das soluções apresentadas está disponível para download.

Utilize bancos de dados de inventário florestal contínuo para prever o crescimento e a produção florestal. Utilize redes neurais artificiais para maior flexibilidade. Com este módulo, você poderá estimar volume, número de fustes, área basal, entre outras variáveis de interesse.


Parâmetros da Classe

AnnTrainer

AnnTrainer(df, y, *train_columns, iterator=None)
Parâmetros Descrição
df O dataframe contendo os dados processados do inventário florestal contínuo.
y A variável alvo para treinamento da RNA (Y), a variável na qual a RNA será treinada para prever.
*train_columns (*args) Nomes das colunas que serão usadas para treinar a rede neural artificial para que ela possa prever os valores de Y. Devem ser numéricas.
iterator (Opcional) Nome da coluna que contém o iterator. Uma rede neural artificial será ajustada para cada iterator.

Métodos da Classe

funções e parâmetros
  AnnTrainer.fit_model(save_dir=None)#(1)!

  1. save_dir = Diretório onde o arquivo .pkl da RNA será salvo.
Métodos Descrição
.fit_model() Ajusta o modelo usando *train_columns para prever a variável Y.

Estruturas da RNA

Serão testadas 6 diferentes estruturas de redes neurais artificiais. Apenas o resultado de 1 modelo será retornado. O modelo retornado será selecionado pela função de ranqueamento.
Para o modelo 'ann', o módulo sklearn.neural_network.MLPRegressor é utilizado.

--- title: Parâmetros da RNA --- classDiagram direction LR class MLPRegressor { Épocas: 3000 Ativação: logístico Modo Solver: lbfgs Tamanho do lote: dinâmico Taxa de aprendizado inicial: 0.1 Modo de taxa de aprendizado: adaptativo } class Modelo-0 { Tamanhos da camada oculta: (15, 25, 20, 30, 10) } class Modelo-1 { Tamanhos da camada oculta: (35, 10, 25, 35, 15) } class Modelo-2 { Tamanhos da camada oculta: (25, 15, 30, 20) } class Modelo-3 { Tamanhos da camada oculta: (15, 35, 45) } class Modelo-4 { Tamanhos da camada oculta: (35, 10, 25, 35, 15) } class Modelo-5 { Tamanhos da camada oculta: (35, 10, 25, 35, 15, 20, 15, 30) } MLPRegressor <|-- Modelo-0 MLPRegressor <|-- Modelo-1 MLPRegressor <|-- Modelo-2 MLPRegressor <|-- Modelo-3 MLPRegressor <|-- Modelo-4 MLPRegressor <|-- Modelo-5

AnnPredictor

AnnPredictor(pkl_file)
Parâmetros Descrição
pkl_file Diretório do arquivo .pkl que será utilizado para previsão.
Métodos da Classe

funções e parâmetros
  AnnPredictor.predict(df, *args)#(1)!

  1. Retorna a previsão de Y para as colunas *args. As colunas *args devem ser as mesmas utilizadas em *train_columns para o treinamento.

Exemplo de Uso

A grande vantagem do uso de redes neurais artificiais na estimativa de variáveis florestais está na possibilidade de incluir um grande número de variáveis na previsão. No entanto, atualmente, as redes neurais deste módulo operam preferencialmente com variáveis contínuas. Por isso, ao se desejar utilizar variáveis categóricas, recomenda-se aplicar algum tipo de transformação, como o one-hot encoding, para convertê-las em formato numérico antes de inseri-las na rede.

Como exemplo, iremos usar uma adaptação dos dados obtidos por Arce e Dobner Jr. (2024) para Eucalyptus dunnii. A base de dados é composta por 81 parcelas permanentes, com idades variando entre 3 e 9 anos, medidas de forma contínua ao longo do tempo.

Fazer download do arquivo.

Primeiras 5 linhas do arquivo:

Chave_Parcela Area_m2 Idade N_ha d médio h médio H dom G_m2_ha V_m3_ha S
14401109002_P1 300 3 933 7,47 6,8 7,4 4,2 6,0 15,4
14401109002_P1 300 4 933 10,3 10,1 10,8 8,0 24,5 15,4
14401109002_P1 300 5 933 14,0 12,8 13,7 14,9 67,1 15,4
14401109002_P1 300 6 933 14,1 14,5 15,4 15,1 77,2 15,4
14401109002_P1 300 7 867 16,6 16,1 16,5 19,4 112,8 15,4

Nesse caso, iremos utilizar as colunas "Idade", "N_ha", "d médio", "h médio", "H dom", "G_m2_ha" e "S" para prever o valor de "V_m3_ha".

exemplo_previsao_rna.py
1
2
3
4
5
from fptools.forecast import AnnTrainer, AnnPredictor#(1)!

import pandas as pd#(2)!

from sklearn.model_selection import train_test_split#(3)!

  1. Importa a classe AnnTrainer e AnnPredictor do módulo forecast.
  2. Importa pandas para manipulação de dados.
  3. Importa train_test_split para dividir dados em treino e validação.

exemplo_previsao_rna.py
path = r"Seu/diretório/para/dados_ann.xlsx"#(1)!
dados = pd.read_excel(path)#(2)!

dados_treino, dados_validacao = train_test_split(dados,
                                                test_size=0.2,
                                                random_state=42)#(3)!

train_columns = ["Idade",
                 "N_ha",
                 "d médio",
                 "h médio",
                 "H dom",
                 "G_m2_ha",
                 "S"]#(4)!

ann = AnnTrainer(dados_treino, "V_m3_ha", *train_columns)#(5)!        

metrics = ann.fit_model(r"Seu/diretorio/para/salvar")#(6)!  

  1. Define o diretório onde estão os dados em formato xlsx salvando na variável path.
  2. Carrega os dados e salva na variável dados.
  3. Salva 80% dos dados como dados de treino na variável dados_treino e 20% dos dados como validação na variável dados_validacao, mantendo uma seed de aleatoriedade igual a 42.
  4. Cria uma variável chamada train_columns contendo a lista de nomes de colunas que serão usadas para treino.
  5. Instancia a classe AnnTrainer salvando na variável ann, passando os dados de treino, a coluna V_m3_ha como variável a ser predita e a lista de colunas de trei
  6. Ajusta o modelo de rna, salvando as métricas na variável metircs e o arquivo .pkl gerado no diretorio definido.

Após isso, o modelo ajustado estara pronto para uso. Podemos testar a performance do nosso modelo utilizando ele para prever os dados de validação salvos em dados_validacao.

exemplo_previsao_rna.py
from fptools.utils import get_metrics #(1)!

predictor = AnnPredictor(
                        r"Seu/diretorio/para/salvar/V_m3_ha_ann_predictor.pkl"
                        )#(2)!

dados_validacao['V_m3_ha_predicted'] = predictor.predict(
                                                         dados_validacao,
                                                        *train_columns
                                                        )#(3)!

mae, mape, mse, rmse, r_squared, exp_var, m_error = get_metrics(
                                                                dados_validacao['V_m3_ha'],
                                                                dados_validacao['V_m3_ha_predicted']
                                                                )#(4)!
metrics_val = pd.DataFrame({
    'MAE': [mae],
    'MAPE': [mape],
    'MSE': [mse],
    'RMSE': [rmse],
    'R squared': [r_squared],
    'Explained Var': [exp_var],
    'Mean Error': [m_error]
})#(5)!

  1. Importa a função get_metrics do módulo utils para posterior cálculo de métricas.
  2. Instancia a classe AnnPredictor, salvando na variável predictor e passando o arquivo .pkl gerado no ajuste da rna.
  3. Cria a coluna V_m3_ha_predicted no DataFrame dados_validacao, contendo a predição feita pela ann treinada para as colunas usadas no treinamento do dataframe dados_validacao.
  4. Usa a função get_metrics para obter as métricas entre os valores reais V_m3_ha e os valores preditos V_m3_ha_predicted do DataFrame dados_validacao. As métricas retornadas são: MAE (Mean Absolute Error), MAPE (Mean Absolute Percentage Error), MSE (Mean Squared Error), RMSE (Root Mean Squared Error), R² (Coeficiente de Determinação), EXP_VAR (Explained Variance Score) e ME (Mean Error).
  5. Cria um DataFrame com as métricas de validação.

Saídas

Tabelas

metrics(1)

  1. Tabela com as métricas de performance da RNA no treinamento.
Iterator Model MSE RMSE MAE MAPE Explained Variance Max Error
Not used V_m3_ha_ann_predictor 32,29 5,68 3,05 4,23 0,99 0,99 0,14

metrics_val(1)

  1. Tabela com as métricas de performance da RNA na validação.
MAE MAPE MSE RMSE Explained Variance Mean Error
2,99 3,28 26,13 5,11 0,99 0,99 0,12
Arquivos

V_m3_ha_ann_predictor.pkl(1)

  1. Arquivo .pkl contendo os parâmetros da RNA treinada.

Fazer download do arquivo.

Referências

ARCE, JULIO EDUARDO; DOBNER JR., MARIO. (2024). Manejo e planejamento de florestas plantadas: com ênfase nos gêneros Pinus e Eucalyptus. Curitiba, PR: Ed. dos Autores, 419p.