XV Semana de Estatística - UFES, Vitória/ES
7 a 8 de novembro de 2024
DE/UFPB – PPGMDS/UFPB
Possui conhecimento básico sobre a linguagem R
.
Tem alguma familiaridade com o dialeto tidyverse
e com o uso de pipe (%>%
ou |>
).
Compreende conceitos básicos de estatística.
Não necessariamente é um especialista (ou mesmo um intermediário) em modelagem estatística ou aprendizagem de máquina.
Dia 1:
Dia 2:
tidymodels
rsample
;parsnip
;recipes
;yardstick
;tune
;workflowsets
.Aprendizagem de Máquina (AM) ou Machine Learning (ML) é uma subárea da Inteligência Artificial que estuda modelos e algoritmos de aprendizado a partir de dados.
Os modelos ou algoritmos são determinados pelo tipo de dado que se tem disponível e pelo tipo de tarefa a ser executada.
Esses modelos são automatizados de modo a melhorarem o processo de aprendizagem com base em suas experiências, sem a necessidade de serem reprogramados (ou seja, sem qualquer assistência humana).
O produto dos modelos ou algoritmos são coeficientes, pesos ou regras e o processo de aprendizagem se dá pela atualização dessas características a partir de novas experiências (novos dados).
Originalmente, os métodos de AM eram de cunho estritamente computacional. Mas, a partir do final dos anos 90, passaram a ter muitas inserseções com a estatística.
Ganhar conhecimento através do estudo, experiência ou sendo ensinado;
Aprendizagem X Aprendizado
Em Aprendizagem de Máquina, focamos no estudo de algoritmos para adquirir descrições estruturais (modelos) sobre exemplos de dados;
Os algoritmos da Aprendizagem de Máquina permitem que escrevamos programas cujo desempenho tende a melhorar à medida que “ganham experiência”;
Essa experiência corresponde aos dados que são fornecidos ao programa;
Os algoritmos buscam extrair hipóteses dos dados.
Vamos assumir que a estimação será feita com base em \(S\), uma amostra i.i.d. da distribuição conjunta de \((\mathbf{X},Y)\);
\(S\) é comumente chamada de amostra de treinamento.
\[ y_i=\beta_0+\beta_1x_{1i}+\cdots+\beta_px_{pi}+\varepsilon_i, \]
\[ \varepsilon_i\sim N(0,\sigma^2),\quad i=1,\ldots,n. \]
\[ y_i=f(\mathbf{x}_i) + \varepsilon_i,\quad i=1,\ldots,n. \]
Este conjunto aparentemente tem \(p=10\) variáveis;
No entanto, a primeira e a segunda são apenas identificadores de paciente;
E a última, que indica o diagnóstico, possivelmente será selecionada como alvo em uma tarefa de classificação, sendo tratada como uma variável separada, digamos, \(Y\);
Portanto, \(p=7\).
Dados não-estruturados representam múltiplos tipos de dados que não podem ser facilmente analisados ou categorizados;
Usulalmente são armazenados em formatos nativos;
Não podem ser organizados em linhas e colunas;
Imagens, áudio, video, arquivos de texto, postagens em redes sociais, mensagens em aplicativos de comunicação, etc.;
Requerem, em geral, mais espaço de armazenamento;
Estimado em torno de 80% dos dados das empresas.
O objetivo é melhorar a qualidade dos dados, i.e., tornar mais fácil o ajuste de modelos;
Minimizam problemas de ruídos, anomalias/outliers, valores/rótulos incorretos, duplicados ou ausentes;
Também podem adequar os dados para uso de determinados algoritmos, e.g. algoritmos com entradas exclusivamente numéricas.
Essa atividade trata da junção de duas ou mais bases de dados que possuem informações sobre as mesmas observações;
Devemos buscar atributos comuns nos conjuntos que serão combinados;
Atributos cruzados devem ter um valor único para cada observação.
Alguns algoritmos de aprendizagem de máquina podem ter dificuldade de lidar com grandes volumes de dados;
Assim, torna-se útil obter uma amostra representativa dos dados para treinar o modelo;
Diferentes amostras podem gerar modelos diferentes.
Em certas aplicações (como na medicina), é comum que uma classe seja muito mais frequente do que outra;
Nesses casos, o modelo de AM pode aprender a “chutar” sempre a classe mais frequente;
Soluções:
Remove problemas relacionados à qualidade dos dados;
Dados ruidosos: erros de registro, variações de qualidade de sinal.
Inconsistentes: contradizem valores de outros atributos do mesmo objeto;
Redundantes: dois ou mais objetos/atributos com os mesmos valores;
Incompletos (com ausência de valores).
O mesmo atributo pode aparecer em dois formatos diferentes. Exemplo: idade X data de nascimento;
Atributos podem ser altamente correlacionados
Dados que diferem bastante dos outros elementos do conjunto de dados ou de sua classe;
Podem ser retirados ou mantidos, caso deseje-se gerar modelos que modelam a sua existência;
Existem técnicas cujo objetivo é detectar outliers.
Frequentemente é necessário transformar os tipos ou valores dos atributos. Pode-se, por exemplo, discretizar valores numéricos ou transformá-los em intervalos;
Pode-se transformar atributos qualitativos com \(k\) categorias em \(k\) ou \(k-1\) atributos binários: One-hot-encoding e Variáveis dummy.
Quando os atributos têm escalas muito diferentes, fazemos normalização:
\[ X_{novo} = \frac{X - X_{min}}{X_{max} - X_{min}}, \]
Em que \(X_{min}\) é o valor mínimo e \(X_{max}\) é o valor máximo. Novos valores no intervalo \([0, 1]\).
\[ Z = \frac{X - \hat{\mu}}{\hat{\sigma}}, \]
Onde \(\hat{\mu}\) é a média amostral e \(\hat{\sigma}\) é o desvio-padrão amostral. Essa transformação lida melhor com outliers.
Para o contexto de aprendizado supervisionado, seja \(\mathbf{X}\) um vetor de variáveis de entrada, sendo suas componentes denotadas por \(X_{j}\), com \(j=1,\ldots,p\). Enquanto a variável de saída será denotada por \({Y}\);
Tipicamente \(\mathbf{X} \in \mathbb{R}^p = \mathcal{X}\) e \(Y \in C = \mathcal{Y} \subseteq \mathbb{R}\), onde \(C=\{1,2,\ldots,K\}\) é o conjunto dos índices das classes;
Nosso interesse está na relação \[ f: \mathcal{X} \rightarrow \mathcal{Y} \] \[ \mathbf{x} \rightarrow f(\mathbf{x}); \]
Seja \(S = \left\lbrace \left( \mathbf{x}_{1},y_{1}\right) \ldots \left( \mathbf{x}_{n},y_{n}\right) \right\rbrace\) contido em \(\mathcal{X} \times \mathcal{Y}\);
Desejamos encontrar a função \(\hat{f}: \mathcal{X} \rightarrow \mathcal{Y}\) usando \(S\) tal que \[ \hat{f}(\mathbf{x}) \approx f(\mathbf{x}),\quad\forall\mathbf{x} \in \mathcal{X}. \]
Mas, como avaliamos o quão bem estamos estimando \(f\)?
Para a tarefa de refressão, a medida mais comumente utilizada é o erro quadrático médio (MSE), dado por: \[ MSE=\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{f}(\mathbf{x}_i))^2; \]
Um valor pequeno para o MSE indica que as respostas previstas estão próximas das respostas verdadeiras;
Outras medidas que são utilizadas em tarefas de regressão são: o erro absoluto médio (MAE), o erro percentual absoluto médio (MAPE) e o coeficiente de determinação (\(R^2\)).
Para a tarefa de classificação, a medida mais comumente utilizada é a taxa de erro de classificação ou, com interpretação em sentido oposto, a acurácia;
A construção da por matriz de confusão, que é uma tabela de contingência entre as classes preditas e as classes verdadeiras (conhecidas) também é comum;
Outras medidas tipicamente utilizadas são:
\[\begin{align*} Acc&=\frac{TP+TN}{TP+FP+TN+FN}\\ &=\frac{10+1000}{10+20+1000+40}\\ &=\frac{1010}{1070}\\ &=0{,}94. \end{align*}\]
Neste exemplo, temos alta acurácia: só erramos 60 observações, dentre 1070.
\[\begin{align*} Prec&=\frac{TP}{TP+FP}\\ &=\frac{10}{10+20}=0{,}33\\ Rec&=\frac{TP}{TP+FN}\\ &=\frac{10}{10+40}=0{,}20. \end{align*}\]
Apesar da alta acurácia, o classificador tem péssimo desempenho para a classe positiva.
\[\begin{align*} Acc&=\frac{TP+TN}{TP+FP+TN+FN}\\ &=\frac{1020}{1070}\\ &=0{,}95. \end{align*}\]
Na verdade, um classificador que apenas “chute” que todas as observações são da classe negativa tem maior acurácia.
Portanto, é importante não “confiar cegamente” no resultado de acurácia de seu classificador, principalmente se a proporção de observações de uma classe for muito maior do que a proporção de observações da outra;
Uma boa regra é ter em mente as proporções das classes no conjunto de dados: você deve esperar que seu classificador tenha acurácia pelo menos maior do que a proporção da maior classe.
Essas condições de ajuste podem ser detectadas se compararmos as acurácias ou matrizes de confusão de treinamento e de teste;
Underfitting mostrará desempenhos de treinamento e teste parecidos e ruins;
Overfitting aparecerá como um desempenho de treinamento muito bom (às vezes perfeito) acompanhado de desempenho de teste péssimo;
Ajuste apropriado aparece como desempenhos de treinamento e teste parecidos e razoáveis/bons.
Idealmente, queremos que a forma da curva se aproxime ao máximo da forma de um triângulo, ou seja, queremos que a curva se aproxime ao máximo do canto superior esquerdo ou ponto \([0,1]\);
A área embaixo da curva ROC (AUC ou AUROC) indica o quão bom é o desempenho de um classificador independentemente do limiar;
Um classificador aleatório tem AUC\(=0{,}5\).
Precisamos lembrar que os conjuntos de dados que utilizamos para treinar e testar modelos são, em geral, amostras, e não a população inteira;
Além disso, raramente podemos garantir que as amostras foram obtidas seguindo processos estatisticamente corretos;
Para tomarmos decisões com significância estatística, precisamos usar nossas amostras de forma que possamos extrair o máximo de informação;
Algumas estratégias nos ajudam simular quão bem um modelo de aprendizagem de máquina é capaz de generalizar seu aprendizado na prática.
Holdout consiste em particionar nosso conjunto de dados em dois conjuntos disjuntos, um conjunto de treinamento, que usamos para treinar os modelos, e um conjunto de teste, usado para avaliar o poder de generalização dos modelos;
Não há uma regra estabelecida para o percentual de observações nos conjuntos de treinamento e teste;
Em geral seleciona-se entre 70% e 80% das amostras para o conjunto de treinamento, e o restante para o conjunto de teste;
Para que as proporções de observações entre as classes (tarefa de classificação) ou entre quantis determinados da variável alvo (tarefa de regressão) sejam mantidas, deve-se usar amostragem aleatória estratificada;
A fim de se avaliar os modelos em diferentes subamostras pode-se repetir o processo de particionamento um número de vezes (holdout repetido).
Validação cruzada é usada para avaliar a capacidade do modelo de reagir corretamente a dados que não foram usados para treiná-lo;
Pode ajudar a detectar problemas como over/underfitting e seleção enviesada de amostras;
Seu funcionamento é simples: divide-se o conjunto em \(K\) subconjuntos (folds) e, a cada rodada, usa-se um subconjunto para teste (validação) e os outros para treinamento;
Esse processo faz com que os conjuntos de treinamento e teste (validação) sejam disjuntos;
Assim como no holdout, deve-se utilizar amostragem aleatória estratificada.
Um hiperparâmetro é um parâmetro que controla o processo de aprendizagem.
Cada algoritmo pode precisar de diferentes valores de hiperparâmetros que influenciam a capacidade de ajustar o modelo aos dados;
Assim, a otimização (tuning) de hiperparâmetros é um processo que busca encontrar a tupla de valores de hiperparâmetros que produzem o melhor modelo para um dado problema e uma dada métrica de avaliação.
Trata-se de uma busca exaustiva através de todas as tuplas possíveis de hiperparâmetros dados valores aceitáveis para cada hiperparâmetro, fornecidos pelo usuário;
É necessário especificar uma métrica de performance;
Para parâmetros com suporte em subconjuntos de \(\mathbb{R}\) (contínuos), é necessário definir limites e discretizar seus valores;
Por exemplo, para um classificador SVM com kernel RBF (Gaussiano) precisamos otimizar pelo menos dois hiperparâmetros: o parâmetro de regularização \(C\) e a largura do kernel \(\gamma\);
Ambos são contínuos, então definimos um conjunto finito de valores razoáveis para nossa busca: \[\begin{align*} C &\in \{10, 100, 1000\}\\ \gamma &\in \{0.1, 0.2, 0.5, 1.0\} \end{align*}\]
O grid search vai então treinar um SVM com cada par \((C, \gamma)\) possível e avaliá-lo no conjunto de validação;
Ao final do processo de validação cruzada, a melhor configuração \((C, \gamma)\) é retornada;
O processo todo é altamente paralelizável.
Um problema de grid search é que todos os modelos precisam ser treinados com todas as tuplas de hiperparâmetros em todas as subamostras do processo de validação cruzada;
Seria útil se, em algum ponto do processo de otimização, uma análise intermediária fosse realizada, eliminando as tuplas que produziram resultados muito ruins;
Em métodos de racing, o processo de otimização avalia todos os modelos em um subconjunto inicial das subamostras (amostras burn in);
Com base nas métricas de performance calculadas, algumas tuplas de hiperparâmetros não são consideradas para as subamostras subsequentes;
Essa medida, torna o processo de otimização dos hiperparâmetros mais rápido, peincipalmente para modelos com muitos hiperparâmetros a serem otimizados, como redes neurais e extreme gradient boosting.
As bibliotecas de aprendizagem de máquina costumam ter implementações de métodos de otimização de hiperparâmetros (grid search, grid search via racing, random search, otimização bayesiana, algoritmos evolutivos, inteligência de enxames, etc.);
Para garantir a reprodutibilidade do código, é importante definir uma semente para o gerador de números aleatórios (em R
, utilizando a função set.seed()
) em todas as etapas que envolverem amostragem.
Introdução à Aprendizagem de Máquina com Tidymodels - Prof. Marcelo R. P. Ferreira