Você está na página 1de 52

10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

ÚLTIMOS
POST

Como fazer análise


de sobrevivência na
prática?

Modelos de Machine
Learning utilizando o
pacote Caret

Modelo Linear Misto

MODELOS DE MACHINE Introdução às Séries


Temporais

LEARNING UTILIZANDO Testes para


comparação de
O PACOTE CARET proporções

BLOG, PRODUÇÃO CIENTÍFICA

Informe-se por mei


Artigo escrito com a colaboração de Laura nossa newsletter!
Kubitschek
Nome*
O pacote caret, abreviação para
“Classification  And  Regression  Training”, Email*

possui uma série de funções para facilitar o


processo e a construção de modelos Interesse*

preditivos. Nele existem ferramentas para


divisão dos dados, pré-processamento, Assine

seleção de variáveis, ajuste de modelos


utilizando reamostragem, estimativa da
importância de variáveis e muitas outras
funcionalidades.
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!
Neste artigo, o objetivo é apresentar como
alguns modelos de Machine Learning
Termos de Privacidade
[https://operdata.com.br/blog/uma-visao-

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 1/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

geral-sobre-machine-learning-regressao-
clustering/] podem ser ajustados utilizando
esse pacote de maneira simples, direta e
bem intuitiva.

[https://operdata.com.br/manipulacao-de-dados-e-analise-
grafica/]

Sintaxe do Caret
Uma vez que o intuito do artigo é apresentar
como ajustar modelos de Machine Learning
[https://operdata.com.br/blog/uma-visao-

geral-sobre-machine-learning/] usando o

pacote, a diante irei abordar a sintaxe


do  caret  voltada para esse objetivo. No Informe-se por mei
entanto, caso queira aprender mais sobre nossa newsletter!
todas suas ferramentas sugiro
essa  bibliografia Nome*

[http://topepo.github.io/caret/index.html] . Email*

Construção de Modelos
Interesse*

A função train  do pacote pode ser usada


para: Assine

ajustar modelos e avaliar, usando


reamostragem, os efeitos dos parâmetros
de ajustes no desempenho do modelo;
escolher o modelo ideal entre os
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!
parâmetros testados;
estimar o desempenho do modelo
Termos a partir
de Privacidade
de um conjunto de treinamento.
https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 2/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

A lógica de funcionamento do pacote é bem


simples. No primeiro momento, deve-se
escolher um modelo específico. Com
o  caret  é possível ajustar 238 modelos
diferentes (rode o
código paste(names(getModelInfo())) para
ver a lista de todos disponíveis). Cada
modelo possui suas especificidades, sendo
assim, utilizando o
código modelLookup(nome do modelo),
você tem acesso a mais informações, como ,
por exemplo, se ele pode ser usado para
problemas de classificação e/ou regressão e
os parâmetros do ajuste que podem ser
otimizados.

É importante frizar que, ao rodar um modelo,

o  caret  caham algum pacote secundário


Informe-se por mei
com as especificações de ajuste do modelo.
nossa newsletter!

head(paste(names(getModelInfo() Nome*

Email*

Interesse*
## [1] "ada" "AdaBag"
## [6] "ANFIS" "avNNet"
## [11] "bagEarth" "bagEarthG Assine

modelLookup("rf")
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!

Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 3/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

## model parameter
## 1 rf mtry #Randomly S

Uma vez que você escolheu qual modelo


deseja ajustar, o próximo passo é escolher
os valores dos parâmetros que deseja que o
algoritmo avalie.

Em seguida, deve-se especificar o tipo de


reamostragem que deve ser usado. A
função train abrange os métodos de
validação cruzada k-fold (uma vez ou com
repetições), validação cruzada leave-one-
out e bootstrap (estimação simples ou regra

632).

Após a reamostragem, o modelo ajustado Informe-se por mei


retorna diversas medidas de desempenho nossa newsletter!
para orientar a escolha do usuário em
relação aos parâmetros de ajuste. Como Nome*

padrão, a função seleciona os parâmetros


Email*
associados ao melhor valor da medida de
desempenho principal, sendo possível
Interesse*
alterar essa medida de avaliação ou
especificar diferentes algorítmos para a
Assine
escolha dos melhores parâmetros.

Por fim, é ajustado um modelo final em todo


banco treino utilizando os parâmetros
“ótimos” escolhidos.
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!

Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 4/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

Exemplo Introdutório

A fim de introduzir a construção de modelos


utilizando o pacote  caret  será mostrado a
seguir um exemplo simples de um ajuste de
random forest usando o banco de dados
Sonar, disponível no pacote mlbench.

Carregando pacote e banco


A base Sonar faz parte de um estudo para


classificação de sinais de sonar, com o


objetivo de diferenciar o reconhecimento de Informe-se por mei
rochas (“R”) e minas (“M”) a partir dos valores nossa newsletter!
de 60 variáveis numéricas.
Nome*

library(mlbench)
Email*
data(Sonar)

glimpse(Sonar[, 50:61]) Interesse*

Assine

## Rows: 208

## Columns: 12

## $ V50 <dbl> 0.0324, 0.0061


## $ V51 <dbl> 0.0232, 0.0125
##
Este $ V52
site utiliza <dbl>
cookies para fornecer 0.0027, 0.0084
a melhor experiência aos seus usuários.
Entendi!
## $ V53 <dbl> 0.0065, 0.0089
## $ V54 <dbl> 0.0159, 0.0048
## $ V55 <dbl> Termos
0.0072,de Privacidade
0.0094
## $ V56 <dbl> 0.0167, 0.0191
https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 5/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

## $ V57 <dbl> 0.0180, 0.0140


## $ V58 <dbl> 0.0084, 0.0049
## $ V59 <dbl> 0.0090, 0.0052
## $ V60 <dbl> 0.0032, 0.0044
## $ Class <fct> R, R, R, R, R,

Especificando Método de
Reamostragem

Antes de ajustar o modelo por meio da


função  train, é possível selecionar o
método de reamostragem desejado no
modelo a partir da função  trainControl,
que em seguida será dada como um
argumento da primeira função.

Como padrão, o método usado é

o  bootstrap, no entanto, é possível usar Informe-se por mei


outros métodos (caso queira saber algumas nossa newsletter!
das opções e uma breve explicação delas
coloquei no apêndice). Nesse exemplo, será Nome*
utilizado a reamostragem  Repeated 5-Fold
Email*
Cross-Validation.

Interesse*
library(caret)

fitControl <- trainControl(## 5-


metho Assine

numbe
## 5
repea

Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!

Ajustando Modelo com train


Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 6/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

Agora que já foi definido o método de


reamostragem podemos ajustar o modelo. O
primeiro argumento da função train é uma
fórmula contendo a variável de classificação
e o preditores. Em seguida, especifica-se o
tipo de modelo que deseja ajustar a partir do
argumento  method. Dessa forma, será
ajustado um modelo Random Forest para
tentar classificar a variável Class do banco
de dados Sonar a partir dos preditores
existentes. A sintaxe básica para ajustar
esse modelo usando o método de
reamostragem  Repeated 5-Fold Cross-
Validation é mostrada abaixo.

set.seed(13)

rf_fit <- train(Class ~ ., data


method = "rf", Informe-se por mei
trControl = fit nossa newsletter!
rf_fit
Nome*

Email*

## Random Forest

Interesse*
##
## 208 samples

## 60 predictor
Assine
## 2 classes: 'M', 'R'

##
## No pre-processing

## Resampling: Cross-Validated
## Summary of sample sizes: 167
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
## Resampling results across tun

Entendi!
##
## mtry Accuracy Termos de Kappa
Privacidade

## 2 0.8413457 0.6773813

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 7/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

## 31 0.8222937 0.6396326

## 60 0.8058942 0.6061802

##
## Accuracy was used to select t
## The final value used for the

O modelo Random Forest possui um único


parâmetro de ajuste, o mtry, que representa
o número de variáveis amostradas
aleatoriamente como candidatas em cada
divisão das árvores de decisões calculadas.

Os valores padrões testados nesse modelo


estão representados na primeira coluna, e o
modelo final é escolhido de acordo com o

parâmetro que maximiza a métrica de


desempenho, sendo nesse


caso mtry=2 associado a acurácia de 0.84. Informe-se por mei
nossa newsletter!
As colunas “Accuracy” e “Kappa” trazem as
médias dessas métricas calculadas a partir Nome*
da reamostrafem 5-Fold Cross_Validation
Email*
repetida 5 vezes para cada um dos valores
do parâmetro testados. Em modelos como
Interesse*
esse, a função train cria automaticamente
uma grade de parâmetros de ajuste, que,
Assine
por padrão, tem tamanho  3p3p, sendo  p  o
número de parâmetros em questão.

A função  train  possui outras


funcionalidades/especificações que serão
mostradas a seguir.
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!

Notas sobre reprodutibilidade


Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 8/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

Ao construir um modelo, os números


aleatórios são utilizados nos índices de
reamostragem mas também na fase de
estimação dos parâmetros em alguns casos.
Sendo assim, é importante haver maneiras
de controlar a aleatoridade, a fim de permitir
a reprodutibilidade dos modelos. A seguir
estão as duas principais maneiras de
garantir resultados reproduzíveis utilizando a
função train.

A primeira opção é fixar uma semente


utilizando  set.seed(semente)  antes
de chamar a função train.
A opção alternativa é, quando deseja
uma divisão específica dos dados, utilizar

o argumento  index  dentro da


função trainControl Informe-se por mei
nossa newsletter!
Nos casos em que os modelos são criados
dentro da reamostragem as sementes Nome*
também podem ser definidas.
Email*
Embora a definição de uma semente antes
de usar a função  train  garanta que os Interesse*
mesmos números aleatórios serão usados, é
improvável que isso aconteça quando o Assine
processamento paralelo é utilizado. Nessa
situação, o argumento  seeds  pode ser
utilizado dentro da função  trainControl,
pelo qual é passado uma lista vetores
usados como
Este site utiliza semente.
cookies para fornecer a melhor experiência aos seus usuários.
Entendi!

Vale ressaltar que a forma como os números


Termos
aleatórios são utilizados de Privacidade
depende muito do

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 9/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

autor do pacote utilizado em cada um dos


modelos, sendo importante pesquisar sobre
isso.

Personalizando o Processo de Ajuste do


Modelo

Opções de Pré-Processamento

Juntamente com a função train é possível


informar, a partir do
argumento  preProcess, um vetor de
strings contendo os métodos de pré-
processamento que o usuário deseja aplicar,
como centralização, escalonamento,
imputação e entre outros. Além disso, outras
opções podem ser informadas a partir da

função trainControl.

Alterando Parâmetros de Ajuste do Informe-se por mei


Modelo nossa newsletter!

A grade de parâmetros de ajuste testados Nome*


no modelo pode ser especificado pelo
usuário. Para isso basta adicionar o Email*

argumento  tuneGrid  á
Interesse*
função train contendo um data frame com
os valores de cada parâmetro nas colunas
(os nomes das colunas devem ser os Assine

mesmos dos parâmetros do modelo a ser


ajustado). Para construir esse data frame o
usuário pode utilizar a
funçaõ  expand.grid, como mostrado a
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!
baixo. Dessa forma, o modelo será ajustado
para cada combinação dos valores dos
Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 10/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

parâmetros(no caso em que o modelo tem


mais de um parâmetro).

rfGrid <- expand.grid(mtry = 2


set.seed(13)

rf_fit2 <- train(Class ~ ., data


method = "rf",
trControl = fit
tuneGrid = rfGr
rf_fit2

## Random Forest

##
## 208 samples

## 60 predictor

## 2 classes: 'M', 'R'

##
Informe-se por mei
## No pre-processing

nossa newsletter!
## Resampling: Cross-Validated
## Summary of sample sizes: 167
Nome*
## Resampling results across tun
##
Email*
## mtry Accuracy Kappa

## 2 0.8480166 0.6910795

Interesse*
## 3 0.8373535 0.6700266

## 4 0.8431397 0.6810660

## 5 0.8317079 0.6585416
Assine
## 6 0.8326149 0.6603026

## 7 0.8366291 0.6688056

## 8 0.8365394 0.6682795

##
## Accuracy was used to select t
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
## The final value used for the

Entendi!

Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 11/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

Outra opção sem ser ajustar o modelo com


os valores padrões ou informá-los
manualmente é usar uma amostra aleatória
de possíveis combinações de parâmetros de
ajuste. A fim de utilizar uma pesquisa
aleatória, basta utilizar o
argumento  search="random"  ao chamar
a função  train. Nesse caso, pode-se
adicionar o argumento  tuneLength  para
definir o número total de combinações de
parâmetros que devem ser avaliadas.

Função trainControl

Como visto anteriormente, a


função  trainControl  controla a maneira

como os modelos são criados, sendo


possível informar diversos valores:


Informe-se por mei
method: especifica o método de nossa newsletter!
reamostagrem, podendo assumir os
seguintes Nome*
valores: "boots" para Bootstrap, "cv" para K-
Email*
Fold Cross
Validation, "LOOCV" para  Leave One Out
Interesse*
Cross Validation,  "LGOCV"  para  Leave
Group Out Cross
Assine
Validation, "repeatedcv" para Repeated
K-Fold Cross Validation,"none"  para
ajustar apenas um modelo no banco
informado, "oob" para estimativas Out of
Bag  e outros mais que você pode
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!
consultar no help da função  ?
trainControl. É importante dizer que
Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 12/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

nem todos modelos são compatíveis com


todos métodos de reamostragem;
number: número de grupos criados na
number
reamostragem K-Fold Cross Validation ou
número de interações de reamostragem
usando  Bootstrap  ou  Leave Group Out
Cross Validation;
repeats: número de repetições no
método  Repeated K-Fold Cross
Validation;
verboseIter: argumento lógico para
imprimir log de treinamento.
returnData: argumento lógico para
salvar dados em uma ranhura chamada
“trainingData”;

p: para caso de  Leave Group Out Cross


Validation, porcentagem de treinamento; Informe-se por mei
Para  method = nossa newsletter!
"timeslice",  trainControl  tem
Nome*
opções initialWindow, horizon e fixedWi
controlam como a validação cruzada Email*
pode ser usada para dados de série
temporal; Interesse*

classProbs: argumento lógico que


determina se as probabilidades de classe Assine

devem ser calculadas para amostras


retidas durante a reamostragem;
index e indexOut: listas opcionais com
elementos para cada iteração de
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!
reamostragem. Cada elemento da lista
são as linhas de amostra usadas para
Termos
treinamento naquela de Privacidade
iteração ou que

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 13/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

devem ser mantidas. Quando esses


valores não são especificados, a função
os gera;
summaryFunction: função para
calcular resumos de desempenho
alternativos;
selectionFunction: função para
escolha dos parâmetros de ajuste ideais;
returnResamp: string indicando
quantas métricas de desempenho
reamostradas devem ser salvar, pode
assumir os
valores: "final","all" e "none".;
savePredictions: indicador de quanto
das predições hold-out para cada

reamostragem devem ser salvas. Os

possíveis valor são  "all"(equivalente a Informe-se por mei


TRUE),  "none"(equivalente a FALSE) nossa newsletter!
e  "final", que salva as predições dos
parâmetros de ajuste ideais. Nome*

allowParallel: argumento lógico que


Email*
informa de função deve usar
processamento paralelo. Interesse*

A função abrange outras opções que podem


Assine
ser consultadas a partir do seu help (?
trainControl).

Métricas de Desempenho Alternativas

Como
Este site padrão, para
utiliza cookies problemas
para fornecer a melhorde regressão
experiência aos seus usuários.
Entendi!
as métricas RMSE,  R2R2  e o Erro Médio
Absoluto são calculadas, enquanto que em
Termos de Privacidade
problemas de classificação as métricas

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 14/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

calculdas são a Acurácia e Kappa. Para a


escolha dos parâmetros de ajuste ideais são
usados o RMSE e a Acurácia, porém,
utilizando o argumento  metric  dentro da
função  train, o usuário pode modificar a
medida de desempenho analisada para
escolher o parâmetro ótimo. Se nenhuma
dessas métricas são satisfatórias, o usuário
pode modificar os resumos de perfomance
calculados a partir do
argumento  summaryFunction  da
função  trailControl. O argumento deve
conter uma função com alguns atributos
obrigatórios. Essa função pode ser uma
função pronta, como
a  twoClassSummary  que será usada a

seguir, ou uma criada pelo usuário, para


saber mais sobre isso acesse  aqui Informe-se por mei
[http://topepo.github.io/caret/model- nossa newsletter!
training-and-tuning.html#alternate-
performance-metrics] . Nome*

Como padrão, a função  train  avalia Email*

modelos de classificação a partir das


Interesse*
classes preditas. No entanto, as
probabilidades das classes também podem
ser usadas para calcular medidas de Assine

desempenho. Para obtê-las,o


argumento classProbs em trainControl deve
ser definido como TRUE.

Ilustrando, iremos
Este site utiliza cookies refazer
para fornecer o exemplo
a melhor experiência aos seus usuários.
Entendi!
introdutório, mas agora utilizando a
função  twoClassSummary, que irá
Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 15/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

computar a sensibilidade, especificidade e


área sob a curva ROC.

fitControl <- trainControl(metho


numbe
repea
# est
clas
# ava
summa

set.seed(13)

rf_fit_3 <- train(Class ~ ., dat


method = "rf",
trControl = fit
tuneGrid = rfGr
# especificando

metric = "ROC"

rf_fit_3
Informe-se por mei
nossa newsletter!

Nome*
## Random Forest

##
Email*
## 208 samples

## 60 predictor

Interesse*
## 2 classes: 'M', 'R'

##
## No pre-processing
Assine
## Resampling: Cross-Validated
## Summary of sample sizes: 167
## Resampling results across tun
##
## mtry ROC Sens
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
## 2 0.9383772 0.9260079

Entendi!
## 3 0.9354172 0.9095652
## 4 0.9338076
Termos de 0.9205534
Privacidade
## 5 0.9358154 0.9007115
https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 16/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

## 6 0.9288594 0.9006324
## 7 0.9291813 0.8989723
## 8 0.9292710 0.9042688
##
## ROC was used to select the op
## The final value used for the

Escolhendo Modelo Final

É possível modificar o algorítmo que


seleciona os melhores valores dos
parâmetros de ajuste. Como padrão, a
função train  escolhe o modelo com maior
valor da métrica de desempenho principal
como o modelo final (ou com o menor valor,
no caso da medida de perfomance ser o

Erro Quadrático Médio). Em contrapartida, a

partir do Informe-se por mei


argumento selectionFunction dentro da nossa newsletter!
função  train  o usuário pode especificar
uma função para determinar o modelo final. Nome*
O pacote  caret  já abrange 3
Email*
funções: best que escolhe o modelo a partir
do maior/menor valor da métrica, oneSE que
Interesse*
se baseia na ideia da regra do erro padrão
de  Breiman et al (1984)
Assine
[https://books.google.com.br/books/about/Classific
id=JwQx-WOmSyQC&redir_esc=y&hl=pt-BR]
(melhor descrita  aqui
[http://topepo.github.io/caret/model-
training-and-tuning.html#choosing-the-final-
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!
model] ) e  tolerance  que seleciona o
modelo menos complexo dentro de uma
Termos de Privacidade
tolerância percentual do melhor valor.

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 17/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

Extraindo previsões e probabilidades de


classe

O objeto retornado pela


função  train  possui um subobjeto
chamado  finalModel  que contém o
modelo final “otimizado”, aquele em que os
parâmetros de ajuste proporcionaram a
melhor métrica. É apartir dele que previsões
em novos bancos de dados podem ser
feitos. Quando vamos predizer a partir de um
modelo, geralmente especificamos o
argumento  type. No caso da
função  predict  aplicada a um objeto de
classe train as opções do
argumento  type  são padronizadas para
ser  raw  ou  prob. Como será mostrado no

código abaixo, ao utilizar  raw  a função


retorna a classe predita, enquanto que, ao Informe-se por mei
usar prob a função retorna a probabilidade nossa newsletter!
de cada nível do fator associado a cada
elemento. Nome*

Email*
# nesse caso utilizaremos o mesm
predict(rf_fit_3, newdata = Sona Interesse*

Assine

## [1] R R R R R R

## Levels: M R

Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!

predict(rf_fit_3, newdata = Sona


Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 18/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

## M R

## 1 0.174 0.826

## 2 0.204 0.796

## 3 0.250 0.750

## 4 0.166 0.834

## 5 0.176 0.824

## 6 0.170 0.830

Modelos
Após a apresentação do funcionamento da
função  train  para o ajuste de modelos,
iremos construir alguns modelos de Machine
Learning utilizando o pacote  caret. Para
isso, será utilizado o banco de

dados  PimaIndiansDiabetes2  do

pacote  mlbench  para solucionar o


problema de classificação em questão. A Informe-se por mei
base possui 8 atributos de mulheres com nossa newsletter!
herança indígena do grupo Pima e a suas
Nome*
classsificações quanto ao resultado de teste
para diabetes. Sendo assim, a ideia é Email*
predizer o resultado do teste de acordo com
as observações de cada mulher. Cada Interesse*

modelo será ajustado em uma base treino e,


em seguida, aplicado em uma base teste Assine
para calcular medidas de performance
(usando a função definida abaixo). Para essa
divisão, será utilizada a
função  createDataPartition  do
pacote  caret,
Este site utiliza quefornecer
cookies para permite
a melhoraexperiência
divisãoaosdo
seus usuários.
Entendi!
banco de dados com uma distribuição
semelhante da variávelTermos
fornecida
de (outcome).
Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 19/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

data(PimaIndiansDiabetes2)

dados <- PimaIndiansDiabetes2 %>

set.seed(13)

split <- createDataPartition(dad


treino <- dados[ split,]

teste <- dados[-split,]

metricas <- function(mod, classi

labels <- as.factor(teste$diab


matriz_confusao <- confusionMa
acuracia<- round(as.numeric(ma
sensibilidade <- round(as.nume
especificidade <- round(as.num
auc <- pROC::roc(labels, prob

tabela <- data.frame(Acuracia


Sensibili Informe-se por mei
Especific nossa newsletter!
AUC = auc
Nome*
return(tabela)

} Email*

ponto_corte <- round(table(trein Interesse*

Assine
Regressão Logística

A Regressão Logística é uma técnica


estatística utilizada em problemas de
classificação, que tem como objetivo
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!
mensurar a probabilidade associada à
ocorrência de determinado evento a partir
Termos
dos valores de variáveis de Privacidade
explicativas, que

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 20/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

podem ser categóricas ou contínuas. Esse


método é análogo à regressão linear, no
entanto é utilizado quando a variável
resposta é categórica, podendo ser binária
(Regressão Logística Binomial) ou
categórica ordenada/desordenada
(Regressão Logística Ordinal/Multinomial)
com mais de 2 níveis.

Nesse artigo será abordado exclusivamente


o caso em que a variável resposta é binária.
Um modelo de regressão logística ajusta o
log da razão de chances, que nada mais é
que a razão entre a probabilidade do seu
evento de interesse (θiθi) e a probabilidade
de não ocorrência desse evento (1−θi1−θi).

Sendo assim, o modelo pode ser expresso

por:
Informe-se por mei
nossa newsletter!

Nome*

Email*

Interesse*

Assine

Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!

Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 21/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

Como é possível notar na segunda


expressão, a regressão logística utiliza a
função logística para representar a relação
entre a variável dependente e as preditoras.
Dessa forma, os valores previstos assumem
valores entre 0 e 1, que representam a
probabilidade do evento de interesse.
Diferentemente da regressão linear, nesse
caso o método da máxima verossimilhança
é utilizado para estimar os coeficientes do
modelo.

Informe-se por mei


nossa newsletter!

Nome*

Email*

Interesse*

Assine
Por fim, a conclusão é de que a razão de
chance indica proporcionalmente o quanto a
ocorrência do evento de interesse é mais
provável do que sua não ocorrência, isso de
acordo com
Este site utiliza cookiesos valores
para fornecer das
a melhor variáveis
experiência aos seus usuários.
Entendi!
explicativas aplicados na expressão a baixo.

Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 22/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

Após essa breve explicação da técnica,


podemos ajustá-la a partir da função train
do pacote caret, como mostrado no código
a seguir.

set.seed(13)

Informe-se por mei


modelo_glm <- train(
nossa newsletter!
diabetes ~ .,

data = treino,

Nome*
method = "glm",

family = "binomial",
Email*
metric="ROC",

trControl=trainControl(

Interesse*
method = "cv",

number = 5,

classProbs = TRUE,
Assine

summaryFunction = twoClassSu
savePredictions = "final"

)
)
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!
modelo_glm

Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 23/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

## Generalized Linear Model

##
## 295 samples

## 8 predictor

## 2 classes: 'neg', 'pos'

##
## No pre-processing

## Resampling: Cross-Validated
## Summary of sample sizes: 237
## Resampling results:

##
## ROC Sens Spec
## 0.8202271 0.8826923 0.53

summary(modelo_glm)

Informe-se por mei


nossa newsletter!
##
## Call:

Nome*
## NULL
## Email*
## Deviance Residuals:

## Min 1Q Median
Interesse*
## -2.7508 -0.6593 -0.3750
##
## Coefficients:
Assine
## Estimate Std. E
## (Intercept) -10.223330 1.43
## pregnant 0.030778 0.0
## glucose 0.036761 0.0
## pressure -0.002526 0.0
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!
## triceps 0.005621 0.0
## insulin 0.001307 0.0
## mass 0.085740
Termos de Privacidade0.03
## pedigree 1.563650 0.5
https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 24/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

## age 0.025787 0.02


## ---
## Signif. codes: 0 '***' 0.00
##
## (Dispersion parameter for bin
##
## Null deviance: 375.08 on
## Residual deviance: 260.81 on
## AIC: 278.81

##
## Number of Fisher Scoring iter

probs_glm <- predict(modelo_glm


classificacao_glm <- as.factor(i
metricas_glm <- metricas(modelo_

metricas_glm

Informe-se por mei


nossa newsletter!
## Acuracia Sensibilidade Espe
## 1 0.773 0.846 Nome*

Email*

O código acima pode ser detalhado tendo Interesse*

em vista seus argumentos:


Assine
a fórmula  diabetes ~ .  indica que
estamos tentando predizer a
variável  diabetes  a partir das demais
variáveis do banco;
a partir do argumento  data  informamos
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!
o banco em que será treinado o modelo;
a fim de ajustar umTermos
modelode
de Privacidade
regressão
logística os
https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 25/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

argumentos method="glm" e family="binom
utilizados;
o ajuste dessa regressão logística não
envolve parâmetros de melhoria do
modelo, logo não foi utilizado o
argumento  tuneGrid  nem a
função expand.grid;
o argumento  metric="ROC"  informa
que a área sobre a curva ROC será usada
para avaliar o melhor modelo;
a função  trainControlpassada ao
argumento  trControl  especifica que o
método de reamostragem 5-Fold Cross-
Validation (method = "cv",number
number =
5) será utilizado, que outras medidas de

resumo como especificidade e

sensibilidade serão calculadas


Informe-se por mei
(summaryFunction =
nossa newsletter!
twoClassSummary) e outros detalhes.
Nome*
Esse modelo construído possui todas
variáveis explicativas do banco, sem avaliar Email*

se elas são significativas ou não. No entanto,


o pacote  caret  também possui o método Interesse*

"glmStepAIC", que nada mais é do que o


ajuste de uma regressão logística Assine

implementando o método Stepwise


utilizando o Critério de Informação de Akaike
para a seleção do melhor modelo. Nessa
caso, no ajuste foi utilizado os argumentos
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.

method="glmStepAIC"  e  trace=FALSE, Entendi!


esse último que
suprime as saídas
Termos
automaticas ao rodar de Privacidade
o código (cada
iteração testada).
https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 26/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

set.seed(13)

modelo_glm2 <- train(

diabetes ~ .,

data = treino,

method = "glmStepAIC",

family = "binomial",

metric=c("ROC"),

trControl=trainControl(

method = "cv",

number = 5,

classProbs = TRUE,

summaryFunction = twoClassSu
savePredictions = "final"

),
trace = FALSE

modelo_glm2
Informe-se por mei
nossa newsletter!

Nome*
## Generalized Linear Model with
##
Email*
## 295 samples

## 8 predictor

Interesse*
## 2 classes: 'neg', 'pos'

##
## No pre-processing
Assine
## Resampling: Cross-Validated
## Summary of sample sizes: 237
## Resampling results:

##
## ROC Sens Spec
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!
## 0.837833 0.8929487 0.542

Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 27/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

summary(modelo_glm2)

##
## Call:

## NULL
##
## Deviance Residuals:

## Min 1Q Median
## -2.8644 -0.6582 -0.3821
##
## Coefficients:

## Estimate Std. E
## (Intercept) -10.593366 1.32
## glucose 0.039101 0.0
## mass 0.091169 0.02

## pedigree 1.559613 0.4

## age 0.032201 0.0


## --- Informe-se por mei
## Signif. codes: 0 '***' 0.00 nossa newsletter!
##
## (Dispersion parameter for bin Nome*
##
## Null deviance: 375.08 on Email*
## Residual deviance: 261.82 on
## AIC: 271.82
Interesse*
##
## Number of Fisher Scoring iter
Assine

probs_glm <- predict(modelo_glm2


classificacao_glm <- as.factor(i
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!
metricas_glm <- metricas(modelo_
metricas_glm
Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 28/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

## Acuracia Sensibilidade Espe


## 1 0.794 0.862

A fim de calcular a importância de cada


variável no modelo de regressão logística
pode-se utilizar a função  varImp, que
fornece uma medida de importância a partir
do valor absoluto da estatística-t para cada
parâmetro do modelo.

importancia_var <- varImp(modelo

ggplot(importancia_var) +

labs(title = "Importância das

Informe-se por mei


nossa newsletter!

Nome*

Email*

Interesse*

Assine

Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!

Random Forest Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 29/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

O  Random Forest  é um algoritmo de


aprendizado de máquinas supervisionado,
usado em problemas de classificação e
regressão, pautado em 2 técnicas principais:
a de  árvores de decisão  e a de  bagging,
ou boostrap aggregating.

O algoritmo consiste na construção de um


número grande de árvores de decisão não
correlacionadas, que no final serão usadas
para a construção de um modelo final. Por
ser um método ensemble, ou seja, que
combina diferentes modelos para a
obtenção de um modelo final, é um
algoritmo mais robusto e complexo, exigindo
maior tempo computacional, mas

geralmente alcançando melhores

resultados.
Informe-se por mei
O primeiro passo do algoritmo é criar, nossa newsletter!
aleatoriamente, amostras do banco de
dados. Nesse processo, é utilizado o método Nome*

de reamostragem  bootstrap, em que são


Email*
seleciconadas amostras com reposição dos
elementos.
Interesse*

A partir disso, para cada amostra criada,


uma árvore de decisão é modelada. No caso Assine

do modelo  Random Forest, nem todas


variáveis são consideradas para a divisão de
um nó, o que é feito é a seleção aleatória
de  m variáveis (parâmetro mtry ao modelar
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.

com train), que são testadas para verificar Entendi!


qual será a melhor para a separação do nó.
Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 30/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

Este processo se repete na construção de


todas as árvores para as diferentes

amostras, garantindo aleatoridade durante


a construção do modelo e a redução da Informe-se por mei
correlação entre as árvores construídas. nossa newsletter!
Uma vez que todas árvores foram
Nome*
modeladas, calcula-se uma predição final
tendo como base as predições de todas as Email*
árvores, por isso o termo  agregating.Essa
predição é ponderada pelo erro preditivo de Interesse*

cada árvore, ou seja, árvores com menor


erro preditivo têm mais peso na decisão. Assine

Utilizando a função  train  do


pacote  caret  é possível ajustar o modelo
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!
random forest a partir do código a seguir:

Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 31/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

set.seed(13)

modelo_random_forest <- train(

diabetes ~ .,

data = treino,

method = "rf",

tuneGrid = expand.grid(mtry=2
metric="ROC",

trControl=trainControl(

method = "cv",

number = 5,

classProbs = TRUE,

summaryFunction = twoClassSu
savePredictions = "final"

)
)

modelo_random_forest

Informe-se por mei


nossa newsletter!
## Random Forest

Nome*
##
## 295 samples

Email*
## 8 predictor

## 2 classes: 'neg', 'pos'

Interesse*
##
## No pre-processing

## Resampling: Cross-Validated Assine


## Summary of sample sizes: 237
## Resampling results across tun
##
## mtry ROC Sens
## 2 0.8284853 0.8930769
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
## 3 0.8193524 0.8879487

Entendi!
## 4 0.8170329 0.8828205
## 5 0.8212117
Termos de 0.8930769
Privacidade
## 6 0.8290452 0.8779487
https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 32/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

## 7 0.8242304 0.8779487
## 8 0.8208794 0.8778205
##
## ROC was used to select the op
## The final value used for the

probs_rf <- predict(modelo_rando


classificacao_rf <- as.factor(i
metricas_rf <- metricas(modelo_r
metricas_rf

## Acuracia Sensibilidade Espe


## 1 0.804 0.862

Informe-se por mei


Detalhando o código, temos que: nossa newsletter!

a fórmula  diabetes ~ .  indica que Nome*

estamos tentando predizer a


Email*
variável  diabetes  a partir das demais
variáveis do banco;
Interesse*
a partir do argumento  data  informamos
o banco em que será treinado o modelo;
Assine
a fim de ajustar um modelo Random
Forest o argumento  method="rf"  foi
utilizado;
os parâmetros de ajuste que serão
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
testados foram especificados no

Entendi!
argumento  tuneGrid  a partir da
função expand.grid; Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 33/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

o argumento  metric="ROC"  informa


que a área sobre a curva ROC será usada
para avaliar o melhor modelo/parâmetro
de ajuste;
a função  trainControlpassada ao
argumento  trControl  especifica que o
método de reamostragem 5-Fold Cross-
Validation (method = "cv",number
number =
5) será utilizado, que outras medidas de
resumo como especificidade e
sensibilidade serão calculadas
(summaryFunction =
twoClassSummary) e outros detalhes.

Por ser um modelo ensemble o random


forest não tem uma interpretação clara


como na árvore de decisão, no entanto é


possível calcular uma medida de Informe-se por mei
importância de cada variável no modelo final nossa newsletter!
utilizando a função  varImp. Essa medida é
baseada na redução da soma de quadrados Nome*

dos resíduos de cada divisão e te permite Email*


uma análise de quais variáveis são mais
importantes na classificação, podendo ser Interesse*
usada para seleção de variáveis para outros
modelos.
Assine

importancia_var <- varImp(modelo

ggplot(importancia_var) +

labs(title
Este site = "Importância
utiliza cookies para fornecer das
a melhor experiência aos seus usuários.
Entendi!

Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 34/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

Support Vector Machine

Support Vector Machine(SVM), ou Máquina


de Vetores de Suporte, é uma técnica de
aprendizado supervisionado utilizado em
problemas de classificação e regressão, e
para detectação de outliers. A ideia é que, a
partir de um banco treino, o algoritmo
reconheça padrões das variáveis presentes
no modelo e construa uma separação no
espaço entre as duas possíveis
classificações dos elementos. Dessa forma,
o SVM toma como entrada um novo
elemento e consegue predizer sua classe, o
que o faz um classificador linear não-
probabilístico.

Sendo assim, o objetivo do algoritmo é


encontrar um hiperplano, em um espaço N Informe-se por mei
dimensional(sendo N o número de variáveis nossa newsletter!
presentes no modelo), que separe os dados
Nome*
de acordo com suas classificações. No
entanto, existem vários hiperplanos que Email*
dividem os dados pela sua classe. A ideia é
encontrar o hiperplano com uma divisão tão Interesse*

ampla quanto possível, ou seja, que possui a


margem máxima, fornecendo, assim, algum Assine
reforço para que os pontos de dados futuros
possam ser classificados com maior
confiança. Vale ressaltar que é possível
encontrar uma divisão perfeita para as
classes, porém
Este site utiliza issofornecer
cookies para não aimplica em poder
melhor experiência aos seus usuários.
Entendi!
preditivo. Assim como em uma regressão
nós evitamos o overfitting, nesse
Termos decaso o ideal
Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 35/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

é um hiperplano que promova uma divisão


generalizada.

Os vetores de suporte são os pontos que


estão mais próximos do hiperplano, sendo
responsáveis pela posição e inclinação dele.
Usando esses vetores é que maximizamos a
margem, que, por definição, é a distância
entre o vetor de suporte e o hiperplano.
Sendo assim, são os vetores de suporte que
auxiliam na construção do hiperplano, de
forma que as previsões dependem apenas
deles, e não do conjunto de treinamento.

Quando os dados são linearmente

separáveis o modelo usado é o SVM Linear


com margens rígidas, entretanto a maioria Informe-se por mei
das separações exigem soluções mais nossa newsletter!
complexas.
Nome*
Nos casos em que os dados não são
linearmente separáveis devido a presença Email*

de ruídos/outiliers é utilizado o modelo SVM


Linear com margens suaves. Nesse caso, é Interesse*

permitido que alguns dados violem a


restrição do hiperplano, o que é controlado Assine

por uma constante C de penalização das


imprecisões na divisão.

Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!
Há ainda os problemas resolvidos a partir do
SVM Não Linear, quando é necessário
Termos de Privacidade
mapear o conjunto de treinamento de seu

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 36/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

espaço original (não linear) para um novo


espaço de maior dimensão, denominado
espaço de características (feature space),
que é linear. Para a transformação das
variáveis são utilizadas funções
matemáticas chamadas de  Kernels, e, como
consequência, o modelo terá um
parâmetro  sigma  que representa a
intesidade da transformação dos dados.

No exemplo abaixo o modelo SVM


construído utiliza tanto a constante C, para a
penalização das imprecisões na divisão,
quanto o valor  sigma  para representar a

intesidade da transformação dos dados.

Informe-se por mei


set.seed(13)

nossa newsletter!
modelo_svm <- train(

Nome*
diabetes ~ .,

data = treino,

Email*
method = "svmRadial",

tuneLength = 5,

Interesse*
metric="ROC",

trControl=trainControl(

method = "cv",
Assine
number = 5,

classProbs = TRUE,

summaryFunction = twoClassSu
savePredictions = "final"

)
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!
)

modelo_svm Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 37/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

## Support Vector Machines with


##
## 295 samples

## 8 predictor

## 2 classes: 'neg', 'pos'

##
## No pre-processing

## Resampling: Cross-Validated
## Summary of sample sizes: 237
## Resampling results across tun
##
## C ROC Sens
## 0.25 0.8034821 0.8367949
## 0.50 0.8026646 0.8725641
## 1.00 0.7892797 0.8828205
## 2.00 0.7703337 0.8726923

## 4.00 0.7644983 0.8778205

##
## Tuning parameter 'sigma' was Informe-se por mei
## ROC was used to select the op nossa newsletter!
## The final values used for the
Nome*

Email*

probs_svm <- predict(modelo_svm Interesse*


classificacao_svm <- as.factor(i
metricas_svm <- metricas(modelo_
metricas_svm Assine

## Acuracia Sensibilidade Espe


Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.

## 1 0.784 0.831 Entendi!

Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 38/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

O código acima pode ser detalhado com


respeito aos seus argumentos da seguinte
forma:

a fórmula  diabetes ~ .  indica que


estamos tentando predizer a
variável  diabetes  a partir das demais
variáveis do banco;
a partir do argumento  data  informamos
o banco em que será treinado o modelo;
a fim de ajustar um modelo SVM o
argumento  method="svmRadial"  foi
utilizado;
nesse caso optou-se por não especificar
os parâmetros de ajuste, mas, caso

queira, basta especificá-los no


argumento  tuneGrid  a partir da


função expand.grid; Informe-se por mei
nossa newsletter!
o argumento  metric="ROC"  informa
que a área sobre a curva ROC será usada
Nome*
para avaliar o melhor modelo/parâmetro
de ajuste; Email*

a função  trainControlpassada ao
Interesse*
argumento  trControl  especifica que o
método de reamostragem 5-Fold Cross-
Assine
Validation (method = "cv",number
number =
5) será utilizado, que outras medidas de
resumo como especificidade e
sensibilidade serão calculadas
(summaryFunction =
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!
twoClassSummary) e outros detalhes.

Termos
Assim como no modelo de Privacidade
Random Florest, a
técnica de SVM não possui uma
https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 39/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

interpretação clara da relação das variáveis


com a conclusão do ajuste. Sendo assim,
também é possível usar a
função  varImp  para avaliar a importância
de cada variável no modelo.

importancia_var <- varImp(modelo

ggplot(importancia_var) +

labs(title = "Importância das

Pacote caret Ensemble


Além do pacote  caret, existe o

pacote  caretEnsemble, que permite a


Informe-se por mei
criação de ensembles utilizando modelos
nossa newsletter!
construídos pelo caret.
Nome*
caretList
Email*
A função caretList desse pacote permite
a criação de vários modelos utilizando o Interesse*
mesmo banco de dados e os mesmos
parâmetros de reamostragem. Ela
Assine
praticamente possui os mesmos
argumentos da função train.

Existem duas maneiras de especificar quais


modelos você deseja ajustar utilizando essa
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!
função.Na primeira forma, basta informar a
partir do argumento  methodList  um vetor
de caracteres contendoTermos
os de Privacidade
modelos que

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 40/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

serão ajustados, utilizando os parâmetros


padrões da função train.

set.seed(13)

modelos_methodList <- caretEnsem


diabetes ~ .,

data = treino,

metric=c("Accuracy","ROC"),

trControl=trainControl(

method = "cv",

number = 5,

classProbs = TRUE,

summaryFunction = twoClassSu
savePredictions = "final"

),
methodList=c("glm", "rf","svmR

modelos_methodList Informe-se por mei


nossa newsletter!

Nome*

## $glm
Email*
## Generalized Linear Model

##
Interesse*
## 295 samples

## 8 predictor

## 2 classes: 'neg', 'pos'


Assine
##
## No pre-processing

## Resampling: Cross-Validated
## Summary of sample sizes: 236
## Resampling results:

Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
##

Entendi!
## ROC Sens Spec
## 0.8299055 Termos 0.8932051 0.57
de Privacidade
##
https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 41/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

##
## $rf
## Random Forest

##
## 295 samples

## 8 predictor

## 2 classes: 'neg', 'pos'

##
## No pre-processing

## Resampling: Cross-Validated
## Summary of sample sizes: 236
## Resampling results across tun
##
## mtry ROC Sens
## 2 0.8117679 0.8580769
## 5 0.8004184 0.8529487
## 8 0.7976721 0.8578205
##

## ROC was used to select the op

## The final value used for the


## Informe-se por mei
## $svmRadial
nossa newsletter!
## Support Vector Machines with
## Nome*
## 295 samples

## 8 predictor
Email*
## 2 classes: 'neg', 'pos'

## Interesse*
## No pre-processing

## Resampling: Cross-Validated
## Summary of sample sizes: 236 Assine

## Resampling results across tun


##
## C ROC Sens
## 0.25 0.8128070 0.8379487
##
Este 0.50
site utiliza 0.8102159
cookies para 0.8733333
fornecer a melhor experiência aos seus usuários.
Entendi!
## 1.00 0.7969501 0.8633333
##
## Tuning parameter Termos'sigma'
de Privacidadewas
## ROC was used to select the op
https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 42/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

## The final values used for the


##
## attr(,"class")

## [1] "caretList"

Com a outra alternativa, utilizando o


argumento  tuneList, é possível
personalizar como cada modelo será
construído. Para isso, basta indicar uma lista
dos modelos definidos a partir da
função  caretModelSpec, no qual você
especifica o modelo a ser construído e
outras informações, como mostrado abaixo.

set.seed(13)

modelos_tuneList <- caretEnsemb Informe-se por mei


diabetes ~ .,

nossa newsletter!
data = treino,

metric=c("Accuracy","ROC"),

Nome*
trControl=trainControl(

method = "cv",

Email*
number = 5,

classProbs = TRUE,

Interesse*
summaryFunction = twoClassSu
savePredictions = "final"

), Assine
tuneList = list(

glm = caretEnsemble::caretMo
method = "glm",

family = "binomial"

),
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!
rf = caretEnsemble::caretMod
method = "rf",

tuneGrid Termos = expand.grid(

de Privacidade
mtry = 2:8

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 43/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

)
),
svm = caretEnsemble::caretMo
method = "svmRadial",

tuneLength = 5

)
)
)

modelos_tuneList

## $glm
## Generalized Linear Model

##
## 295 samples

## 8 predictor

## 2 classes: 'neg', 'pos'

## Informe-se por mei


## No pre-processing

nossa newsletter!
## Resampling: Cross-Validated
## Summary of sample sizes: 236
Nome*
## Resampling results:

## Email*
## ROC Sens Spec
## 0.8299055 0.8932051 0.57
Interesse*
##
##
## $rf Assine
## Random Forest

##
## 295 samples

## 8 predictor

## 2 classes: 'neg', 'pos'

Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!
##
## No pre-processing

## Resampling: Termos Cross-Validated


de Privacidade
## Summary of sample sizes: 236
https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 44/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

## Resampling results across tun


##
## mtry ROC Sens
## 2 0.8080634 0.8528205
## 3 0.8078036 0.8529487
## 4 0.8021491 0.8578205
## 5 0.8046188 0.8528205
## 6 0.8008198 0.8529487
## 7 0.7992510 0.8580769
## 8 0.8004521 0.8629487
##
## ROC was used to select the op
## The final value used for the
##
## $svm
## Support Vector Machines with
##
## 295 samples

## 8 predictor

## 2 classes: 'neg', 'pos'

## Informe-se por mei


## No pre-processing
nossa newsletter!
## Resampling: Cross-Validated
## Summary of sample sizes: 236 Nome*
## Resampling results across tun
## Email*
## C ROC Sens
## 0.25 0.8091903 0.8328205 Interesse*
## 0.50 0.8063225 0.8833333
## 1.00 0.7918219 0.8582051
## 2.00 0.7693995 0.8532051 Assine

## 4.00 0.7531444 0.8732051


##
## Tuning parameter 'sigma' was
## ROC was used to select the op
##
Este The cookies
site utiliza final values
para fornecer used
a melhor foraosthe
experiência seus usuários.
Entendi!
##
## attr(,"class")

## [1] "caretList" Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 45/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

Em ambos casos é possível acessar cada


modelo separadamente utilizando
lista_modelos$nome_modelo_especifico.

modelos_methodList$glm

## Generalized Linear Model

##
## 295 samples

## 8 predictor

## 2 classes: 'neg', 'pos'

##
## No pre-processing

## Resampling: Cross-Validated

## Summary of sample sizes: 236


## Resampling results:
Informe-se por mei
##
nossa newsletter!
## ROC Sens Spec
## 0.8299055 0.8932051 0.57
Nome*

Email*

É relevante ressaltar a importância de, ao


Interesse*
utilizar a função  caretlist, especificar
explicitamente os índices de reamostragem
Assine
a partir do
argumento index=createResample(variável
resposta, number).Isso se deve ao fato
de que a função  caretList  tentará definir
os índices automaticamente, mas como não
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!
é uma garantia de sucesso, é uma boa
prática definí-los “manualmente”. A garantia
Termos de Privacidade
de que os modelos serão construídos

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 46/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

utilizando os mesmos índices é essencial


principalmente caso você vá realizar um
ensemble com essa lista de modelos.

caretEnsemble

A função  caretEnsemble  usa como


método o glm para criar uma junção linear
simples dos modelos. Um conjunto de
modelos é um bom candidato para realizar o
ensemble quando eles são não
correlacionados mas possuem AUCs
similares.

Para checar a correlação entre modelos


basta usar a função  modelCor  juntamente
com a função  resamples, ambas do

pacote caret. Nesse caso, como você pode

ver abaixo, os modelos são fortemente Informe-se por mei


correlacionados, mas ainda assim será feito nossa newsletter!
a demonstração do ajuste do ensemble
utilizando a lista de Nome*
modelos modelos_methodList construída
Email*
anteriormente (também seria possível
realizar o ensemble
Interesse*
utilizando modelos_tuneList).

Assine
modelCor(resamples(modelos_metho

## glm r
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!
## glm 1.0000000 0.957105
## rf 0.9571054 1.000000
Termos de 0.959998
## svmRadial 0.8905367 Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 47/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

ensemble_methodList <- caretEnse


modelos_methodList,

metric=c("Accuracy","ROC"),

trControl=trainControl(

classProbs = TRUE,

summaryFunction = twoClassSu
savePredictions = "final"

))

summary(ensemble_methodList)

## The following models were en


## They were weighted:

## 2.4387 -4.6363 -1.7467 1.4803

## The resulting ROC is: 0.7924

Informe-se por mei


## The fit for each individual m
## method ROC ROC nossa newsletter!
## glm 0.8299055 0.048383
## rf 0.8117679 0.06767 Nome*

## svmRadial 0.8128070 0.061133


Email*

Interesse*

Nesse caso o ensemble não provocou uma


melhora no AUC, mas em muitos casos pode Assine
obter melhores resultados.

caretStack

A função  caretStack  te permite criar


Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!
combinações lineares ou não lineares de
modelos construídos a partir da
função train, criandoTermos de Privacidade
um modelo final por

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 48/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

qualquer método compatível com o


pacote caret.

ensemble_caret_stack <- caretEn

ensemble_caret_stack

## A glmnet ensemble of 3 base m

##
## Ensemble results:

Informe-se por mei


## glmnet

nossa newsletter!
##
## 295 samples

Nome*
## 3 predictor

## 2 classes: 'neg', 'pos'

Email*
##
## No pre-processing

Interesse*
## Resampling: Bootstrapped (25
## Summary of sample sizes: 295
## Resampling results across tun Assine
##
## alpha lambda ROC
## 0.10 0.0005156076 0.8195
## 0.10 0.0051560761 0.825
## 0.10 0.0515607609 0.829
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
## 0.55 0.0005156076 0.819

Entendi!
## 0.55 0.0051560761 0.826
## 0.55 0.0515607609
Termos de Privacidade 0.829
## 1.00 0.0005156076 0.8193
https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 49/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

## 1.00 0.0051560761 0.826


## 1.00 0.0515607609 0.829
##
## ROC was used to select the op
## The final values used for the

Curiosidade
O pacote caret  é um dos pacotes mais
populares para modelagem preditiva e
aprendizado supervisionado. Isso porque o
pacote fornece uma interface consistente
para todos os recursos de aprendizado de
máquina mais poderosos do R. Como
curiosidade, é possível comparar o número

de downloads do pacote caret com outros


pacotes também utilizados para ajustar


modelos de machine learning. Dessa forma, Informe-se por mei
no gráfico abaixo, é possível reparar que nossa newsletter!
desde de sua criação, em 2016, o caretfoi o
Nome*
pacote com mais downloads comparado
com algumas outras opções presentes no R. Email*

library(dlstats)
Interesse*

x <- cran_stats(c("caret","tidym Assine

if (!is.null(x)) {

head(x)

ggplot(x, aes(end, downloads,


geom_line() + geom_point(ae
Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
labs(x="Data",y="Downloads"
Entendi!
}
Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 50/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

4 DE OUTUBRO DE 2021 / POR ADILANE RIBEIRO DA SILVA

TAGS: CARET, MACHINE LEARNING, PACOTE

Compartilhe esse conteúdo!

    

Informe-se por mei


Talvez você goste dos artigos nossa newsletter!

Nome*

Uma visão Gtsummary:


geral sobre Uma visão Gtsummary: Email*
tabelas de
machine geral sobre resumo tabelas de
learning - machine prontas resumo
Classificação para Interesse*
learning - publicação prontas
Classificação para
publicação
Assine

O que está por Inteligência


trás dos O que estáartificial
por e Inteligência
sistemas de trás dos big data artificial e
recomendação? aplicados a
sistemas de big data
negócios
Este site utiliza cookies para fornecer a melhor experiência
recomendação? aos seus usuários.

aplicados Entendi!
a negócios

Pacote Pacote Termos de éPrivacidade


O que O que é
Highcharter Highcharter data data
no R science?
https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 51/52
10/12/2021 08:51 Modelos de Machine Learning utilizando o pacote Caret - Oper

no R science?

0
RESPOSTAS

Central de assinaturas

Informe-se por meio da nossa newsletter!

Nome*

Email*

Interesse*
Informe-se por mei
nossa newsletter!
Assine

Nome*
Enviaremos apenas conteúdo relevante! Ao assinar, você concorda com nossos termos de privacidade.
Email*

Interesse*
© Copyright - Oper - Feito com ♥ em Belo Horizonte   

Assine

Este site utiliza cookies para fornecer a melhor experiência aos seus usuários.
Entendi!

Termos de Privacidade

https://operdata.com.br/blog/modelos-de-machine-learning-utilizando-o-pacote-caret/ 52/52

Você também pode gostar