Você está na página 1de 25

16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

FUNDAMENTOS DE MACHINE LEARNING

CICLO 2 – ALGORITMOS PARA PROBLEMAS DE


REGRESSÃO

INTRODUÇÃO A PROBLEMAS DE REGRESSÃO   


No ciclo anterior vimos que o aprendizado de máquina supervisionado é
aproximar uma função desconhecida a partir da disponibilidade parcial do seu domínio e
imagem , mapeadas em pares ,
veja a Figura 8.

Figura 8 Mapeamento de entre realizado por


uma função desconhecida .

No caso dos problemas de regressão essa definição se mantém, e o que define um problema de
regressão é a natureza de , vejamos alguns problemas de regressão na Tabela 1.

Tabela 1 Problemas de Regressão.

Problema Entradas (X) Saída (Y)


Estimar valor de seguro de Sexo, Idade, Veículo,
Valor em reais do seguro
automóvel Renda, Multas
Determinar o valor do
Bairro, Bandeira Valor do litro do combustível
combustível numa região
Estimar o valor nutricional Açúcar, Proteínas, Sais
Valor nutricional
de um cereal matinal Minerais
 

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 1/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

Em todos os três problemas citados na Tabela 1, a saída é um valor contínuo, que pode estar
delimitado, como por exemplo valores em Reais do seguro ou do combustível dificilmente seria um
valor negativo, mas ainda assim, estão numa faixa de valores contínuos, é justamente essa
característica que nos ajudar a identificar um problema de regressão.

Agora que vimos a principal característica dos problemas de regressão, podemos estudar as
técnicas para atacar tais problemas.

Importante!
É importante lembrar que para os exemplos práticos usaremos a
linguagem Python (Foundation, 2016) e o Scikit-learn, um
framework de aprendizado de máquina em Python (Scikit-learn,
[s.d.]). Podemos usar o Google Colaboratory, o qual é uma
plataforma on-line que usa o Jupyter para rodar diversos frameworks em
Python, inclusive os códigos que veremos no transcorrer de nossos estudos.
Para tanto, veja mais detalhes sobre seu uso aqui.

VAMOS PRATICAR?
PARA EXERCITARMOS A PRÁTICA DA CONSTRUÇÃO DE MODELOS DE
APRENDIZADO DE MÁQUINA, PRECISAMOS DE DADOS ORIUNDOS DE
DOMÍNIOS E PROBLEMAS ESTABELECIDOS. NESSE SENTIDO, O SITE
KAGGLE POSSUI VÁRIAS BASES DE DADOS COM DESCRIÇÕES
DETALHADAS, ALÉM DE CÓDIGOS E SOLUÇÕES USANDO AS MAIS VARIADAS
TÉCNICAS. O VÍDEO INDICADO POSSUI UMA DESCRIÇÃO SOBRE O QUE É, E
COMO USAR O KAGGLE PARA CONSTRUIR SOLUÇÕES USANDO MACHINE
LEARNING. ATENTE-SE QUE É POSSÍVEL HABILITAR NO VÍDEO AS
LEGENDAS EM PORTUGUÊS, CASO SEJA NECESSÁRIO.

Kaggle

How to Make a Data Science Project with Kaggle

REGRESSÃO LINEAR   
Na Figura 1 vimos que a função é desconhecida e precisamos de aproximá-la
de maneira que possamos mapear satisfatoriamente  em . Tal aproximação na regressão
linear é feita através de uma equação linear, conforme Géron (2019, p. 116) indica a seguir:

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 2/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

Onde,

  é o valor predito pela equação.

  é a quantidade de features.

é o valor da i-ésima feature.

é o valor do j-ésimo parâmetro incluindo chamada bias.

Vale ressaltar que quando dizemos que precisamos aproximar uma função desconhecida a partir de
uma função linear, precisamos encontrar o vetor de pesos que melhor mapeia os pares
   ou seja, cuja a diferença entre que é o valor predito pela equação linear para e,
   que é o valor verdadeiro, seja a menor possível.

Para ilustrar esse conceito podemos gerar um conjunto de dados simples e unidimensional que está
representado (pontos em azul) na Figura 10, sendo que temos três funções candidatas (linhas em
vermelho) para aproximar esse conjunto, as quais tem seu próprio vetor .

De fato temos uma infinidade de possíveis vetores candidatos  e, portanto, precisamos de uma
forma de escolher a melhor dentre eles, ou seja, precisamos otimizar o vetor de pesos  de
maneira à minimizar o erro entre a predição e o verdadeiro.

A maneira mais genérica e imediata para essa otimização é chamada Gradiente Descendente e
será vista na próxima seção.

Fonte: adaptado de (GÉRON, 2019, p. 120).


Figura 9 Mapeamento entre realizado por uma função desconhecida .

GRADIENTE DESCENDENTE
A técnica denominada gradiente descendente (gradient descendent) é a técnica mais geral, usada
para encontrar o vetor de pesos ,  sendo que tal técnica também serve de base para técnicas
subsequentes mais robustas. Gerón (2019, p. 122) aborda de maneira lúdica a ideia do gradiente
descendente com a seguinte história,

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 3/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

[...] Suponha que você está perdido nas montanhas em meio à uma densa neblina, e você
só consegue sentir a inclinação do chão abaixo de seus pés. Uma boa estratégia para
chegar à base da montanha é seguir a inclinação do chão para a parte mais baixa.

É realmente assim que o gradiente descendente faz, uma vez que ele procura o ponto mais baixo
na curva de erro um passo de cada vez. De maneira mais concreta podemos iniciar com um valor
aleatoriamente definido para o vetor   e vamos alterando esse vetor, um passo de cada vez,
visando diminuir a função de erro, até que o gradiente descendente atinja um valor mínimo.
Podemos ver a ilustração desse conceito na Figura 10.

Fonte: adaptado de (GÉRON, 2019, p. 122).


Figura 10 Gradiente Descendente em busca do mínimo da função de
erro.

Notamos que na Figura 10 existe o learning step, que é um valor que dita o tamanho do passo em
direção ao mínimo o gradiente descendente dará. Havemos de notar que, esse é um valor empírico
e juntamente com o valor inicial aleatório pode causar algumas situações, tais como, fazer com que
o erro mínimo seja ultrapassado (Figura 11a), alcançar um mínimo local não satisfatório, ou então,
encontrar um platô que é uma região do espaço de erro, que não apresenta queda em sua
localidade (Figura 11b).

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 4/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

Fonte: adaptado de (GÉRON, 2019 p. 123).


Figura 11 Efeitos do gradiente descendente, (a) learning rate alto demais, (b) mínimo local e
platô.

Antes de apresentarmos a equação do gradiente descendente precisamos ter em mente, conforme


comentado anteriormente, que o aprendizado supervisionado necessita de uma função de custo, ou
função de erro para estimar o desempenho do modelo (LUGER, 2013). A mais clássica e
fundamental função de erro que podemos considerar é o Mean Squared Error (MSE), ou Erro
Quadrático Médio, a saber:

Onde,

é o valor predito pela equação.

é o valor verdadeiro para .

A partir do erro o gradiente descendente pode calcular o deslocamento que deverá ser feito no vetor
que é a derivada parcial da função de custo, portanto,

Tal cálculo pode ser realizado para todos os elementos do conjunto de treinamento de uma só
vez, o que é chamado de vetor de gradiente (GÉRON, 2019),

É importante notarmos que refere-se ao deslocamento de  o espaço de erro,


ou seja, e para que  atinja um valor que indique o menor erro temos que iterar  
subsequentemente aplicando o passo do gradiente descendente a saber,

Onde,   é o passo atual e representa o valor atual de e, portanto,   representa o


novo valor com a correção realizada pelo gradiente e o learning step .

A seguir, podemos ver a regressão linear em ação de uma maneira simplificada, vamos usar um
exemplo (SCIKIT-LEARN, [s.d.]), o qual foi adaptado para este ciclo de aprendizagem, onde deve-

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 5/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

se aproximar uma função para um conjunto de dados que representa os preços dos imóveis na
cidade de Boston, são 513 imóveis, representados por 13 atributos (features), e a variável alvo que
indica o preço de cada um dos imóveis. Visando um melhor entendimento e representação visual da
aproximação realizada, utilizaremos apenas 1 atributo, bem como a variável alvo, sendo assim,
seremos capazes de representar os resultados em gráficos. O “Código 1” apresenta o código
comentado para resolver o problema usando, na linha 16, o objeto SGDRegressor, o qual
representa uma regressão linear aproximada com o Stochastic Gradient Descendent, que faz o
gradiente descendente de maneira estocástica variando o learning rate a cada passo (GÉRON,
2019).

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 6/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

Código 1 Código-fonte para predição do valor de imóveis.

1. import matplotlib.pyplot as plt


2. import numpy as np
3. from sklearn import datasets, linear_model
4. from sklearn.metrics import mean_squared_error, r2_score

5. # Carrega o conjunto de dados "boston"


6. X, y = datasets.load_boston(return_X_y=True)

7. # Uso de uma feature apenas, por simplicidade


8. X = X[:, np.newaxis, 5]

9. # Dividir o conjunto X em treinamento e teste


10. X_train = X[:-20]
11. X_test = X[-20:]

12. # Dividir a variável target y em treinamento e teste


13. y_train = y[:-20]
14. y_test = y[-20:]

15. # Criar o objeto de Regressão Linear


16. regr = linear_model.SGDRegressor(eta0=0.02)

17. # Treinar o modelo


18. regr.fit(X_train, y_train)

19. # Testando o modelo


20. y_pred = regr.predict(X_test)

21. # Vetor de coeficientes


22. print('Coefficients: \n', regr.coef_)
23. # Erro quadrático médio
24. print('Mean squared error: %.2f'
% mean_squared_error(y_test, y_pred))

25. # Plotando resultados


26. plt.scatter(X_test, y_test, color='black', label='y')
27. plt.plot(X_test, y_pred, color='blue', linewidth=3, label='$\ha
28. plt.xlabel('Feature $X_5$')
29. plt.ylabel('y (Target)')
30. plt.legend()

31. plt.show()

Confira o vídeo complementar a seguir, no qual o exemplo do “Código 1” é executado e comentado.

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 7/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

Ao rodar o código do “Código 1”, podemos ver na Figura 12, o gráfico indicando a aproximação,
realizada na porção do conjunto, usada para testar o desempenho dos coeficientes, onde os pontos
representam os pares , e a linha representa a aproximação realizada.

Figura 12 Aproximação linear resultado da execução do código no “Código 1”.

Destacamos que no caso do objeto SGDRegressor usado no exemplo do “Código 1”, além da
versão estocástica do Gradiente Descendente, é também usado um regularizador L2 por padrão,
evitando, assim, que o modelo apresente um efeito colateral chamado overfitting, o qual ocorre
quando um modelo de aprendizado supervisionado ajusta os parâmetros demasiadamente em
função do conjunto de treinamento, apresentando baixo desempenho ao ser avaliado, por meio do
conjunto de teste.

Veja, para mais detalhes, a documentação do Scikit-Learn voltada para o Stochastic Gradient
Descendent.

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 8/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

REGRESSÃO POLINOMIAL   
A regressão linear tem como inductive bias uma relação linear
entre as variáveis independentes , e a variável dependente  entretanto, quando os dados
são mais complexos e o erro apresentado por uma aproximação linear não é satisfatória, devemos,
então, lançar mão de outras técnicas e estratégias.

Uma dessa técnicas é a regressão polinomial (GÉRON, 2019; apud HASTIE; TIBSHIRANI;
FRIEDMAN, 2009), a qual adiciona valores de potência a cada um dos atributos de  e os
considera como novos atributos, treinando, por fim, um modelo de regressão linear conforme visto
no tópico anterior.

Podemos perceber que a geração dos atributos polinomiais age como um pré-processamento dos
dados, ou seja, uma alteração nos dados de maneira que eles possam ser usados por uma
regressão linear. No “Código 2” temos o código que, a partir do conjunto dados de imóveis na
cidade de Boston, relacionando a feature com o target aproxima-os linearmente, mas,
antes, gera atributos polinomiais de 2 ordem, ou seja, através de uma equação quadrática
.

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 9/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

Código 2 Código-fonte para predição por regressão linear do valor de


atributos polinomiais.

1. import matplotlib.pyplot as plt


2. import numpy as np
3. from sklearn import datasets, linear_model
4. from sklearn.metrics import mean_squared_error, r2_score
5. from sklearn.preprocessing import PolynomialFeatures
6. from sklearn.model_selection import ShuffleSplit
7. import operator

8. # Carrega o conjunto de dados "boston"


9. X, y = datasets.load_boston(return_X_y=True)

10. # Uso de uma feature apenas, por simplicidade


11. X = X[:, np.newaxis, 12]

12. # Dividir o conjunto X e o targett y em treinamento e teste


13. ss = ShuffleSplit(n_splits=1, test_size=.25)
14. train_idx, test_idx = list(ss.split(X))[0]

15. # Construir o modelo para geração de atributos polinomiais com g


16. poly_features = PolynomialFeatures(degree=2)
17. X_poly = poly_features.fit_transform(X)

18. # Criar o objeto de Regressão Linear


19. lin_reg = linear_model.LinearRegression()

20. # Treinar o modelo


21. lin_reg.fit(X_poly[train_idx], y[train_idx])

22. # Testando o modelo


23. y_pred = lin_reg.predict(X_poly[test_idx])

24. # Vetor de coeficientes


25. print('Coefficients: \n', lin_reg.coef_)
26. # Erro quadrático médio
27. print('Mean squared error: %.2f'
28. % mean_squared_error(y[test_idx], y_pred))

29. # Plotando resultados


30. plt.scatter(X[train_idx], y[train_idx], color='black', label='y
31. sort_axis = operator.itemgetter(0)
32. sorted_zip = sorted(zip(X[test_idx],y_pred), key=sort_axis)
33. X_test, y_pred = zip(*sorted_zip)
34. plt.plot(X_test, y_pred, color='blue', linewidth=3, label=r'$\ha
35. plt.xlabel(r'Feature $X_{12}$')
36. plt.ylabel('y (Target)')
37. plt.legend()
38. plt.show()

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 10/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

Na linha 20, do “Código 2”, podemos ver a criação do objeto do Scikit-learn responsável por gerar
os atributos polinomiais de grau 2, e na linha 21 a transformação de para uma forma polinomial
através do método fit_transform. A partir daí, temos a criação do modelo linear (linha 24), bem como
o treinamento (linha 27) usando a transformação polinomial de .

A Figura 14 mostra o gráfico resultante do código do “Código 2”, podemos ver que a curva de
predição apresenta uma forma quadrática, apesar de ter sido aproximada por um modelo linear,
indicando, assim, a influência da transformação polinomial de grau 2 aplicada aos dados.

Figura 13 Aproximação linear resultado da execução do código no “Código  2” usando


transformação polinomial.

Confira o vídeo complementar a seguir, a fim de acompanhar a demonstração prática do código


contido no “Código 2”.

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 11/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

PRONTO PARA SABER MAIS?


Existem extensões dos modelos de regressão linear, tais como: os de Lasso, Ridge e ElasticNet
que lidam com bias, variância e regularização. Para você obter maiores informações, clique no
botão ao lado e conheça esses modelos (veja possibilidade de tradução automática, através do
Google Chrome).

Clique Aqui

SERÁ QUE VOCÊ COMPREENDEU TODO O CONTEÚDO ESTUDADO


NESTE TÓPICO? VERIFIQUE SUA APRENDIZAGEM REALIZANDO A
QUESTÃO A SEGUIR.

Sobre os modelos de Regressão Linear e Polinomial é possível afirmar que:

O Gradiente Descendente pode ser aplicado a partir de uma função de erro para ajustar
os coeficientes lineares da função aproximada tanto na Regressão Linear quanto na
Regressão Polinomial.

Nos modelos de regressão linear e polinomial o aprendizado é considerado não-


supervisionado, devido à presença do inductive bias linear em ambos os modelos.

Apenas a regressão polinomial pode ser aplicada em problemas de ordem complexa, não
cabendo em nenhuma hipótese o uso da regressão linear simples.

conjunto de dados disponível para a realização da regressão, deve ser submetido à


transformação polinomial, independente do modelo aplicado.

SUPPORT VECTOR REGRESSION   


Support Vector Machines são muito populares em problemas de classificação e
têm uso extenso na área de análise preditiva de dados, por sua versatilidade (HAYKIN, 2011), elas
podem ser aplicadas em problemas de regressão, sendo denominadas Support Vector Regression
(SVR).

Neste tópico faremos uma abordagem das (SVR), a partir da perspectiva dos modelos de regressão
linear vistos até agora, e, portanto, deixaremos sua proposta primária no ciclo dedicado a problemas
de classificação.

Até o momento, vimos que os modelos de regressão linear e suas variantes aproximam suas
funções através da minimização do Erro Quadrático Médio, ou seja, o objetivo é minimizar a função:

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 12/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

E se, ao invés de nos preocuparmos apenas com o tamanho do erro, nos preocupássemos se o
erro está dentro de uma margem de tolerância? Intuitivamente podemos concluir que ao invés de
atingir um erro mínimo específico, é mais vantajoso e simples aceitar o erro dentro de um limite de
tolerância. Sendo assim, o (SVR) nos dá a possibilidade de trabalharmos sob a perspectivas de
margens de erro de maneira intrínseca ao modelo.

Percebemos que a função de erro deverá ser considerada de maneira diferente, uma vez que,
estamos considerando tratar o erro de forma diferente, portanto, a (SVR) usa a l2-norm de maneira
a minimizar os coeficientes lineares .  Entretanto, há uma restrição imposta à função a ser
minimizada, de maneira que,

Com a restrição de margem de erro,

A Figura 14, a seguir, apresenta uma representação gráfica meramente ilustrativa da aproximação
feita pela (SVR), na qual além da aproximação exata (linha vermelha), há, também, as
aproximações (linhas tracejadas) a partir da margem de tolerância de erro que pode ser modulada.

Figura 14  Aproximação linear, resultado da execução do código no


“Código 2”, usando transformação polinomial.

Visando alcançar maior robustez, o (SVR) adiciona um componente de desvio , que leva em
consideração os pontos que estão fora da região estabelecida pela aproximação com suas
margens, portanto, a função a ser minimizada fica redefinida,

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 13/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

Com a restrição de margem de erro,

Observamos que agora temos um novo hiperparâmetro, denominado C, o qual ao assumir valores
mais altos suaviza a margem (soft margin limits), e assumindo valores mais baixos enrijece a
margem (hard margin limit), teoricamente, tornando a aproximação linear mais difícil (HASTIE,
TIBSHIRANI; FRIEDMAN, 2009).

O “Código 3” utiliza uma (SVR) linear, disponível no Scikit-learn, para estimar o valor de mercado de
imóveis em Boston a partir de suas características.

Código 3 Código-fonte para predição do valor de imóveis usando um Su

1. import matplotlib.pyplot as plt


2. import numpy as np
3. from sklearn import datasets
4. from sklearn.pipeline import Pipeline
5. from sklearn.preprocessing import StandardScaler
6. from sklearn.svm import SVR
7. from sklearn.model_selection import train_test_split
8. from sklearn.metrics import mean_absolute_error

9. # Carrega o conjunto de dados "boston"


10. X, y = datasets.load_boston(return_X_y=True)

11. # Cria o pipeline com o ajuste de escala dos dados e o regresso


12. sv_regr = Pipeline([
13. ('Scaler', StandardScaler()),
14. ('Regressor', SVR(kernel='linear',C=10))
15. ])

16. # Separa conjunto de treinamento e teste


17. X_train, X_test, y_train, y_test = train_test_split(X, y, test_

18. # Treina o modelo


19. sv_regr.fit(X_train, y_train)

20. # Testa o modelo


21. y_pred = sv_regr.predict(X_test)
22. print('Erro médio Absoluto: %.2f' % mean_absolute_error(y_test,

Vale ressaltar que em problemas que usam Support Vector Machines para regressão, e também
classificação, existe a necessidade de se alterar a escala dos atributos presentes no conjunto de
dados, uma vez que tal técnica é sensível à escala (veja linha 13), no caso os atributos após a
equalização da escala apresentam média 0 e desvio-padrão unitário.

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 14/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

Podemos verificar na linha 14 que o SVR usa um kernel linear, entretanto, a capacidade das
Support Vector Machines usarem diferentes tipos de kernel, por exemplo, polinomial, gaussiano ou
sigmoide, elimina a necessidade de mapeamento dos dados para domínios lineares, tal qual
realizado na Regressão Polinomial.

Veja no vídeo a seguir o código do “Código 3” sendo executado de maneira comentada.

DECISION TREE REGRESSION   


A técnica denominada Decision Tree ou Árvore de Decisão é considerada uma
das mais simples abordagens para aprendizado de máquina utilizada tanto para problemas de
classificação quanto regressão (Norvig e Russell, 2014). Abordaremos, neste tópico, as Decision
Trees Regression (DTR) e como elas podem auxiliar, não apenas na construção de um modelo
capaz de realizar predição, mas também em um modelo que, através da construção de uma árvore,
apresente o conhecimento hierarquizado, o qual pode ser facilmente visualizado e analisado.

Sendo assim, podemos partir de um exemplo apresentado por Gerón (2019, p. 183)  para verificar a
estrutura em árvore, criada pela aplicação de uma DTR, em um conjunto de dados bidimensional
  de ordem quadrática, expresso na Figura 15.

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 15/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

Figura 15 Conjunto de dados (dataset) de ordem quadrática.

Podemos usar o código do “Código 4”, a seguir, para submetermos o conjunto de dados em questão
à uma DTR e, assim, obter uma visualização da árvore treinada na linha 5.  A Figura 17, a seguir,
mostra a árvore de maneira gráfica, na qual podemos verificar que os nós dela apresentam pontos
de corte nos possíveis valores dados por ,  causando uma divisão e gerando o caminho. Vamos
considerar que desejamos estimar o valor de   para a entrada ,  sendo assim, iniciando
na raiz da árvore, verificarmos que seu ponto de corte é .  Prosseguindo com nosso
raciocínio, vamos tomar o caminho da esquerda (True) na árvore, chegando à um novo ponto de
corte, a saber:   ; dessa vez, tomaremos o caminho da direita (False) e
chegaremos ao nó-folha, o qual apresenta o valor estimado para ,  portanto, os nós-
folha representam a predição de .

Código 4 Código-fonte predição do conjunto de dados quadrático usan

1. import os
2. from sklearn.tree import DecisionTreeRegressor
3. from sklearn.tree import export_graphviz

4. tree_reg = DecisionTreeRegressor(max_depth=2)
5. tree_reg.fit(X, y)

6. # Criando o grafo da árvore de decisão


7. export_graphviz(tree_reg, out_file='regr_tree.dot', feature_
class_names=['y'], rounded=True, filled=True)
8. # Exportando o grafo para uma figura
9. os.system('dot -Tpng regr_tree.dot -o regr_tree.png')

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 16/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

Figura 16 Representação gráfica da árvore construída.

Prosseguindo com o raciocínio anterior, a árvore estabelece regiões de corte visando aproximar a
função em questão. Logo, usando a árvore para predizer todos os valores de que temos em
mãos, podemos ver a aproximação  realizada na Figura 17, a qual é grosseira, uma vez que,
apenas para título de exemplo, geramos uma árvore, limitando sua profundidade a 2 níveis (veja a
linha 4, no “Código 4”) por questões de visualização, logo maiores valores de profundidade levam a
curvas mais ajustadas com o conjunto de dados ao custo de termos o efeito de overfitting. A
profundidade é um dos hiper-parâmetros, que podem ser ajustados, visando regularizar a árvore de
decisão (GÉRON, 2019; HASTIE, TIBSHIRANI e FRIEDMAN, 2009; NORVIG e RUSSELL, 2014).

Com o intuito de avançar em seus estudos, é importante que leia sobre árvores de
decisão na documentação do Scikit-learn, para obter maiores informações sobre
como os parâmetros podem regularizar o aprendizado de árvore de decisão. Boa
leitura!

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 17/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

Figura 17 Predição (em vermelho) realizada pela árvore de decisão


obtida.

Ao entendermos o princípio básico da regressão da árvore de decisão,


camos com a pergunta “Como a árvore determina o atributo de e o ponto
de corte nesse atributo para construir os nós?”.

Essa pergunta pode ser respondida através do modelo CART (Classification and Regression of
Decision Tree, no qual a escolha do atributo ,  bem como o ponto de corte deste é feito
minimizando uma função de custo, mediante uma busca estocástica (BREIMAN, 2017). No caso de
problemas de regressão, a função de custo é uma medida de erro já conhecida, a saber: o Erro
Quadrático Médio.

Para tanto, conforme (GÉRON, 2019), temos:

Onde:

E,

Nas fórmulas que você acabou de ver, o determina a quantidade de amostras disponíveis por
cada corte avaliado. Já o algoritmo CART avalia os valores de , apresentados em , e também
cortes realizados nos atributos presentes no conjunto de dados , escolhendo os que apresentam
os menores valores de erro.  

ALGORITMOS DE BOOSTING   
Até o momento, vimos várias técnicas de regressão, cada uma com suas próprias
características, bem como conceitos e perspectivas do problema de regressão, para exemplificar
temos: a regressão linear, que é a mais simples das técnicas, pois tenta aproximar linearmente a
função desconhecida; além disso, temos também as Support Vector Regression, as quais buscam
construir uma região de aproximação adicionando fatores de margem e tolerância; por fim,
estudamos as Decision Tree Regression, que tentam, por meio da construção de pontos de corte,
se adaptar ao espaço, onde os pontos estão dispostos.

E se pudéssemos usar todas essas técnicas juntas para realizar a predição de ? Tal qual a Figura
18 mostra, poderíamos submeter nossos dados a diferentes técnicas e consolidar os resultados

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 18/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

preditivos de cada uma, em uma predição final, é justamente isso que as técnicas de Ensemble
Learning se propõem a fazer.

Figura 18 Método de combinação de técnicas denominada Ensemble Learning.

Dentre as abordagens de ensemble que temos na literatura, os algoritmos de boosting estão entre
os mais populares, e focam entre combinar vários modelos simplificados, na verdade, modelos
“fracos” para criar um único modelo “forte” e robusto. Por fraco podemos considerar modelos que
apresentam um desempenho logo abaixo do considerado satisfatório (NORVIG; RUSSELL, 2014). 

ADABOOST
Nesta técnica de boosting os modelos fracos são adicionados de maneira subsequente com o
intuito de suprir as deficiências apresentadas pelos modelos já existentes no processo de
aprendizado, ou seja, um modelo é adicionado, visando aprender o que seu antecessor não
conseguiu.

A título de exemplificação, quando da construção de um regressor AdaBoost, inicialmente um


modelo de aprendizado, tal qual uma Decision Tree Regressor, é treinado usando o conjunto de
treinamento. As instâncias cujo modelo não conseguiu aprender, são reforçadas através de um
fator de peso, e um segundo modelo de aprendizado, para tanto, outra DTR é adicionada e treinada
com foco nas instâncias que possuem mais peso, e assim, a técnica AdaBoost vai construindo
vários modelos “fracos”, mas super especializados em determinadas características do conjunto de
dados (GÉRON, 2019). A Figura 19 apresenta a ideia de combinar modelos em torno de
características específicas, acompanhe:

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 19/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

Fonte: Géron ( 2019, p. 204).


Figura 19 Treinamento subsequente com a técnica AdaBoost.

PRONTO PARA SABER MAIS?


Você pode conferir uma explicação animada sobre o funcionamento do AdaBoost, usando Decision
Trees como modelo base. Lembre-se de que no YouTube tem a opção de uso de legendas em
Português, clique no botão ao lado e bom vídeo!

Clique Aqui

GRADIENT BOOSTING
Este método, geralmente usado com Decision Tree Regressor, usa o Gradiente Descendente para
ajustar os modelos subsequentes a partir da sua função de erro, e envolve três componentes
básicos, a saber:

Função de custo: trata-se de uma função que se estime o erro no processo de treinamento, no
caso de um problema de regressão pode-se utilizar o erro quadrático médio. Uma das vantagens do
Gradient Boosting é que podemos utilizar qualquer função que seja diferenciável.

Modelo de aprendizado: árvores de decisão são usadas como modelos de aprendizado “fraco” no
Gradient Boosting, uma vez que são construídas satisfatoriamente, principalmente quando se
constroem árvores de pouca profundidade, o que configura a árvore de decisão, nesse caso, como
um modelo “fraco”.

Termo aditivo: as árvores de decisão são adicionadas uma por vez, e as existentes não são
modificadas, assim, o gradiente descendente é usado para minimizar o erro quando as árvores são
adicionadas. Ao invés de se alterar um vetor de coeficientes, o gradiente descendente após o
cálculo do erro, adiciona uma árvore ao modelo parametrizando-a na direção certa ao residual deste
erro, ou seja, considerando que haja modelos disponíveis sua construção subsequente é
dada por:

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 20/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

Onde é fator obtido para o cálculo residual dado à partir da minimização de uma função de erro
qualquer, usando o Gradiente Descendente. Dessa maneira, os modelos subsequentes são
treinados com foco específico no valor residual ,e não mais, nos valores de .

PRONTO PARA SABER MAIS?


Clique no botão ao lado  e acompanhe uma explicação na documentação do Scikit-learn que
complementa o texto que acabou de estudar.

Clique Aqui

MÉTRICAS PARA AVALIAÇÃO DE MODELOS DE REGRESSÃO


Precisamos fazer um alinhamento sobre como avaliar nossos modelos de regressão, na verdade
temos utilizado uma avaliação sistemática dos modelos, uma vez que, a função de erro é uma
forma de avaliar o desempenho, e é utilizada diretamente para que as regras de aprendizado
corrijam parâmetros dos modelos enquanto o treinamento acontece.

Não obstante, podemos na fase de testes utilizar as mesmas funções de erro como métricas para
verificar tanto quantitativamente, quanto qualitativamente como está o desempenho desses
modelos. Dentre as várias métricas disponíveis podemos destacar (GÉRON, 2019; HASTIE,
TIBSHIRANI e FRIEDMAN, 2009):

1) Erro Absoluto Médio (Mean Absolute Error – MAE): este erro simplesmente considera a média
das distâncias entre o que foi predito, ou seja, a saída da aproximação realizada e a saída
verdadeira , determinada pelo conjunto de dados. É cada uma dessas distâncias que compõem o
erro (veja Figura 21), e, portanto, temos a seguir fórmula:  “MAE”, a qual vale lembrar que não é
diferenciável, ou seja, não é aplicada pelo Gradiente Descendente, mas pode ser usada como
indicação qualitativa de erro.

Nesse sentido, uma variação da “MAE”, é o Erro Percentual Absoluto Médio (Mean Absolute
Percentage Error – MAPE), e é dado por,

2) Erro Quadrático Médio (Mean Squared Error – MSE): esta métrica é diferenciável e comumente
usada em regras de aprendizado, tal qual o Gradiente Descendente, e pode também ser usada de
maneira qualitativa, a única diferença para a MAE é que a MSE eleva a distância ao quadrado,
vejamos:

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 21/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

A MSE também tem a sua variação denominada Raiz do Erro Quadrático Médio (Root Mean Square
Error – RMSE) representada por,

Figura 20 Distâncias indicando o erro de predição da função


aproximada por meio de regressão.

Por fim, visando verificar se uma regressão é satisfatória, ou seja, se a aproximação é boa o
suficiente, a métrica denominada (coeficiente de determinação) é muito utilizada tanto em
machine learning quanto em estatística e é dada aproximadamente por:

Onde,

sendo que é a média dos pontos disponíveis.

A apresenta uma forma percentual, sendo que quanto maior o valor mais bem avaliada é a
aproximação.

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 22/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

A SEGUIR, RESPONDA ÀS PERGUNTAS, PARA VERIFICAR A


ABSORÇÃO DOS CONCEITOS.
 

Relacione os termos, no quadro a seguir, às suas definições:

Ordenar elementos

Algoritmos de Boosting Decision Tree Regressor Regressão polinomial

Regressão

São problemas de aproximação de funções, em


que o objetivo é predizer o valor de uma variável,
com apresentação de valores válidos dentro de
uma determinada faixa de valores reais.

Usa-se em conjunto de dados mais complexos,


adicionando graus de potências como novos
atributos, possibilitando, assim, o uso de métodos
lineares.

Possibilita a visualização gráfica da estrutura de


regras estabelecidas, a partir de pontos de corte,
nos diversos atributos de maneira hierárquica.

Combina vários modelos uniformes com o intuito


de construir um modelo robusto.

CONSIDERAÇÕES   
Nesse segundo ciclo, vimos as principais técnicas de regressão presentes no
aprendizado de máquina, começando pela regressão linear, apesar de ser simples, pode, em adição
a outros recursos, tais como: transformação polinomial, ser útil para o uso em domínios de maior
complexidade. Já as Support Vector Regression trazem a robustez e a regularização necessárias
para gerar uma aproximação capaz de predizer a variável target com desempenho satisfatório. Ao
abordar as Decision Tree Support vimos que é possível construir um modelo hierarquizado, o qual
constrói uma aproximação não linear no espaço do conjunto de dados, e finalmente, estudamos a
combinação desses modelos em abordagens de Boosting.

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 23/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

ATIVIDADE NO PORTFÓLIO   

OBJETIVO
Construir um modelo de regressão, usando uma Decision Tree
Regressor a partir de determinado conjunto de dados.

DESCRIÇÃO DA ATIVIDADE
A partir do conjunto de dados sobre pacientes com Diabetes
(sklearn.datasets.load_diabetes), identifique o atributos de entrada e o atributo
target , a seguir, construa um modelo de Decision Tree Regression, usando o Scikit-
learn que seja capaz de estimar valores de progressão de diabetes dos pacientes
selecionados para teste, apresentando o desempenho obtido pelo modelo em questão.
Depois de concluir, poste código-fonte no Portfólio.

PONTUAÇÃO
A atividade vale de 0 a 1,0 ponto.

CRITÉRIOS DE AVALIAÇÃO
Na avaliação desta tarefa serão utilizados os seguintes critérios:

Entendimento correto de problemas de regressão.


Uso adequado das funções e objetos do Scikit-learn.
Apresentação clara dos resultados.

Acesse o Portfólio

QUESTÕES ON-LINE   
Responder às questões on-line dos Ciclos 1 e 2 na
Sala de Aula Virtual.

PONTUAÇÃO
De 0 a 1,0 ponto.

© 2020 Fundamentos de Machine Learning | Claretiano

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 24/25
16/12/2020 Ciclo 2 – Algoritmos para Problemas de Regressão – Fundamentos de Machine Learning

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/11/01/ciclo-2-algoritmos-para-problemas-de-regressao/ 25/25

Você também pode gostar