Classificação de Séries Temporais
Prática com R Notebook
Neste hands-on, organizamos uma atividade prática no sits
de acordo com o fluxograma apresentado ao lado. Nele, mostramos como é realizada a classificação de uma série temporal. Aqui você aprenderá a:
Interface comum e funções de machine learning do sits.
treinar um modelo de machine learning.
consultar a documentação do sits.
Notebook Kaggle: https://www.kaggle.com/rolfsimoes/sits-kaggle
Machine Learning
O termo machine learning, ou em português aprendizado de máquina, se refere a técnicas que procuram estabelecer regras de relação entre elementos de dois conjuntos a partir de exemplares conhecidos. Essa regra pode ser representada por uma função \(f\) que liga o elementos do domínio \(X\) a elementos do conjunto imagem \(Y\). Quando \(Y\) é contínuo, dizemos que \(f\) realiza uma regressão. Quando \(Y\) é discreto, dizemos que \(f\) realiza uma classificação (Gareth et al., 2013).
Em nosso caso concreto, temos como conjunto \(X\) séries temporais de um determinado intervalo de tempo e atributos espectrais (i.e. bandas e/ou índices espectrais). Por exemplo, séries temporais de NDVI e EVI com 23 observações no tempo, indo de setembro de um ano até agosto do ano seguinte. Quando dizemos que queremos treinar um modelo de machine learning, o que queremos é obter uma regra útil \(f\) que associe as séries temporais de \(X\) às classes de uso e cobertura da terra, elementos do conjunto \(Y\), como ilustrado na Figura abaixo. Existem vários métodos para isso.
Interface comum e funções de machine learning do sits
Atualmente, o pacote sits
oferece suporte para 11 algoritmos de machine learning listados na tabela abaixo.
Algoritmo |
Função |
Pacote |
---|---|---|
Análise discriminante linear |
|
|
Análise discriminante quadrática |
|
|
Regressão logística multinomial |
|
|
Support vector machine (SVM) |
|
|
Random forests (RF) |
|
|
Extreme gradient boosting |
|
|
Multi-layer perceptrons (MLP) |
|
|
Redes neurais convolucionais (CNN) em 1D |
|
|
CNN em 1D e MLP |
|
|
ResNet em 1D |
|
|
Long-short term memory com uma CNN em 1D |
|
|
Esses algoritmos são implementados por outros pacotes dos quais o sits
depende para realizar as classificações. Essas funções oferecem uma documentação de seus parâmetros que pode ser acessado usando o comando ?
seguido do nome da função.
O pacote sits
fornece uma interface comum para treinar classificadores utilizando a função sits_train()
. Esta função toma dois parâmetros, as amostras de dados de entrada e o método machine learning utilizando uma das funções acima. Após o modelo ser treinado, ele pode ser utilizado para classificar séries temporais individuais ou bricks utilizando a função sits_classify()
. Nos exemplos abaixo, mostramos como aplicar o classificador para uma série temporal armazenada numa tabela de amostras.
Para os nossos exemplos, utilizaremos as 1.892 amostras do Mato Grosso. Esse conjunto contém 9 classes de uso e cobertura da terra. O primeiro exemplo usa o algoritmo RF para estimar dois classificadores: o primeiro usando as bandas e índices espectrais NDVI, EVI, NIR e MIR, disponíveis na tabela de amostra samples
; e o segundo usando apenas o NDVI, disponível em samples_ndvi
. Já o segundo exemplo usa o algorito MLP para treinar um modelo usando apenas o NDVI.
Exemplo com Random Forests
1# Treina um modelo RF com 200 árvores usando as bandas
2# 'ndvi', 'evi', 'nir' e 'mir'
3rf1 <- sits_train(samples,
4 ml_method = sits_rfor(num_trees = 200))
5
6# Treina um modelo RF com 200 árvores usando a banda 'ndvi'
7rf2 <- sits_train(samples_ndvi,
8 ml_method = sits_rfor(num_trees = 200))
Podemos agora utilizar os modelos treinados para classificar uma série temporal utilizando a função sits_classify()
. Os resultados podem ser mostrados em formato texto utilizando a função sits_show_prediction() ou graficamente utilizando a função plot(). Vamos usar a série temporal armazenada na variável ts1
para realizar esta classificação.
1# rf1: modelo RF bandas 'ndvi', 'evi', 'nir' e 'mir'
2ts_4bands <- sits_select(ts1,
3 bands = c('ndvi', 'evi', 'nir', 'mir'))
4
5# Classifica série temporal
6rf_class1 <- sits_classify(ts_4bands, ml_model = rf1)
7
8# rf2: modelo RF banda 'ndvi'
9ts_ndvi <- sits_select(ts1,
10 bands = c('ndvi'))
11
12# Classifica série temporal
13rf_class2 <- sits_classify(ts_ndvi, ml_model = rf2)
14
15# Mostra os gráficos das classificações
16plot(rf_class1)
17plot(rf_class2)
Exemplo com Deep Learning MLP
1# Treina um modelo MLP com 5 camadas escondidas, 512 unidades,
2# função de ativação 'elu', banda 'ndvi'
3dl1 <- sits_train(samples_ndvi,
4 ml_method = sits_deeplearning(epochs = 200))
5
6# dl1: modelo MLP banda 'ndvi'
7# Classifica série temporal
8dl_class1 <- sits_classify(ts_ndvi, ml_model = dl1)
9
10# Mostra os gráficos das classificações
11plot(dl_class1)
Consultando a documentação do sits
O pacote sits
tem uma ampla documentação de suas funções. Além da documentação, que pode ser acessada com o comando ?
, existem tutoriais também conhecido como vignettes, que podem ser acessados a partir do repositório e-sensing/sits-docs <https://github.com/e-sensing/sits-docs> no GitHub. Além desse material, existem demonstrações de uso do pacote que pode ser acessado pelo comando do R demo()
.
Hint
A documentação de uma função pode ser acessada usando o comando ?
antes do nome da função. Exemplos: ?sits_svm
?sits_xgboost
Referências
James, Gareth, et al. An introduction to statistical learning. Vol. 112. New York: springer, 2013.