Instalamos el conjunto de datos y cambiamos la columna clase a “Factor”
tabla <- read.csv("Propietarios.csv")
tabla$Clase <- as.factor(tabla$Clase)
str(tabla)
## 'data.frame': 24 obs. of 4 variables:
## $ Hogar : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Ingreso: num 60 85.5 64.8 61.5 87 ...
## $ Tamaño : num 18.4 16.8 21.6 20.8 23.6 19.2 17.6 22.4 20 20.8 ...
## $ Clase : Factor w/ 2 levels "No propietario",..: 2 2 2 2 2 2 2 2 2 2 ...
tabla
## Hogar Ingreso Tamaño Clase
## 1 1 60.0 18.4 Propietario
## 2 2 85.5 16.8 Propietario
## 3 3 64.8 21.6 Propietario
## 4 4 61.5 20.8 Propietario
## 5 5 87.0 23.6 Propietario
## 6 6 110.1 19.2 Propietario
## 7 7 108.0 17.6 Propietario
## 8 8 82.8 22.4 Propietario
## 9 9 69.0 20.0 Propietario
## 10 10 93.0 20.8 Propietario
## 11 11 51.0 22.0 Propietario
## 12 12 81.0 20.0 Propietario
## 13 13 75.0 19.6 No propietario
## 14 14 52.8 20.8 No propietario
## 15 15 64.8 17.2 No propietario
## 16 16 43.2 20.4 No propietario
## 17 17 84.0 17.6 No propietario
## 18 18 49.2 17.6 No propietario
## 19 19 59.4 16.0 No propietario
## 20 20 66.0 18.4 No propietario
## 21 21 47.4 16.4 No propietario
## 22 22 33.0 18.8 No propietario
## 23 23 51.0 14.0 No propietario
## 24 24 63.0 14.8 No propietario
Aseguramos que se pueda visualizar la tabla y que la columna sea debidamente cambiada
Mediante un muestreo aleatorio, separamos el conjunto de entrenamiento y en cojunto de prueba. Además, buscaremos el valor óptimo de k, (número de vecinos más cercanos).
set.seed(2020)
library(caret)
folds <- createFolds(tabla$Clase, k = 5)
entrenamiento <- tabla[c(folds$Fold1,folds$Fold2,folds$Fold3,folds$Fold4),]
prueba <- tabla[folds$Fold5,]
dim(entrenamiento)[1]
## [1] 18
dim(prueba)[1]
## [1] 6
Utilizaremos la libreria kknn. En esta paquetería se usa la función train.kknn(), a la cual se le debe indicar el valor máximo de k y ella determina el valor óptimo.
library(kknn)
modelo <- train.kknn(Clase ~ ., data = entrenamiento, kmax = 8)
modelo
##
## Call:
## train.kknn(formula = Clase ~ ., data = entrenamiento, kmax = 8)
##
## Type of response variable: nominal
## Minimal misclassification: 0.1666667
## Best kernel: optimal
## Best k: 1
Notemos que encuentra como valor óptimo k=1 vecinos.
Pres <- predict(modelo, entrenamiento[,-4])
tt <- table(entrenamiento[,4],Pres)
tt
## Pres
## No propietario Propietario
## No propietario 9 0
## Propietario 0 9
Podemos observar en la tabla, en las filas la clasificación real y en las columnas la predicción.
TA <- (sum(diag(tt)))/sum(tt)
round(TA,2)
## [1] 1
Podemos hablar de una precisión del 100%.
Pred <- predict(modelo, prueba[,-4])
table <- table(prueba[,4],Pred)
table
## Pred
## No propietario Propietario
## No propietario 3 0
## Propietario 1 2
clas <- (sum(diag(table)))/sum(table)
clas
## [1] 0.8333333
Encontramos que el modelo logra predecir un 83% los datos de prueba.
###Construímos el modelo con los mismos datos
library(C50)
modelo2 <- C5.0(Clase ~ ., data = entrenamiento)
modelo2
##
## Call:
## C5.0.formula(formula = Clase ~ ., data = entrenamiento)
##
## Classification Tree
## Number of samples: 18
## Number of predictors: 3
##
## Tree size: 2
##
## Non-standard options: attempt to group attributes
Visualizamos el árbol de decisión
plot(modelo2)
Para detallar un nodo en particular, esta visualización permite:
plot(modelo2, subtree=2)
pred<- predict(modelo2,entrenamiento[,-4],type="class")
tt<- table(pred,entrenamiento[,4])
tt
##
## pred No propietario Propietario
## No propietario 9 0
## Propietario 0 9
TA <- (sum(diag(tt)))/sum(tt)
round(TA,2)
## [1] 1
Podemos hablar de una precisión del 100%.
Pred2 <- predict(modelo2, prueba[,-4],type="class")
table1 <- table(prueba[,4],Pred2)
table1
## Pred2
## No propietario Propietario
## No propietario 3 0
## Propietario 0 3
(sum(diag(table1)))/sum(table1)
## [1] 1
Encontramos que el modelo logra predecir un 100% los datos de prueba.