Modelos Predictivos con el paquete caret

Modelos Predictivos con el paquete caret VI Jornadas de Usuarios de R Santiago de Compostela Jesús Herranz Valera [email protected] Instituto I

11 downloads 601 Views 558KB Size

Recommend Stories


REDES NEURONALES Y MODELOS PREDICTIVOS
REDES NEURONALES Y MODELOS PREDICTIVOS Jorge Estévez Analista Grupo ER www.grupoempresarialer.com www.grupoempresarialer.com SERIES TEMPORALES El v

El paquete de reformas económicas
Panorama crítico para la industria textil y del vestido mexicana Ma. Beatriz García Castro* La industria textil y del vestido ocupa un lugar destacad

Modelos con Variable Dependiente Discreta
Modelos con Variable Dependiente Discreta Econometría II Alarcón Castillo Henry Champa Del Valle Katherine Mayhuasca Gutierrez Victor Bautista Ramos

Story Transcript

Modelos Predictivos con el paquete caret VI Jornadas de Usuarios de R Santiago de Compostela

Jesús Herranz Valera [email protected] Instituto IMDEA Alimentación 24 de octubre de 2014

Índice  Bibliografía  Introducción al paquete caret  Preprocesamiento de datos  Modelos Predictivos. Clasificación y Regresión  Capacidad predictiva de un modelo  Técnicas de remuestreo. Validación cruzada. Bootstrapping  Funciones preProcess(), nearZeroVar(), findCorrelation()  Función train()  Funciones predict(), varImp()  Otras funciones Modelos Predictivos con caret

2

Bibliografía •

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

3

Paquete caret •

El nombre caret procede de “Classification And REgression Training” – Entrenamiento (construcción) de Modelos de Clasificación y Regresión



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 común que llama a funciones de otros paquetes de R que en la mayoría 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, fórmulas, matrices, ….) – Parámetros de las funciones – Objetos y salidas que devuelven las funciones

Modelos Predictivos con caret

4

Paquete caret •

El paquete caret contiene funciones para: – Pre-procesamiento de datos – Construcción y evaluación de modelos con diferentes parámetros – Predicción de nuevas observaciones – Evaluación de la importancia de las variables – Visualización de modelos – Selección de variables (feature selection)



Además, incorpora otras funciones de gran utilidad y completa algunas funciones que no estaban en los paquetes originales

Modelos Predictivos con caret

5

Métodos 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

6

Métodos 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

C

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

7

Pre-procesamiento •

Las técnicas 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 elaboración de un modelo



Estandarización o normalización de variables – Centrado de la variable, restando la media – Escalado de la variable, dividiendo por la desviación estándar – Una variable estandarizada tendrá media 0 y desviación estándar 1



Transformaciones para conseguir una distribución simétrica – Familia de transformaciones de Box y Cox

 xλ −1  λ≠0 x* =  λ log(x ) λ = 0 Modelos Predictivos con caret

8

Reducción del conjunto de variables •

Eliminar variables donde todas o la gran mayoría 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º categorías más numerosas. También se debe comprobar que el número de valores distintos es pequeño



Algunos conjuntos de datos contienen variables muy correlacionadas, algunas de las cuáles se podrían borrar: – Se pretende borrar el mínimo número de predictores de tal forma que todas las correlaciones entre todas las variables restantes estén 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 correlación y entre ellas se borra la más correlacionadas con el resto

Modelos Predictivos con caret

9

Aprendizaje Supervisado y No Supervisado •

Las Técnicas 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 término “aprendiendo de los datos” – Técnicas 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

Clasificación y Regresión •

La Clasificación es la técnica de Aprendizaje Supervisado en la que cada observación pertenece a una clase y el resto de variables son usadas para predecir la clase a la que pertenecerán nuevas observaciones – Modelos Predictivos con variable respuesta categórica – Normalmente, se generan dos tipos de predicciones: la clase predicha y la probabilidad de pertenecer a cada una de las clases



La Regresión es la técnica de Aprendizaje Supervisado que consiste en aprender una función que asigna a cada observación una predicción en forma de valor numérico – Modelos Predictivos con variable respuesta continua

Modelos Predictivos con caret

11

Evaluación de Modelos •

El objetivo general es evaluar la calidad de un modelo mediante su capacidad predictiva – Medidas objetivas basadas en la comparación 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 evaluación 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. Clasificación •

En el caso de una variable predictora categórica, se podría formar la matriz de confusión o tabla de clasificación 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 están en la diagonal



Las clasificaciones incorrectas son las que están fuera de la diagonal



Exactitud (Accuracy): proporción de clasificaciones correctas



Error de clasificación o tasa de error (Error rate): proporción de clasificaciones incorrectas k

k

Accuracy = Modelos Predictivos con caret

∑F i =1

N

ii

∑F

Error Rate =

ij i =1, j=1,i ≠ j

N 13

Medidas de la Capacidad Predictiva. Clasificación •

En el caso de una variable respuesta binaria con clases 0 y 1, y asumiendo que la categoría 1 es el “evento de interés”, la tabla de clasificación sería: Predicho Observado

Y=1

Y=0

Total

Y=1

VP

FN

VP + FN

Y=0

FP

VN

FP + VN

Total

VP + FP

FN + VN

N

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 clasificación con dos clases – Se consideran todos los valores del predictor continuo como puntos de corte para definir predictores binarios, para los cuáles 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 tendría AUC = 1 – Un predictor que predice de forma aleatoria tendría AUC = 0.5

Modelos Predictivos con caret

15

Medidas de la Capacidad Predictiva. Regresión •

En Regresión, las medidas de capacidad predictiva de un modelo se basan en los residuos, diferencias entre los valores observados y predichos



El error cuadrático medio (MSE, mean squared error) y su raíz cuadrada

1 N MSE = ∑ ( y i − yˆ i ) 2 N i =1 •

RMSE = MSE

El coeficiente de determinación es una medida del ajuste del modelo y es la proporción de variabilidad de la variable respuesta explicada por el modelo ajustado R2 =

SSR SST

2 ˆ ( ) y − y ∑ i = 2 ∑ (y i − y )

= 1−

∑ ei

∑ (y

2

− y)

2

i

– 0 < R2 < 1. R2 = 1 significa un ajuste perfecto y R2 = 0 un ajuste nulo Modelos Predictivos con caret

16

Métodos de Estimación. Training y Testing •

Un método para obtener una estimación 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 construcción del modelo 2. Una muestra de validación (testing set) donde se realizan las predicciones y donde se evalúa la capacidad predictiva del modelo



La partición se debe hacer de forma aleatoria



Se usa con muestras suficientemente grandes – Si la muestra es pequeña, todas las observaciones son necesarias para construir el modelo – La muestra de testing no tiene precisión suficiente para evaluar el modelo

Modelos Predictivos con caret

17

Técnicas de remuestreo. Validación Cruzada •

El método de Validación Cruzada (Cross-validation, CV) consiste en dividir de forma aleatoria la muestra en K subconjuntos de similar tamaño, y ajustar K modelos, dejando cada vez una partición como conjunto de testing, y construyendo el modelo con las K-1 restantes – La estimación del error se calcula como promedio de los K errores evaluados en las muestras de testing de las K particiones



El número K de particiones (folds) se elige dependiendo del tamaño de la muestra. Se suele elegir K=10 (10-fold CV) o K=5 – Se puede repetir varias veces el proceso de validación cruzada. Por ejemplo, si se repite 10 veces: 10 times 10-fold CV



Cuando el número de particiones en el proceso de validación cruzada es K=N, el método se llama leave-one-out (LOOCV) porque se construyen N modelos, y en cada uno de ellos se queda fuera una única observación como muestra de testing. Se suele usar en muestras pequeñas

Modelos Predictivos con caret

18

Técnicas de remuestreo. Validación Cruzada Training Modelo 1

5-fold CV Testing

Evaluación

Muestra

…..

(K=5 particiones)

Partición aleatoria Training Modelo 5

Testing

Modelos Predictivos con caret

Evaluación

19

Técnicas de remuestreo. LOOCV Muestra de Training

Construcción

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

Evaluación

obs. N

ˆ Y N

YN

20

Técnicas de remuestreo. Bootstrapping •

Es un método de remuestreo que se suele utilizar en muestras pequeñas



Se elige una muestra aleatoria con reemplazamiento de tamaño N para la construcción del modelo (muestra bootstrap) – Algunas observaciones estarán 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 número K prefijado de veces. Las K repeticiones del proceso son independientes a diferencia de la validación cruzada. Eso hace este proceso más robusto desde el punto de vista estadístico

Modelos Predictivos con caret

21

Fichero de datos: Alzheimer •

Objetivo del estudio: analizar un conjunto de 128 biomarcadores, medidas de expresión de proteínas, asociados a las primeras etapas de Alzheimer Nombre

Descripción

Categorías / Observaciones

128 Variables

Expresión de proteínas

Biomarcadores exploratorios

age

Edad

male

Género

tau, p_tau, Ab_42

3 proteínas conocidas que están 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 Clasificación, usando la variable respuesta binaria “Class”



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



Ejemplo extraído de “Applied Predictive Modeling”. Max Kuhn

Modelos Predictivos con caret

22

Esquema del Análisis de datos •

Construcción de las muestras de training y testing



Pre-Procesamiento de los datos – Eliminar y estandarizar las variables predictoras



Selección de los parámetros de Support Vector Machines (SVM) en la muestra de training – Estimación “honesta” de la capacidad predictiva del modelo (validación interna)



Construcción del modelo en la muestra de training con los parámetros óptimos



Validación externa del modelo con la muestra de testing

Modelos Predictivos con caret

23

Ejemplo: Pre-procesamiento > ## Librerías > 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) > ## Posición 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 > ## Distribución 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 Clasificación, 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 más 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 función nearZeroVar() del paquete caret para buscar las variables que tengan “varianza casi cero”, aquellas que entre las dos categorías más numerosas tengan una relación 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 correlación > ## Matriz de correlaciones de los Predictores > w.corr = cor ( xx.train[ , - indY ] ) > dim(w.corr) [1] 132 132 > ## Gráfico 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 correlación 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

1

0.8

0.6

0.4

0.2

0

-0.2

-0.4

-0.6

-0.8

-1

27

Ejemplo: Predictores con alta correlación > ## 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 > > ## Posición de Y en el dataframe > indY = which ( "Class" == names(xx.train) )



Se usa la función findCorrelation() del paquete caret para buscar variables que estén correlacionadas por encima de un valor ( cutoff= )



Esta función 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: Estandarización > ## Estadandarización 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 estandarización > 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 función preProcess() del paquete caret para obtener las medias y las SDs (method=). La función predict() aplicada al objeto que crea preProcess() es la que realmente aplica la normalización



La normalización 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 técnica de aprendizaje estadístico que pertenece a la familia de los clasificadores lineales



Si las clases son linealmente separables, se selecciona el hiperplano que maximiza la distancia mínima entre las observaciones del conjunto de datos y el hiperplano, al que se le llama margen geométrico

15



Vectores soporte

0

5

Vectores soporte

10

Margen

0

Modelos Predictivos con caret

5

10

15

20

30

Support Vector Machines •

Cuando los datos no se pueden separar linealmente, se hace una transformación no lineal a un espacio de dimensión mayor donde se puedan separar linealmente

– No es necesario definir explícitamente las transformaciones. Se usan funciones núcleo (kernel), que calculan el productor escalar en el espacio de características – Una de las funciones núcleo más usada es la función radial (gaussiano)

(

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

2

)

γ>0

Cuánto mayor es gamma, más flexible es el clasificador, en el sentido de mayor curvatura 31

Support Vector Machines •

Support Vector Machines también 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 más generalizable, que “clasifique mejor a la mayoría de las observaciones”

15

– Permite obtener clasificadores más robustos al sobreajuste

Se incluye un término de penalización sobre los errores, y un parámetro C>0 que controla su importancia relativa

10

εj

Valores pequeños de C permiten mayor número de errores y definen regiones de decisión más suaves

0

5

εi

0

Modelos Predictivos con caret

5

10

15

20

32

Función train() •

La función train() es la función más importante del paquete caret



Esta función actúa en dos pasos: – Se evalúa la capacidad predictiva del modelo (performance) para diferentes parámetros (tuning parameters), usando técnicas de remuestreo

– Se seleccionan los parámetros ó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

Función train() •

Parámetros – x:

matriz o dataframe que contiene las variables predictoras

– y:

vector que contiene la variable respuesta

– form :

fórmula para indicar las variables predictoras y la respuesta

– data :

dataframe que contiene los datos

– method: método de construcción del modelo predictivo (ver tabla) – preProcess: Pre-procesamiento de los datos “center”, “scale”, “range”, “BoxCox”, “pca” – metric:

medida de capacidad predictiva para elegir el parámetro óptimo “RMSE”, “Rsquared”, “Accuracy”, “Kappa”, “ROC”

Modelos Predictivos con caret

34

Función train() •

Parámetros – trControl: controla la construcción del modelo y el proceso de la técnica de remuestreo usada (*) – tuneGrid: dataframe con los valores de los parámetros a evaluar Los nombres de las columnas deben coincidir con los nombres de los parámetros (ver tabla) – tuneLength: número de niveles para cada parámetro 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

Parámetro trControl= de la función train() •

Parámetros – method : método de remuestreo: “boot” (bootstrapping), “none” (ajusta un único modelo) “cv” (validación cruzada), “repeatedcv” (CV repetida), “LOOCV” – number : número de particiones en la CV o número de iteraciones – repeats : número de veces que se repite la CV (“repeatedcv”) – summaryFunction : una función que evalúa 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: Evaluación de Parámetros > > > > > > + + > > > +

## Suppor Vector Machine. Construcción del Modelo Predictivo ## Control de la Técnica de Remuestreo fiveStats = function(...) c (twoClassSummary(...), defaultSummary(...)) cv.ctrl = trainControl ( method = "repeatedcv", number = 10 , repeats = 5, classProbs = TRUE, summaryFunction = fiveStats ) ## Parámetros 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 función train() se debe especificar la técnica de remuestreo con la que se va a evaluar el modelo: 5 times 10-fold CV



Además 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 añade “twoClassSummary” lo que permite calcular las medidas asociadas a las curvas ROC



Se especifican los valores de los 2 parámetros de SVM que se van a explorar ( .C y .sigma ) . La función expand.grid() crea un dataframe con todas las combinaciones

Modelos Predictivos con caret

37

Ejemplo: Evaluación de Parámetros > ## Construcción 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 función train() se especifican las variables predictoras y la variable respuesta



Se van a construir varios modelos con SVM con la función radial (method=“svmRadial”, que usa el paquete kernlab que es cargado por caret ), para todos los parámetros especificados (tuneGrid=)



Se considera el mejor modelo como el que tiene mayor AUC de la curva ROC (metric=“ROC” ) evaluado con la técnica de remuestreo especificada ( trControl= )

Modelos Predictivos con caret

38

Ejemplo: Evaluación de Parámetros 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 parámetros

Modelos Predictivos con caret

39

Ejemplo: Evaluación de Parámetros > names(svm.fit) [1] "method" "modelInfo" "modelType" "results" [6] "bestTune" "call" "dots" "metric" [11] "finalModel" "preProcess" "trainingData" "resample" [16] "perfNames" "maximize" "yLimits" "times" > > ## Parámetros ó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: Evaluación de Parámetros > > > > >

## Gráfico del AUC respecto a los 2 parámetros 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

0

20

40

60

Cost

Modelos Predictivos con caret

80

100

0.6

0.5

0.4

0.3

0

20

40

60

80

100

Cost

41

Ejemplo: Evaluación de Parámetros > ## Gráfico del AUC respecto a los 2 parámetros > 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

1

5

10

50

100

Cost ROC (Repeated Cross-Validation)

Modelos Predictivos con caret

42

Ejemplo: Modelo Predictivo Final > ## Modelo Final, construido con los parámetros ó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 parámetros óptimos



El objeto $finalModel es de la clase que le asigna el paquete con el que ha sido construido. Se podrían 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 función predict() permite obtener las clases predichas por el “modelo final” construido con la muestra de training, para cada observación del dataframe especificado en newdata=



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



La función predict() también permite calcular las probabilidades predichas (type=“prob”) y devuelve una columna por cada clase

Modelos Predictivos con caret

44

Ejemplo: Validación 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 función confusionMatrix() del paquete caret permite mostrar la tabla de confusión del modelo con diferentes estadísticos asociados



Se observa el sobreajuste si se evalúa el modelo en la muestra de training

Modelos Predictivos con caret

45

Ejemplo: Validación externa

La función 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 validación 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 función 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 > ## Gráfico > 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 Técnica 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 información del proceso de remuestreo



Permite conocer qué observaciones fueron elegidas en cada partición del proceso de validación 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 información del proceso de remuestreo en el modelo final, construido con los parámetros óptimos



Tiene información sobre las medidas de capacidad predictiva de los 5x10 modelos construidos en el proceso de validación cruzada con los parámetros ó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

0

Density

0

1

1

2

2

1.0

3

3

1.5

4

4

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

1

0.5

2

1.0

3

1.5

4

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

Métodos de regresión penalizados. LASSO •

Los métodos de regresión penalizados introducen una penalización en la función de pérdida a ser optimizada (loss function) – Los estimadores “cásicos” en regresión lineal y regresión logística 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 restricción L1-penalty: la suma de los valores absolutos de los coeficientes de regresión debe ser menor que una constante C



En un problema de regresión logística, LASSO maximiza la función p   ˆβ = max logL(mod) - λ ⋅ βj   ∑ β j=1  

L(mod) es la función de verosimilitud

– Muchos de los coeficientes estimados por LASSO son 0 – Lambda es un parámetro del modelo que se debe optimizar Modelos Predictivos con caret

52

Ejemplo: LASSO > ## Control de la Técnica de Remuestreo: 100 muestras bootstrap > boot.ctrl = trainControl ( method = "boot" , number = 100, classProbs = T ) > ## Parámetros a explorar. Con el paquete glmnet alpha = 1 para LASSO > glmnetGrid = expand.grid ( .alpha = 1 , + .lambda = seq ( .001 , .1 , length=20 ) ) > ## Construcción 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 parámetro .alpha=1



Se usa boostrapping como técnica 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 > > > > >

## Gráfico del Accuaracy y Kappa frente al Parámetro 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 función coef() del paquete glmnet para extraer los coeficientes de regresión del modelo

Modelos Predictivos con caret

56

Random Forest •

Random Forest es una técnica de machine learning que consiste en la construcción de una gran número de árboles con las siguientes características: –

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



Cada división 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 clasificación y regresión



Random Forest analiza eficientemente un gran número de variables, sin tener que hacer selección previa



Random Forest tiene dos parámetros de tuning: el número de árboles y el número de predictores que son evaluados en cada división

Modelos Predictivos con caret

57

Ejemplo: Random Forest > > > > > > > > + + + +

## Control de la Técnica de Remuestreo: 10-fold CV boot.ctrl = trainControl ( method = "cv" , number = 10, classProbs = T ) ## Parámetros a explorar rfGrid = expand.grid ( .mtry = c ( 5, 10, 25, 50, 75, 100 ) ) ## Construcción 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 parámetro ntree=1000 nos indica que se va a construir RF con 1000 árboles. No es un parámetro de la función train(), es un parámetro de la función randomForest()



El único parámetro a optimizar en RF en la función train() es el número de variables predictoras que son evaluados de forma aleatoria en cada división del árbol ( .mtry )



Se usa 10-fold CV, validación cruzada con 10 particiones, como técnica 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 categóricas definidas como factores



calibration() : crea un gráfico de calibración para comparar probabilidades observadas y predichas



sensitibity() : calcula la sensibilidad, especificidad, …



rfe() : Recursive Feature Elimination. Es un algoritmo de selección de variables, basado en la eliminación de las variables menos importantes – Es una función con parámetros muy parecidos a train()



caret también incorpora funciones para construir modelos predictivos con técnicas que no tienen paquetes específicos en R (modalidades de bagging)

Modelos Predictivos con caret

60

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.