flowchart LR original["Muestra o<br>población"] ==> train original --> test train["Datos de<br>entrenamiento"] ==> m(("Modelo")) test("Datos de prueba") -.-> m -.-> testc("Datos de prueba<br>categorizados") test ---> eval(("Evaluación")) testc -.-> eval
SML - Clasificación
Investigar un poco… hay artículos en internet que lo explican
El modelo entrenado con una muestra de entrenamiento se pone a prueba con una muestra distinta de la misma población (muestra de prueba).
En ocasiones se segmenta la muestra original (una parte se utiliza para entrenar el modelo y la otra para comprobar su bondad).
Máquinas de vectores de soporte (SVM)
Respecto a KNN
- útil en espacios multi-dimensionales
- útil cuando hay más dimensiones que casos
- evitar overfitting
- más sensible al ruido
- computacionalmente complejo
SVM es útil en espacios multi-dimensionales o donde el número de dimensiones sea mayor que el de casos.
caTools::sample.split()
recibe un vector factorizado y un porcentaje. Devuelve dos grupos donde las proporciones del factor están preservadas (sirve para crear grupos de entrenamiento y comprobación).
<- caTools::sample.split(iris$Species, SplitRatio = 0.7)
split <- iris[split, ]
data_train <- iris[!split, ] data_test
Modelado
El paquete e1071
contiene una función para modelar SVM
<- e1071::svm(Species ~ ., data = data_train) svm_iris
Se realiza las predicciones
<- predict(svm_iris, newdata = data_test)
pred_iris pred_iris
9 13 14 17 20 21 30
setosa setosa setosa setosa setosa setosa setosa
31 37 39 41 42 47 48
setosa setosa setosa setosa setosa setosa setosa
50 54 61 68 71 72 73
setosa versicolor versicolor versicolor versicolor versicolor versicolor
74 75 90 91 93 95 96
versicolor versicolor versicolor versicolor versicolor versicolor versicolor
98 99 102 107 122 125 126
versicolor versicolor virginica versicolor virginica virginica virginica
129 135 138 139 141 143 144
virginica virginica virginica versicolor virginica virginica virginica
145 149 150
virginica virginica virginica
Levels: setosa versicolor virginica
Evaluación del modelo
El paquete caret
(C
lassification A
nd RE
gression T
raining) contiene muchas herramientas útiles en SML
Después comprobamos las predicciones con las etiquetas contenidas en los datos de prueba:
<- caret::confusionMatrix(pred_iris, data_test$Species)
conf_matr_iris conf_matr_iris
Confusion Matrix and Statistics
Reference
Prediction setosa versicolor virginica
setosa 15 0 0
versicolor 0 15 2
virginica 0 0 13
Overall Statistics
Accuracy : 0.9556
95% CI : (0.8485, 0.9946)
No Information Rate : 0.3333
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 0.9333
Mcnemar's Test P-Value : NA
Statistics by Class:
Class: setosa Class: versicolor Class: virginica
Sensitivity 1.0000 1.0000 0.8667
Specificity 1.0000 0.9333 1.0000
Pos Pred Value 1.0000 0.8824 1.0000
Neg Pred Value 1.0000 1.0000 0.9375
Prevalence 0.3333 0.3333 0.3333
Detection Rate 0.3333 0.3333 0.2889
Detection Prevalence 0.3333 0.3778 0.2889
Balanced Accuracy 1.0000 0.9667 0.9333
k-nearest neighbours (KNN)
Respecto a SVM:
- el modelo se construye durante la fase de predicción
- menos sensible al ruido
- sensible a outliers
- peor rendimiento en espacios multidimensionales
La clasifiación se realiza midiendo la distancia entre observaciones no categorizadas e infieriendo sus clases por sus vecinos más cercanos
La función knn
entrena el modelo y hace las predicciones en un mismo tiempo
knn(train, # el modelo de entrenamiento
# los datos de prueba
test, # las etiquetas de 'train'
cl, k = 1) # el número de 'vecinos' que se consideran
# Selecciona 50 filas aleatorias de 'iris' para los datos de entrenamiento...
<- sample(150,50)
trn
# ... y para poner a prueba el modelo
<- sample(150,50)
new
# Entrena el modelo
<- class::knn(iris[trn, -5],
iris_knn -5],
iris[new,$Species[trn],
irisk = 20,
prob = TRUE)
# Comprueba:
table(iris_knn, # - las conclusiones del modelo
$Species[new]) # - con la realidad iris
iris_knn setosa versicolor virginica
setosa 16 0 0
versicolor 0 18 3
virginica 0 1 12
# Esto devuelve la tasa de aciertos:
mean(iris_knn == iris$Species[new])
[1] 0.92
Random forest
Los modelos random forest son modelos no-lineales robustos que previene el over-fitting, pero requiere un ajuste manual de los parámetros.
Están basados en árboles de decisiones, que segmentan los datos y los clasifican en cada rama. Un número excesivo de ramas lleva a over-fitting (considerar que el ruido de la muestra es relevante).
Para evitar esto se puede “podar” el árbol limitando el número de iteraciones posibles, o limitando el número de ramas que se consideran una vez generado el modelo.