Вы находитесь на странице: 1из 60

Modelos Predictivos

con el paquete caret


VI Jornadas de Usuarios de R
Santiago de Compostela

Jess Herranz Valera


jesus.herranz@imdea.org
Instituto IMDEA Alimentacin
24 de octubre de 2014

ndice
 Bibliografa
 Introduccin al paquete caret
 Preprocesamiento de datos
 Modelos Predictivos. Clasificacin y Regresin
 Capacidad predictiva de un modelo
 Tcnicas de remuestreo. Validacin cruzada. Bootstrapping
 Funciones preProcess(), nearZeroVar(), findCorrelation()
 Funcin train()
 Funciones predict(), varImp()
 Otras funciones
Modelos Predictivos con caret

Bibliografa

Max Kuhn & Kjell Johnson. Applied Predictive Modeling. Springer, 2013

Max Kuhn. Building Predictive Models in R using the caret Package. Journal
of Statistical Software. Nov 2008 Vol. 28 5

Max Kuhn. A Short Introduction to the caret Package.


http://cran.r-project.org/web/packages/caret/index.html

La web del paquete caret: http://topepo.github.io/caret/

Modelos Predictivos con caret

Paquete caret

El nombre caret procede de Classification And REgression Training


Entrenamiento (construccin) de Modelos de Clasificacin y Regresin

caret es un paquete que contiene numerosas herramientas para desarrollar


y construir modelos predictivos usando otros paquetes de R

Se puede interpretar como un interfaz comn que llama a funciones de


otros paquetes de R que en la mayora de los casos son los que construyen
los modelos predictivos

caret permite estandarizar todas las entradas y salidas de estas funciones


Datos de entrada (dataframe, frmulas, matrices, .)
Parmetros de las funciones
Objetos y salidas que devuelven las funciones

Modelos Predictivos con caret

Paquete caret

El paquete caret contiene funciones para:


Pre-procesamiento de datos
Construccin y evaluacin de modelos con diferentes parmetros
Prediccin de nuevas observaciones
Evaluacin de la importancia de las variables
Visualizacin de modelos
Seleccin de variables (feature selection)

Adems, incorpora otras funciones de gran utilidad y completa algunas


funciones que no estaban en los paquetes originales

Modelos Predictivos con caret

Mtodos implementados en caret


Model

method
Type
Argum. Value

Packages

Tuning
Parameteres

Linear Regression

lm

Regr

None

Generalized Linear Model

glm

Dual

None

Linear Discriminant Analysis lda

Class MASS

None

Penalized Regression

glmnet

Dual

glmnet

alpha, lambda

Linear Regression with


Stepwise Selection

leapSeq

Regr

leaps

nvmax

Principal Component Analysis

pcr

Regr

pls

ncomp

Partial Least Squares

pls

Dual

pls

ncomp

Supervised Principal
Component Analysis

superpc

Regr

superpc

threshold,
n.components

k-Nearest Neighbors

kknn

Dual

kknn

kmax, distance,
kernel

Naive Bayes

nb

Class klaR

Modelos Predictivos con caret

fL, usekernel

Mtodos implementados en caret


Model

method
Type
Argum. Value

Tuning
Parameteres

Packages

Multi-Layer Perceptron

mlp

Dual

RSNNS

size

Neural Network

nnet

Dual

nnet

size, decay

CART

rpart

Dual

rpart

cp

Random Forest

rf

Dual

randomForest mtry

Support Vector Machines


with Linear Kernel

svmLinear

Dual

kernlab

Support Vector Machines with


Radial Basis Function Kernel

svmRadial

Dual

kernlab

sigma, C

Multivariate Adaptive
Regression Spline

earth

Dual

earth

nprune, degree

Generalized Additive Model

gam

Dual

mgcv

select, method

gbm, plyr

n.trees,
interaction.depth,
shrinkage

Stochastic Gradient Boosting

Modelos Predictivos con caret

gbm

Dual

Pre-procesamiento

Las tcnicas de pre-procesamiento de datos se refieren al tratamiento


previo de las observaciones y de las variables en el conjunto de datos antes
de la elaboracin de un modelo

Estandarizacin o normalizacin de variables


Centrado de la variable, restando la media
Escalado de la variable, dividiendo por la desviacin estndar
Una variable estandarizada tendr media 0 y desviacin estndar 1

Transformaciones para conseguir una distribucin simtrica


Familia de transformaciones de Box y Cox

x 1

0
x* =
log(x ) = 0
Modelos Predictivos con caret

Reduccin del conjunto de variables

Eliminar variables donde todas o la gran mayora de las observaciones


tienen un nico valor
zero variance predictors o near-zero variance predictors
Se pueden detectar comparando las frecuencias de la 1 y 2 categoras ms
numerosas. Tambin se debe comprobar que el nmero de valores distintos es
pequeo

Algunos conjuntos de datos contienen variables muy correlacionadas,


algunas de las cules se podran borrar:
Se pretende borrar el mnimo nmero de predictores de tal forma que todas las
correlaciones entre todas las variables restantes estn por debajo de un
determinado valor prefijado (threshold)
Se van borrando de forma iterativa mientras que queden variables con
correlaciones por encima del threshold. Se van seleccionando las dos variables
con mayor correlacin y entre ellas se borra la ms correlacionadas con el resto

Modelos Predictivos con caret

Aprendizaje Supervisado y No Supervisado

Las Tcnicas de Aprendizaje se usan para analizar grandes cantidades de


datos, extrayendo importantes patrones y tendencias
Se pretende conocer qu es lo que los datos dicen, y se usa el trmino
aprendiendo de los datos
Tcnicas de Machine Learning y Statistical Learning

En el Aprendizaje Supervisado el objetivo es predecir el valor de una


variable respuesta basado en numerosas variables de entrada, llamadas
variables predictoras
La variable a predecir supervisa el aprendizaje
Modelos Predictivos

En el Aprendizaje No Supervisado el objetivo es describir las relaciones y


patrones entre un conjunto de variables de entrada
Modelos Descriptivos

Modelos Predictivos con caret

10

Clasificacin y Regresin

La Clasificacin es la tcnica de Aprendizaje Supervisado en la que cada


observacin pertenece a una clase y el resto de variables son usadas para
predecir la clase a la que pertenecern nuevas observaciones
Modelos Predictivos con variable respuesta categrica
Normalmente, se generan dos tipos de predicciones: la clase predicha y
la probabilidad de pertenecer a cada una de las clases

La Regresin es la tcnica de Aprendizaje Supervisado que consiste en


aprender una funcin que asigna a cada observacin una prediccin en
forma de valor numrico
Modelos Predictivos con variable respuesta continua

Modelos Predictivos con caret

11

Evaluacin de Modelos

El objetivo general es evaluar la calidad de un modelo mediante su


capacidad predictiva
Medidas objetivas basadas en la comparacin de los valores
observados para la variable respuesta y los valores predichos por el
modelo

Un modelo predictivo pretende predecir el valor de la variable respuesta


para observaciones nuevas, a partir de los valores que presentan estas
observaciones en las variables predictoras

Si la evaluacin del modelo se hace sobre el propio conjunto de datos con


el que se ha construido el modelo, se produce un sobreajuste (overfitting)
Es necesario evaluar el modelo en un conjunto de datos diferente al
que se ha utilizado para construirlo
Se dice que se obtienen medidas de error honestas

Modelos Predictivos con caret

12

Medidas de la Capacidad Predictiva. Clasificacin

En el caso de una variable predictora categrica, se podra formar la


matriz de confusin o tabla de clasificacin
Predicho
Observ

Y=1

Y=2

Y=k

Y=1

F11

F12

F1k

Y=2

F21

F22

F2k

...

Y=k

Fk1

Fk2

Fkk

Las clasificaciones correctas son


las que estn en la diagonal

Las clasificaciones incorrectas son


las que estn fuera de la diagonal

Exactitud (Accuracy): proporcin de clasificaciones correctas

Error de clasificacin o tasa de error (Error rate): proporcin de


clasificaciones incorrectas
k

Accuracy =
Modelos Predictivos con caret

F
i =1

ii

Error Rate =

ij
i =1, j=1,i j

N
13

Medidas de la Capacidad Predictiva. Clasificacin

En el caso de una variable respuesta binaria con clases 0 y 1, y asumiendo


que la categora 1 es el evento de inters, la tabla de clasificacin sera:
Predicho
Observado

Y=1

Y=0

Total

Y=1

VP

FN

VP + FN

Y=0

FP

VN

FP + VN

Total

VP + FP

FN + VN

VP = Verdaderos Positivos
VN = Verdaderos Negativos
FP = Falsos Positivos
FN = Falsos Negativos

Sensibilidad: es la capacidad de un modelo para detectar los verdaderos


positivos (VP)

Especificidad: es la capacidad de un modelo para detectar los verdaderos


negativos (VN)

VP
Sensibilid ad =
VP + FN
Modelos Predictivos con caret

VN
Especificidad =
VN + FP
14

Medidas de la Capacidad Predictiva. Curvas ROC

Las curvas ROC se utilizan para evaluar la capacidad predictiva de un


predictor continuo en un problema de clasificacin con dos clases
Se consideran todos los valores del predictor continuo como puntos de corte
para definir predictores binarios, para los cules se puede calcular la
sensibilidad y especificidad
Las probabilidades predichas por un modelo pueden ser consideradas como
un predictor continuo

La curva ROC se define con los puntos


( 1 especificidad, sensibilidad )

El rea bajo la curva (AUC) es


considerado como una medida de la
capacidad predictiva del predictor
Un predictor ideal tendra AUC = 1
Un predictor que predice de forma
aleatoria tendra AUC = 0.5

Modelos Predictivos con caret

15

Medidas de la Capacidad Predictiva. Regresin

En Regresin, las medidas de capacidad predictiva de un modelo se basan


en los residuos, diferencias entre los valores observados y predichos

El error cuadrtico medio (MSE, mean squared error) y su raz cuadrada

1 N
MSE = ( y i y i ) 2
N i =1

RMSE = MSE

El coeficiente de determinacin es una medida del ajuste del modelo y es


la proporcin de variabilidad de la variable respuesta explicada por el
modelo ajustado
R2 =

SSR
SST

(
)
y

y
i
=
2
(y i y )

= 1

ei

(y

y)

0 < R2 < 1. R2 = 1 significa un ajuste perfecto y R2 = 0 un ajuste nulo


Modelos Predictivos con caret

16

Mtodos de Estimacin. Training y Testing

Un mtodo para obtener una estimacin honesta de la capacidad


predictiva de un modelo es dividir la muestra original en dos submuestras:
1. Una muestra de entrenamiento (training set) que se usa para la
construccin del modelo
2. Una muestra de validacin (testing set) donde se realizan las
predicciones y donde se evala la capacidad predictiva del modelo

La particin se debe hacer de forma aleatoria

Se usa con muestras suficientemente grandes


Si la muestra es pequea, todas las observaciones son necesarias para construir
el modelo
La muestra de testing no tiene precisin suficiente para evaluar el modelo

Modelos Predictivos con caret

17

Tcnicas de remuestreo. Validacin Cruzada

El mtodo de Validacin Cruzada (Cross-validation, CV) consiste en


dividir de forma aleatoria la muestra en K subconjuntos de similar
tamao, y ajustar K modelos, dejando cada vez una particin como
conjunto de testing, y construyendo el modelo con las K-1 restantes
La estimacin del error se calcula como promedio de los K errores evaluados
en las muestras de testing de las K particiones

El nmero K de particiones (folds) se elige dependiendo del tamao de la


muestra. Se suele elegir K=10 (10-fold CV) o K=5
Se puede repetir varias veces el proceso de validacin cruzada. Por ejemplo, si
se repite 10 veces: 10 times 10-fold CV

Cuando el nmero de particiones en el proceso de validacin cruzada es


K=N, el mtodo se llama leave-one-out (LOOCV) porque se construyen N
modelos, y en cada uno de ellos se queda fuera una nica observacin
como muestra de testing. Se suele usar en muestras pequeas

Modelos Predictivos con caret

18

Tcnicas de remuestreo. Validacin Cruzada


Training
Modelo 1

5-fold CV
Testing

Evaluacin

Muestra

..

(K=5 particiones)

Particin
aleatoria
Training
Modelo 5

Testing

Modelos Predictivos con caret

Evaluacin

19

Tcnicas de remuestreo. LOOCV


Muestra
de Training

Construccin

Muestra
de testing

Muestra 1

N-1

Modelo 1

obs. 1

Y
1

Y1

Muestra 2

N-1

Modelo 2

obs. 2

Y
2

Y2

..
Muestra N

Modelos Predictivos con caret

N-1

(N particiones)

Modelo N

Evaluacin

obs. N

Y
N

YN

20

Tcnicas de remuestreo. Bootstrapping

Es un mtodo de remuestreo que se suele utilizar en muestras pequeas

Se elige una muestra aleatoria con reemplazamiento de tamao N para la


construccin del modelo (muestra bootstrap)
Algunas observaciones estarn repetidas

Las observaciones que no han sido elegidas se reservan como muestra de


testing, llamada muestra out-of-bag. Son aproximadamente 0.368xN

Se repite este proceso un nmero K prefijado de veces. Las K repeticiones


del proceso son independientes a diferencia de la validacin cruzada. Eso
hace este proceso ms robusto desde el punto de vista estadstico

Modelos Predictivos con caret

21

Fichero de datos: Alzheimer

Objetivo del estudio: analizar un conjunto de 128 biomarcadores, medidas de


expresin de protenas, asociados a las primeras etapas de Alzheimer
Nombre

Descripcin

Categoras / Observaciones

128 Variables

Expresin de protenas

Biomarcadores exploratorios

age

Edad

male

Gnero

tau, p_tau, Ab_42

3 protenas conocidas que


estn asociadas a Alzheimer

E4, E3, E2

3 alelos (SNPs) asociados a


Alzheimer

0 = no presenta el alelo, 1 = presenta el alelo

Class

Presencia de Alzheimer

1 = Alzheimer (primeras etapas), 0 = Control

training

Muestra de training o testing

1 = training, 0 = testing

0 = mujer, 1 = hombre

Problema de Clasificacin, usando la variable respuesta binaria Class

Los datos se separan en 2 muestras: una de training y otra de testing

Ejemplo extrado de Applied Predictive Modeling. Max Kuhn

Modelos Predictivos con caret

22

Esquema del Anlisis de datos

Construccin de las muestras de training y testing

Pre-Procesamiento de los datos


Eliminar y estandarizar las variables predictoras

Seleccin de los parmetros de Support Vector Machines (SVM) en la


muestra de training
Estimacin honesta de la capacidad predictiva del modelo (validacin interna)

Construccin del modelo en la muestra de training con los parmetros


ptimos

Validacin externa del modelo con la muestra de testing

Modelos Predictivos con caret

23

Ejemplo: Pre-procesamiento
> ## Libreras
> library(caret)
> library(corrplot)
> library(pROC)
> ## Fichero Datos: Alzheimer
> xx.all = read.csv("C://Taller Modelos Predictivos caret/Alzheimer.csv", sep=";")
> dim(xx.all)
[1] 333 134
> ## Variable Respuesta, Class, como factor
> xx.all$Class = as.factor(xx.all$Class)
> ## Posicin de Y en el dataframe (columna)
> indY = which ( "Class" == names(xx.all) )
> ## Muestras de Training y Testing (la variable training est en la col. 134)
> xx.train = xx.all [ xx.all$training == 1 , - 134 ]
> xx.test
= xx.all [ xx.all$training == 0 , - 134 ]
> dim(xx.train)
[1] 267 133
> dim(xx.test)
[1] 66 133
> ## Distribucin de la Variable Respuesta
> table(xx.train$Class)
Control Impaired
194
73

La variable respuesta Class se define como factor ya que es un problema de


Clasificacin, y en la variable indY se almacena la columna donde est la variable

Se divide el conjunto de datos en una muestra de training y otra de testing

Modelos Predictivos con caret

24

Ejemplo: Predictores con varianza casi cero


> ## Pre-Procesamiento de datos
> ## Near-Zero Variance Predictor
> ind.zero.var = nearZeroVar ( xx.train, freqCut = 95/5, uniqueCut = 10 )
> head(ind.zero.var)
integer(0)
> length(ind.zero.var)
[1] 0
> names(xx.train)[head(ind.zero.var)]
character(0)
>
> ## Ejemplo ms estricto
> ind.zero.var = nearZeroVar ( xx.train, freqCut = 90/10, uniqueCut = 10 )
> ind.zero.var
[1] 131
> table ( xx.train [ , 131 ] )
0
1
20 247
> prop.table ( table ( xx.train [ , 131 ] ) )
0
1
0.07490637 0.92509363

Se usa la funcin nearZeroVar() del paquete caret para buscar las variables que
tengan varianza casi cero, aquellas que entre las dos categoras ms numerosas
tengan una relacin de 95/5 y que tengan menos de 10 valores nicos

No hay ninguna, y se prueba con 90/10, criterio que cumple la variable 131

Modelos Predictivos con caret

25

Ejemplo: Predictores con alta correlacin


> ## Matriz de correlaciones de los Predictores
> w.corr = cor ( xx.train[ , - indY ] )
> dim(w.corr)
[1] 132 132
> ## Grfico de la matriz de correlaciones
> dev.new()
> corrplot ( w.corr[1:50,1:50])
> rownames(w.corr) = 1:nrow(w.corr)
## Los nombres son muy largos
> colnames(w.corr) = 1:nrow(w.corr)
## Los nombres son muy largos
> dev.new()
> corrplot ( w.corr[1:50,1:50], order="hclust")

Modelos Predictivos con caret

26

39
49
8
31
40
41
17
20
32
47
5
6
14
4
26
16
12
13
15
7
11
19
46
28
42
34
48
2
10
29
1
3
37
18
30
9
22
25
36
44
27
45
21
43
33
50
24
38
23
35

Ejemplo: Predictores con alta correlacin


39
49
8
31
40
41
17
20
32
47
5
6
14
4
26
16
12
13
15
7
11
19
46
28
42
34
48
2
10
29
1
3
37
18
30
9
22
25
36
44
27
45
21
43
33
50
24
38
23
35
Modelos Predictivos con caret

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1

27

Ejemplo: Predictores con alta correlacin


> ## Encontrar las correlaciones altas por parejas
> ind.high.corr = findCorrelation ( w.corr, cutoff = 0.8 )
> length(ind.high.corr)
[1] 14
> ind.high.corr
[1] 109 121 53 118 103 31 62 87 46 12 127 13 16
2
>
> ## Borrar las variables
> xx.train = xx.train [ , - ind.high.corr ]
> dim(xx.train)
[1] 267 119
> ## Borrar las variables
> xx.test = xx.test [ , - ind.high.corr ]
> dim(xx.test)
[1] 66 119
>
> ## Posicin de Y en el dataframe
> indY = which ( "Class" == names(xx.train) )

Se usa la funcin findCorrelation() del paquete caret para buscar variables que
estn correlacionadas por encima de un valor ( cutoff= )

Esta funcin devuelve las columnas de las variables que se pueden borrar,
seleccionando una de cada pareja de variables correlacionadas por encima de 0.8

Se borran 14 variables de las muestras de training y testing

Modelos Predictivos con caret

28

Ejemplo: Estandarizacin
> ## Estadandarizacin de las Variables Predictoras
> w.trans = preProcess ( xx.train [ , -indY ] , method = c ("center", "scale") )
> w.trans
Created from 267 samples and 118 variables
Pre-processing: centered, scaled
> xx.train[ , -indY] = predict( w.trans , xx.train[ , -indY] )
> xx.test [ , -indY] = predict( w.trans , xx.test[ , -indY] )
>
> ## Comprobando la estandarizacin
> mean.st = apply ( xx.train[ , -indY] , 2 , mean, na.rm=T )
> range ( mean.st )
[1] -2.338459e-15 1.271271e-14
> sd.st
= apply ( xx.train[ , -indY] , 2 , sd, na.rm=T )
> range ( sd.st )
[1] 1 1
> mean.st = apply ( xx.test[ , -indY] , 2 , mean, na.rm=T )
> range ( mean.st )
[1] -0.1897870 0.3187996

Se usa la funcin preProcess() del paquete caret para obtener las medias y las SDs
(method=). La funcin predict() aplicada al objeto que crea preProcess() es la que
realmente aplica la normalizacin

La normalizacin sobre la muestra de testing se hace con las medias y SDs de la


muestra de training, para obtener predicciones correctas

Modelos Predictivos con caret

29

Support Vector Machines


Support Vector Machines es una tcnica de aprendizaje estadstico que
pertenece a la familia de los clasificadores lineales

Si las clases son linealmente separables, se selecciona el hiperplano que


maximiza la distancia mnima entre las observaciones del conjunto de
datos y el hiperplano, al que se le llama margen geomtrico

15

Vectores soporte

Vectores soporte

10

Margen

Modelos Predictivos con caret

10

15

20

30

Support Vector Machines

Cuando los datos no se pueden separar linealmente, se hace una


transformacin no lineal a un espacio de dimensin mayor donde se
puedan separar linealmente

No es necesario definir explcitamente las transformaciones. Se usan funciones


ncleo (kernel), que calculan el productor escalar en el espacio de caractersticas
Una de las funciones ncleo ms usada es la funcin radial (gaussiano)

K ( x , z) = exp x z
Modelos Predictivos con caret

>0

Cunto mayor es gamma, ms


flexible es el clasificador, en el
sentido de mayor curvatura
31

Support Vector Machines

Support Vector Machines tambin se puede usar con conjuntos de datos


que no son linealmente separables ni siquiera en el espacio de
transformaciones
Se asumen malas clasificaciones, para encontrar un separador ms
generalizable, que clasifique mejor a la mayora de las observaciones

15

Permite obtener clasificadores ms robustos al sobreajuste

Se incluye un trmino de penalizacin sobre


los errores, y un parmetro C>0 que controla
su importancia relativa

10

Valores pequeos de C permiten mayor


nmero de errores y definen regiones de
decisin ms suaves

Modelos Predictivos con caret

10

15

20

32

Funcin train()

La funcin train() es la funcin ms importante del paquete caret

Esta funcin acta en dos pasos:


Se evala la capacidad predictiva del modelo (performance) para
diferentes parmetros (tuning parameters), usando tcnicas de
remuestreo

Se seleccionan los parmetros ptimos, los que tienen mayor


capacidad predictiva, y con ellos se construye el modelo predictivo en
la muestra de training (modelo final)

Modelos Predictivos con caret

33

Funcin train()

Parmetros
x:

matriz o dataframe que contiene las variables predictoras

y:

vector que contiene la variable respuesta

form :

frmula para indicar las variables predictoras y la respuesta

data :

dataframe que contiene los datos

method: mtodo de construccin del modelo predictivo (ver tabla)


preProcess: Pre-procesamiento de los datos
center, scale, range, BoxCox, pca
metric:

medida de capacidad predictiva para elegir el parmetro ptimo


RMSE, Rsquared, Accuracy, Kappa, ROC

Modelos Predictivos con caret

34

Funcin train()

Parmetros
trControl: controla la construccin del modelo y el proceso de la tcnica
de remuestreo usada (*)
tuneGrid: dataframe con los valores de los parmetros a evaluar
Los nombres de las columnas deben coincidir con los nombres
de los parmetros (ver tabla)
tuneLength: nmero de niveles para cada parmetro de tuning, si no se
han especificado valores concretos con tuneGrid
...

Modelos Predictivos con caret

: argumentos adicionales a las funciones del paquete de R

35

Parmetro trControl= de la funcin train()

Parmetros
method : mtodo de remuestreo:
boot (bootstrapping), none (ajusta un nico modelo)
cv (validacin cruzada), repeatedcv (CV repetida), LOOCV
number : nmero de particiones en la CV o nmero de iteraciones
repeats : nmero de veces que se repite la CV (repeatedcv)
summaryFunction : una funcin que evala la capacidad predictiva
defaultSummary (accuracy, Kappa, RMSE, R2)
twoClassSummary calcula la sensibilidad, especificidad y el
AUC de la curva ROC cuando hay 2 clases
classProbs : Calcula las probabilidades predichas de las clases
Es necesario para calcular la curva ROC (def, FALSE)
savePredictions : Salva las predicciones hold-out (def, FALSE)

Modelos Predictivos con caret

36

Ejemplo: Evaluacin de Parmetros


>
>
>
>
>
>
+
+
>
>
>
+

## Suppor Vector Machine. Construccin del Modelo Predictivo


## Control de la Tcnica de Remuestreo
fiveStats = function(...) c (twoClassSummary(...), defaultSummary(...))
cv.ctrl = trainControl ( method = "repeatedcv", number = 10 , repeats = 5,
classProbs = TRUE,
summaryFunction = fiveStats )
## Parmetros a explorar en SVM
svmGrid
= expand.grid ( .C = c ( 1, 5, 10, 50, 100 ) ,
.sigma = c ( 0.001, 0.005, 0.01, 0.05 ) )

Antes de ejecutar la funcin train() se debe especificar la tcnica de remuestreo con


la que se va a evaluar el modelo: 5 times 10-fold CV

Adems se van a calcular las probabilidades de pertenecer a cada clase,


necesarias para usar el AUC como medida de capacidad predictiva

A las funciones resumen por defecto, se aade twoClassSummary lo que permite


calcular las medidas asociadas a las curvas ROC

Se especifican los valores de los 2 parmetros de SVM que se van a explorar ( .C y


.sigma ) . La funcin expand.grid() crea un dataframe con todas las combinaciones

Modelos Predictivos con caret

37

Ejemplo: Evaluacin de Parmetros


> ## Construccin del Modelo Predictivo
> svm.fit = train ( xx.train [ , -indY ] , xx.train$Class ,
+
method = "svmRadial",
+
tuneGrid = svmGrid,
+
trControl = cv.ctrl,
+
metric = "ROC",
+
prob.model = TRUE )
Loading required package: kernlab
> svm.fit
Support Vector Machines with Radial Basis Function Kernel
267 samples
118 predictors
2 classes: 'Control', 'Impaired'
No pre-processing
Resampling: Cross-Validated (10 fold, repeated 5 times)

. . . . . .

En la funcin train() se especifican las variables predictoras y la variable respuesta

Se van a construir varios modelos con SVM con la funcin radial


(method=svmRadial, que usa el paquete kernlab que es cargado por caret ), para
todos los parmetros especificados (tuneGrid=)

Se considera el mejor modelo como el que tiene mayor AUC de la curva ROC
(metric=ROC ) evaluado con la tcnica de remuestreo especificada ( trControl= )

Modelos Predictivos con caret

38

Ejemplo: Evaluacin de Parmetros


Resampling results across tuning parameters:
C
sigma ROC
Sens
Spec
Accuracy
1
0.001 0.881 0.886 0.753 0.85
1
0.005 0.877 0.926 0.687 0.861
1
0.01
0.876 0.928 0.657 0.854
1
0.05
0.808 0.961 0.277 0.773
5
0.001 0.887 0.923 0.705 0.864
5
0.005 0.878 0.929 0.663 0.856
5
0.01
0.877 0.926 0.64
0.848
5
0.05
0.807 0.963 0.227 0.761
10
0.001 0.885 0.943 0.687 0.873
10
0.005 0.873 0.92
0.625 0.839
10
0.01
0.877 0.927 0.654 0.853
10
0.05
0.807 0.962 0.242 0.765
50
0.001 0.857 0.922 0.601 0.834
50
0.005 0.873 0.926 0.622 0.843
50
0.01
0.877 0.934 0.638 0.853
50
0.05
0.807 0.964 0.274 0.775
100 0.001 0.851 0.919 0.572 0.824
100 0.005 0.873 0.921 0.616 0.838
100 0.01
0.877 0.925 0.648 0.85
100 0.05
0.807 0.963 0.228 0.761

Kappa
0.629
0.633
0.609
0.275
0.644
0.616
0.592
0.222
0.657
0.57
0.606
0.236
0.552
0.576
0.603
0.279
0.522
0.564
0.596
0.224

ROC SD
0.0942
0.0931
0.0898
0.112
0.0893
0.0908
0.0894
0.112
0.0917
0.0891
0.0894
0.112
0.0899
0.0891
0.0894
0.112
0.0889
0.0891
0.0894
0.112

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

. Accuracy SD
. 0.0768
. 0.0717
. 0.0725
. 0.0521
. 0.0753
. 0.0754
. 0.0763
. 0.0505
. 0.0708
. 0.0754
. 0.0704
. 0.055
. 0.078
. 0.076
. 0.0757
. 0.0602
. 0.0745
. 0.0738
. 0.0755
. 0.0525

Kappa SD
0.186
0.194
0.201
0.212
0.199
0.206
0.212
0.208
0.198
0.205
0.192
0.227
0.213
0.208
0.21
0.23
0.202
0.201
0.21
0.211

ROC was used to select the optimal model using the largest value.
The final values used for the model were sigma = 0.001 and C = 5.

El modelo de SVM con sigma=0.001 y C=5 es el modelo con mayor AUC, 0.887 que
es el promedio de las 50 AUCs de los modelos del remuestreo para esos parmetros

Modelos Predictivos con caret

39

Ejemplo: Evaluacin de Parmetros


> names(svm.fit)
[1] "method"
"modelInfo"
"modelType"
"results"
[6] "bestTune"
"call"
"dots"
"metric"
[11] "finalModel"
"preProcess"
"trainingData" "resample"
[16] "perfNames"
"maximize"
"yLimits"
"times"
>
> ## Parmetros ptimos
> svm.fit$bestTune
sigma C
5 0.001 5
> svm.fit$bestTune$sigma
[1] 0.001
> svm.fit$bestTune$C
[1] 5
> ## Resultados
> head(svm.fit$results)
C sigma
ROC
Sens
Spec Accuracy
Kappa
1
1 0.001 0.8810273 0.8858421 0.7528571 0.8495706 0.6289897
5
5 0.001 0.8868346 0.9232632 0.7053571 0.8639011 0.6439127
9
10 0.001 0.8853139 0.9426842 0.6871429 0.8730138 0.6566747
13 50 0.001 0.8571203 0.9219474 0.6007143 0.8340883 0.5519905
17 100 0.001 0.8506269 0.9188947 0.5721429 0.8243142 0.5220607
SpecSD AccuracySD
KappaSD
1 0.1589578 0.07679743 0.1861817
5 0.1844601 0.07527970 0.1991360
9 0.1982010 0.07078200 0.1980073
13 0.1844781 0.07797558 0.2126890
17 0.1812467 0.07454970 0.2023394

Modelos Predictivos con caret

"pred"
"control"
"resampledCM"

ROCSD
0.09418768
0.08931012
0.09171076
0.08988780
0.08885459

SensSD
0.07947708
0.07031253
0.05647435
0.06792061
0.06761002

40

Ejemplo: Evaluacin de Parmetros


>
>
>
>
>

## Grfico del AUC respecto a los 2 parmetros


dev.new()
plot( svm.fit )
dev.new()
plot( svm.fit, metric= "Kappa" )

ROC

Kappa

Sigma
0.001

0.005

Sigma
0.01

0.05

0.001

0.005

0.01

0.05

Kappa (Repeated Cross-Validation)

ROC (Repeated Cross-Validation)

0.88

0.86

0.84

0.82

20

40

60

Cost

Modelos Predictivos con caret

80

100

0.6

0.5

0.4

0.3

20

40

60

80

100

Cost

41

Ejemplo: Evaluacin de Parmetros


> ## Grfico del AUC respecto a los 2 parmetros
> dev.new()
> plot( svm.fit, plotType="level" )

0.89

0.88

0.05

0.87

0.86

Sigma

0.01

0.85

0.84
0.005
0.83

0.82
0.001
0.81

10

50

100

Cost
ROC (Repeated Cross-Validation)

Modelos Predictivos con caret

42

Ejemplo: Modelo Predictivo Final


> ## Modelo Final, construido con los parmetros ptimos
> svm.fit$finalModel
Support Vector Machine object of class "ksvm"
SV type: C-svc (classification)
parameter : cost C = 5
Gaussian Radial Basis kernel function.
Hyperparameter : sigma = 0.001
Number of Support Vectors : 138
Objective Function Value : -419.6113
Training error : 0.067416
Probability model included.
> class(svm.fit)
[1] "train"
> class(svm.fit$finalModel)
[1] "ksvm"
attr(,"package")
[1] "kernlab"

El objeto $finalModel contiene el modelo predictivo construido con el paquete


kernlab en la muestra de training con los parmetros ptimos

El objeto $finalModel es de la clase que le asigna el paquete con el que ha sido


construido. Se podran usar las funciones de ese paquete con este objeto

Modelos Predictivos con caret

43

Ejemplo: Predicciones del Modelo


> ## Clases predichas
> pred.train.class = predict ( svm.fit$finalModel, newdata = xx.train [ , -indY] )
> pred.test.class = predict ( svm.fit$finalModel, newdata = xx.test [ , -indY] )
> head(pred.test.class)
[1] Control Impaired Control Impaired Control Control
Levels: Control Impaired
> ## Probabilidades predichas
> pred.test.prob = predict( svm.fit$finalModel , newdata = xx.test [ , -indY] ,
+
type = "prob" )
> head(pred.test.prob)
Control
Impaired
[1,] 0.8896693 0.11033070
[2,] 0.2375410 0.76245899
[3,] 0.9113037 0.08869630
[4,] 0.1690830 0.83091703
[5,] 0.9128701 0.08712992
[6,] 0.6858061 0.31419388

La funcin predict() permite obtener las clases predichas por el modelo final
construido con la muestra de training, para cada observacin del dataframe
especificado en newdata=

Se guardan las clases predichas en las muestras de training y testing

La funcin predict() tambin permite calcular las probabilidades predichas


(type=prob) y devuelve una columna por cada clase

Modelos Predictivos con caret

44

Ejemplo: Validacin externa


> confusionMatrix ( pred.test.class , xx.test$Class )
Confusion Matrix and Statistics
Reference
Prediction Control Impaired
Control
43
8
Impaired
5
10
Accuracy
95% CI
No Information Rate
Kappa
Sensitivity
Specificity

:
:
:
:
:
:

0.803
(0.6868, 0.8907)
0.7273
0.4762
0.8958
0.5556

. . .
> confusionMatrix ( pred.train.class , xx.train$Class )
Confusion Matrix and Statistics
Reference
Prediction Control Impaired
Control
192
16
Impaired
2
57
Accuracy : 0.9326

La funcin confusionMatrix() del paquete caret permite mostrar la tabla de


confusin del modelo con diferentes estadsticos asociados

Se observa el sobreajuste si se evala el modelo en la muestra de training

Modelos Predictivos con caret

45

Ejemplo: Validacin externa

La funcin roc() del paquete pROC


permite mostrar la curva ROC

Se introducen las probabilidades


predichas como predictor continuo

El AUC en la muestra de testing,


0.870 es muy parecido al obtenido
por validacin cruzada, 0.887

0.6
0.4
0.2
0.0

Sensitivity

0.8

1.0

> ## Curva ROC


> dev.new()
> roc ( xx.test$Class, pred.test.prob [ , 2] , plot=T )
Area under the curve: 0.8704

1.0

0.8

0.6

0.4

0.2

0.0

Specificity

Modelos Predictivos con caret

46

Ejemplo: Importancia de las Variables


> ## Importancia de las Variables
> svm.imp = varImp ( svm.fit , scale = F )
> svm.imp
ROC curve variable importance
only 20 most important variables shown (out of 118)
Importance
Ab_42
0.7917
tau
0.7839
MMP10
0.6994
MIF
0.6710
Eotaxin_3
0.6685
GRO_alpha
0.6672
MMP7
0.6657
IGF_BP_2
0.6641

. . .
> head(svm.imp$importance)
Control
ACE_CD143_Angiotensin_Converti 0.5409900
AXL
0.4921268
Adiponectin
0.5396837
Alpha_1_Antichymotrypsin
0.5677870
Alpha_1_Antitrypsin
0.6040813
Alpha_1_Microglobulin
0.5808502

Impaired
0.5409900
0.4921268
0.5396837
0.5677870
0.6040813
0.5808500

La funcin varImp() contiene un score de la importancia de la variable en el modelo


construido, que es almacenado en el objeto $importance

Modelos Predictivos con caret

47

Ejemplo: Importancia de las Variables


> ## Grfico
> dev.new()
> plot(svm.imp, top=20)

Ab_42
tau
MMP10
MIF
Eotaxin_3
GRO_alpha
MMP7
IGF_BP_2
TRAIL_R3
PAI_1
FAS
VEGF
Pancreatic_polypeptide
age
NT_proBNP
Creatine_Kinase_MB
Cortisol
Fibrinogen
Gamma_Interferon_induced_Monokin
Thrombopoietin
0.65

0.70

0.75

Importance
Modelos Predictivos con caret

48

Ejemplo: Control del Remuestreo


> ## Control de la Tcnica de Muestreo
> names(svm.fit$control$index)
[1] "Fold01.Rep1" "Fold02.Rep1" "Fold03.Rep1"
[6] "Fold06.Rep1" "Fold07.Rep1" "Fold08.Rep1"
[11] "Fold01.Rep2" "Fold02.Rep2" "Fold03.Rep2"
[16] "Fold06.Rep2" "Fold07.Rep2" "Fold08.Rep2"
[21] "Fold01.Rep3" "Fold02.Rep3" "Fold03.Rep3"

"Fold04.Rep1"
"Fold09.Rep1"
"Fold04.Rep2"
"Fold09.Rep2"
"Fold04.Rep3"

"Fold05.Rep1"
"Fold10.Rep1"
"Fold05.Rep2"
"Fold10.Rep2"
"Fold05.Rep3"

. . .
> svm.fit$control$index$Fold01.Rep1
[1]
1
2
3
4
6
7
8
9 10 11 12 14 15 16 17 18 19
[18] 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
[35] 37 38 42 43 44 45 46 47 48 49 50 51 52 53 55 56 57
[52] 58 59 62 63 64 65 67 68 69 70 72 73 74 75 76 77 78
[69] 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
[86] 96 97 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113

. . .
> svm.fit$control$indexOut$Fold01.Rep1
[1]
5 13 39 40 41 54 60 61 66
[19] 190 198 222 225 227 234 261 266

71

98 116 141 147 156 158 179 188

El objeto $control tiene informacin del proceso de remuestreo

Permite conocer qu observaciones fueron elegidas en cada particin del proceso de


validacin cruzada para construir el modelo ( $index ) y las que quedaron fuera para
evaluar el modelo ( $indexOut )

Modelos Predictivos con caret

49

Ejemplo: Control del Remuestreo


> ## Remuestreo del Modelo Final
> dim(svm.fit$resample)
[1] 50 6
> head(svm.fit$resample)
ROC Sens
Spec Accuracy
1 0.8223684 1.0 0.7500000 0.9259259
2 0.8928571 1.0 0.7142857 0.9259259
3 0.9868421 1.0 0.8750000 0.9629630
4 0.9013158 1.0 0.5000000 0.8518519
5 0.8881579 1.0 0.6250000 0.8888889
6 0.8285714 0.9 0.5714286 0.8148148
> mean(svm.fit$resample$ROC)
[1] 0.8868346
> sd(svm.fit$resample$ROC)
[1] 0.08931012

Kappa
0.8085106
0.7874016
0.9078498
0.5846154
0.7011070
0.4943820

Resample
Fold03.Rep4
Fold09.Rep4
Fold01.Rep5
Fold07.Rep3
Fold01.Rep3
Fold04.Rep4

El objeto $resample tiene informacin del proceso de remuestreo en el modelo final,


construido con los parmetros ptimos

Tiene informacin sobre las medidas de capacidad predictiva de los 5x10 modelos
construidos en el proceso de validacin cruzada con los parmetros ptimos

Modelos Predictivos con caret

50

Ejemplo: Control del Remuestreo


> ## Plots de densidad del remuestreo del Modelo Final
> dev.new()
> resampleHist( svm.fit )

Sens

Spec
2.0
0.5
0.0

Density

1.0

1.5

ROC

0.6

0.8

1.0

0.7

0.9

1.0

1.1

0.0

0.5

1.0

Kappa

0.0

0.5

1.0

1.5

Accuracy

0.8

0.6

Modelos Predictivos con caret

0.7

0.8

0.9

1.0

1.1

0.0

0.5

1.0

51

Mtodos de regresin penalizados. LASSO

Los mtodos de regresin penalizados introducen una penalizacin en


la funcin de prdida a ser optimizada (loss function)
Los estimadores csicos en regresin lineal y regresin logstica producen
estimadores muy inestables (valores muy altos y con mucha varianza) en
problemas de alta dimensionalidad ( p>>n ) y con variables correlacionadas

LASSO usa la restriccin L1-penalty: la suma de los valores absolutos de


los coeficientes de regresin debe ser menor que una constante C

En un problema de regresin logstica, LASSO maximiza la funcin


p

= max logL(mod) -
j

j=1

L(mod) es la funcin de
verosimilitud

Muchos de los coeficientes estimados por LASSO son 0


Lambda es un parmetro del modelo que se debe optimizar
Modelos Predictivos con caret

52

Ejemplo: LASSO
> ## Control de la Tcnica de Remuestreo: 100 muestras bootstrap
> boot.ctrl = trainControl ( method = "boot" , number = 100, classProbs = T )
> ## Parmetros a explorar. Con el paquete glmnet alpha = 1 para LASSO
> glmnetGrid = expand.grid ( .alpha = 1 ,
+
.lambda = seq ( .001 , .1 , length=20 ) )
> ## Construccin del Modelo Predictivo
> lasso.fit = train ( xx.train [ , -indY ] , xx.train$Class ,
+
method = "glmnet",
+
tuneGrid = glmnetGrid,
+
trControl = boot.ctrl )
Loading required package: glmnet
> lasso.fit
glmnet
267 samples
118 predictors
2 classes: 'Control', 'Impaired'
No pre-processing
Resampling: Bootstrapped (100 reps)

. . .

Para construir un modelo penalizado con LASSO usamos method=glmnet que usa
el paquete glmnet y es necesario usar el parmetro .alpha=1

Se usa boostrapping como tcnica de remuestreo

Modelos Predictivos con caret

53

Ejemplo: LASSO
Resampling results across tuning parameters:
lambda
0.001
0.00621
0.0114
0.0166
0.0218
0.0271
0.0323
0.0375
0.0427
0.0479
0.0531
0.0583
0.0635
0.0687
0.0739
0.0792
0.0844
0.0896
0.0948
0.1

Accuracy
0.828
0.848
0.86
0.865
0.867
0.868
0.867
0.864
0.859
0.855
0.847
0.84
0.829
0.816
0.806
0.796
0.785
0.775
0.767
0.76

Kappa
0.57
0.613
0.638
0.649
0.651
0.651
0.644
0.633
0.616
0.602
0.578
0.555
0.513
0.469
0.432
0.391
0.344
0.302
0.266
0.232

Accuracy SD
0.0295
0.0295
0.0269
0.0269
0.027
0.0276
0.0278
0.0297
0.0339
0.0356
0.0402
0.0449
0.0465
0.0505
0.0542
0.0526
0.0523
0.0524
0.0512
0.0504

Kappa SD
0.0753
0.0798
0.0749
0.0732
0.0696
0.0695
0.0707
0.0757
0.0851
0.0891
0.101
0.113
0.12
0.133
0.148
0.149
0.151
0.153
0.148
0.145

Tuning parameter 'alpha' was held constant at a value of 1


Accuracy was used to select the optimal model using the largest value.
The final values used for the model were alpha = 1 and lambda = 0.0271.

Modelos Predictivos con caret

54

Ejemplo: LASSO
>
>
>
>
>

## Grfico del Accuaracy y Kappa frente al Parmetro lambda


dev.new()
plot( lasso.fit )
dev.new()
plot( lasso.fit, metric= "Kappa" )

Accuracy

Kappa

0.6

0.84

Kappa (Bootstrap)

Accuracy (Bootstrap)

0.86

0.82

0.80

0.5

0.4

0.3

0.78

0.76

0.2
0.00

0.02

0.04

0.06

Regularization Parameter

Modelos Predictivos con caret

0.08

0.10

0.00

0.02

0.04

0.06

0.08

0.10

Regularization Parameter

55

Ejemplo: LASSO
> ## Coeficientes de los Predictores de los modelos para todos los lambdas
> dim( coef(lasso.fit$finalModel) )
[1] 119 99
> ## Coeficientes de los Predictores del mejor modelo
> tail ( coef(lasso.fit$finalModel, lasso.fit$bestTune$lambda) )
1
tau
1.3283331
Ab_42 -0.2613127
male
0.1852370
E4
.
E3
.
> lass.coef = as.matrix ( coef(lasso.fit$finalModel, lasso.fit$bestTune$lambda) )
> row.names( lass.coef )[ lass.coef != 0 ] ## Se convierte a matriz
[1] "(Intercept)"
"Cortisol"
"Cystatin_C"
[4] "ENA_78"
"Eotaxin_3"
"FAS"
[7] "FSH_Follicle_Stimulation_Hormon" "Fibrinogen"
"GRO_alpha"
[10] "IL_7"
"MCP_2"
"MMP10"
[13] "MMP7"
"NT_proBNP"
"PAI_1"
[16] "PAPP_A"
"Pancreatic_polypeptide"
"SGOT"
[19] "TRAIL_R3"
"Thymus_Expressed_Chemokine_TECK" "VEGF"
[22] "tau"
"Ab_42"
"male"
> round ( lass.coef [ lass.coef != 0 ] , 3 )
[1] -1.412 0.038 -0.673 -0.123 0.039 0.234 -0.025 0.006 0.085 -0.090 0.009
0.050 0.003 0.238
[15] 0.116 0.080 0.094 0.043 0.033 0.062 -0.694 1.328 -0.261 0.185

Se usa la funcin coef() del paquete glmnet para extraer los coeficientes de
regresin del modelo

Modelos Predictivos con caret

56

Random Forest

Random Forest es una tcnica de machine learning que consiste en la


construccin de una gran nmero de rboles con las siguientes
caractersticas:

Est basado en muestras bootstrap. Cada rbol est basado en una muestra
aleatoria con reemplazamiento de las observaciones

Cada divisin del rbol est basada en una muestra aleatoria de los
predictores

Los rboles no se cortan, son tan largos como sea posible. No hay prunning

Random Forest se puede usar en problemas de clasificacin y regresin

Random Forest analiza eficientemente un gran nmero de variables, sin


tener que hacer seleccin previa

Random Forest tiene dos parmetros de tuning: el nmero de rboles y el


nmero de predictores que son evaluados en cada divisin

Modelos Predictivos con caret

57

Ejemplo: Random Forest


>
>
>
>
>
>
>
>
+
+
+
+

## Control de la Tcnica de Remuestreo: 10-fold CV


boot.ctrl = trainControl ( method = "cv" , number = 10, classProbs = T )
## Parmetros a explorar
rfGrid = expand.grid ( .mtry = c ( 5, 10, 25, 50, 75, 100 ) )
## Construccin del Modelo Predictivo
rf.fit = train ( xx.train [ , -indY ] , xx.train$Class ,
method = "rf",
tuneGrid = rfGrid ,
ntree = 1000 ,
trControl = boot.ctrl )

Loading required package: randomForest

Para construir un modelo con Random Forest usamos method=rf que usa el
paquete randomForest

El parmetro ntree=1000 nos indica que se va a construir RF con 1000 rboles. No


es un parmetro de la funcin train(), es un parmetro de la funcin randomForest()

El nico parmetro a optimizar en RF en la funcin train() es el nmero de variables


predictoras que son evaluados de forma aleatoria en cada divisin del rbol ( .mtry )

Se usa 10-fold CV, validacin cruzada con 10 particiones, como tcnica de


remuestreo

Modelos Predictivos con caret

58

Ejemplo: Random Forest


> rf.fit
Random Forest
267 samples
118 predictors
2 classes: 'Control', 'Impaired'
No pre-processing
Resampling: Cross-Validated (10 fold)
Resampling results across tuning parameters:
mtry
5
10
25
50
75
100

Accuracy
0.798
0.828
0.854
0.865
0.866
0.847

Kappa
0.355
0.477
0.584
0.631
0.638
0.597

Accuracy SD
0.0298
0.0357
0.0574
0.0429
0.0504
0.0478

Kappa SD
0.112
0.103
0.158
0.114
0.136
0.127

Accuracy was used to select the optimal model using


The final value used for the model was mtry = 75.

Modelos Predictivos con caret

the largest value.

59

Otras funciones del paquete caret

createDataPartition() : crea particiones en una muestra (CV)

dummyVars() : crea un set completo de variables dummy en las variables


categricas definidas como factores

calibration() : crea un grfico de calibracin para comparar probabilidades


observadas y predichas

sensitibity() : calcula la sensibilidad, especificidad,

rfe() : Recursive Feature Elimination. Es un algoritmo de seleccin de


variables, basado en la eliminacin de las variables menos importantes
Es una funcin con parmetros muy parecidos a train()

caret tambin incorpora funciones para construir modelos predictivos con


tcnicas que no tienen paquetes especficos en R (modalidades de bagging)

Modelos Predictivos con caret

60

Вам также может понравиться