Академический Документы
Профессиональный Документы
Культура Документы
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
Paquete caret
Paquete caret
method
Type
Argum. Value
Packages
Tuning
Parameteres
Linear Regression
lm
Regr
None
glm
Dual
None
Class MASS
None
Penalized Regression
glmnet
Dual
glmnet
alpha, lambda
leapSeq
Regr
leaps
nvmax
pcr
Regr
pls
ncomp
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
fL, usekernel
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
svmLinear
Dual
kernlab
svmRadial
Dual
kernlab
sigma, C
Multivariate Adaptive
Regression Spline
earth
Dual
earth
nprune, degree
gam
Dual
mgcv
select, method
gbm, plyr
n.trees,
interaction.depth,
shrinkage
gbm
Dual
Pre-procesamiento
x 1
0
x* =
log(x ) = 0
Modelos Predictivos con caret
10
Clasificacin y Regresin
11
Evaluacin de Modelos
12
Y=1
Y=2
Y=k
Y=1
F11
F12
F1k
Y=2
F21
F22
F2k
...
Y=k
Fk1
Fk2
Fkk
Accuracy =
Modelos Predictivos con caret
F
i =1
ii
Error Rate =
ij
i =1, j=1,i j
N
13
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
VP
Sensibilid ad =
VP + FN
Modelos Predictivos con caret
VN
Especificidad =
VN + FP
14
15
1 N
MSE = ( y i y i ) 2
N i =1
RMSE = MSE
SSR
SST
(
)
y
y
i
=
2
(y i y )
= 1
ei
(y
y)
16
17
18
5-fold CV
Testing
Evaluacin
Muestra
..
(K=5 particiones)
Particin
aleatoria
Training
Modelo 5
Testing
Evaluacin
19
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
N-1
(N particiones)
Modelo N
Evaluacin
obs. N
Y
N
YN
20
21
Descripcin
Categoras / Observaciones
128 Variables
Expresin de protenas
Biomarcadores exploratorios
age
Edad
male
Gnero
E4, E3, E2
Class
Presencia de Alzheimer
training
1 = training, 0 = testing
0 = mujer, 1 = hombre
22
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
24
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
25
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
0.8
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
27
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
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
29
15
Vectores soporte
Vectores soporte
10
Margen
10
15
20
30
K ( x , z) = exp x z
Modelos Predictivos con caret
>0
15
10
10
15
20
32
Funcin train()
33
Funcin train()
Parmetros
x:
y:
form :
data :
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
...
35
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)
36
37
. . . . . .
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= )
38
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
39
"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
ROC
Kappa
Sigma
0.001
0.005
Sigma
0.01
0.05
0.001
0.005
0.01
0.05
0.88
0.86
0.84
0.82
20
40
60
Cost
80
100
0.6
0.5
0.4
0.3
20
40
60
80
100
Cost
41
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)
42
43
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=
44
:
:
:
:
:
:
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
45
0.6
0.4
0.2
0.0
Sensitivity
0.8
1.0
1.0
0.8
0.6
0.4
0.2
0.0
Specificity
46
. . .
> 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
47
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
"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
49
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
Tiene informacin sobre las medidas de capacidad predictiva de los 5x10 modelos
construidos en el proceso de validacin cruzada con los parmetros ptimos
50
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
0.7
0.8
0.9
1.0
1.1
0.0
0.5
1.0
51
= max logL(mod) -
j
j=1
L(mod) es la funcin de
verosimilitud
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
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
54
Ejemplo: LASSO
>
>
>
>
>
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
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
56
Random Forest
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
57
Para construir un modelo con Random Forest usamos method=rf que usa el
paquete randomForest
58
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
59
60