Entre otras cosas con caret podemos hacer particiones para estudiar nuestros modelos con training y test, ademas, las particiones de caret guardan la proporción de clases.
library(caret)
data(Sonar)
set.seed(107)
# se crea la particion: esto obtiene de forma aleatoria unporcentaje de instancias dado por p. El metodo mantiene la proporcion deinstancias para cada valor de la variable clase
inTrain <- caret::createDataPartition(y = Sonar$Class, p = .75,
list = FALSE)
# ahora se obtienen los conjuntos de test y de entrenamiento
training <- Sonar[ inTrain,]
testing <- Sonar[-inTrain,]
# se muestra la proporcion de instancias para cada valor de la variable clase en el conjunto de datos original
summary(Sonar$Class)
## M R
## 111 97
ggplot(data=Sonar) +
geom_bar(mapping=aes(x=Class, y=..prop.., group=1))
# tambien en el de entrenamiento
summary(training$Class)
## M R
## 84 73
ggplot(data=training) +
geom_bar(mapping=aes(x=Class, y=..prop.., group=1))
# y lo mismo con el de test
summary(testing$Class)
## M R
## 27 24
ggplot(data=testing) +
geom_bar(mapping=aes(x=Class, y=..prop.., group=1))
También podemos ver de manera muy sencilla las correlaciones.
library(mlbench)
# se hace accesible el conjunto de datos PimaIndiansDiabetes
data(PimaIndiansDiabetes)
# se obtiene la matriz de correlacion de las variables predictoras
correlationMatrix <- cor(PimaIndiansDiabetes[,1:8])
# se encuentran aquellas variables que presentan valores de correlacion
# por encima del valor umbral
highlyCorrelated <- caret::findCorrelation(correlationMatrix,
cutoff=0.3)
print(highlyCorrelated)
## [1] 4 5 8
El resultado nos dice las variables altamente correladas, alguna de ellas podríamos suprimirla en el proceos de seleccion de variables.
También podemos ver la importancia de las variables.
library(pROC)
# se fija la semilla para asegurar la reproducibilidad de los
# resultados
set.seed(7)
# carga el conjunto de datos
data(PimaIndiansDiabetes)
# prepara el esquema de entrenamiento
control <- caret::trainControl(method="repeatedcv", number=10,
repeats=3)
# aprende el modelo
modelo <- caret::train(diabetes~., data=PimaIndiansDiabetes,
method="lvq", preProcess="scale",
trControl=control)
# estima la importancia de las variables a partir del modelo
importance <- caret::varImp(modelo, scale=FALSE)
# muestra los datos del analisis
print(importance)
## ROC curve variable importance
##
## Importance
## glucose 0.7881
## mass 0.6876
## age 0.6869
## pregnant 0.6195
## pedigree 0.6062
## pressure 0.5865
## triceps 0.5536
## insulin 0.5379
# representa graficamente los resultados
plot(importance,lw=3)
Parece que la glucosa, la edad y el indice de masa corporal son muy importantes para determinar si se tiene o no diabetes.