-
Notifications
You must be signed in to change notification settings - Fork 0
/
Chap00_motivacion.Rmd
162 lines (129 loc) · 5.51 KB
/
Chap00_motivacion.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# Motivación
Durante este capítulo se exploran distintas aplicaciones de R
## Image Recognition: Cats vs Dogs
En 2013 se hosteó uno de los problemas más populares en la plataforma [Kaggle](www.kaggle.com/). El problema consiste en dada un conjunto de fotos de entrenamiento, poder crear un modelo que permitiera clasificar correctamenta a Gatos de Perros. Actualmente este problema ya es algo fácil de resolver y es de conocimiento popular como lograr un buen resultado en este tipo de problemas de clasificación. El siguiente código está basado en el código original del usuario de Kaggle [Tiago Marques](https://www.kaggle.com/tfrmarques). Si es un usuario que va iniciando en R, se recomienda tomar este capítulo como motivacional, ya que tiene el grado de complejidad es medio, no adecuado para usuarios que van iniciando en R. Un ejemplo de imagenes mostradas son:
![](figures/chapter00/00-dogs-cats.png)
Básicamente consiste en 4 secciones:
1. Cargar librerias y funciones auxiliares
2. Dividir el conjunto inicial de datos en conjuntos de Train - Test
3. Definir y entrenar el modelo en Keras
4. Predecir para nuevas observaciones
### 1) Cargar librerias y funciones auxiliares
```{r load_libs, include=FALSE}
# En este chunk de código se cargan las distintas librerias
library(tidyverse)
library(keras)
library(imager)
library(reticulate)
library(magick)
library(tensorflow)
library(fsbrain)
use_condaenv('r-reticulate')
source("aux/dogs-vs-cats/train_prep.R")
source("aux/dogs-vs-cats/test_prep.R")
source("aux/dogs-vs-cats/extract_features.R")
source("aux/dogs-vs-cats/reshape_features.R")
source("aux/dogs-vs-cats/predict_test.R")
flag <- file.exists("lista_cats_dogs.RDS")
if(flag){
lista <- readRDS("lista_cats_dogs.RDS")
conv_base = lista$conv_base
x_test = lista$x_test
train_datagen = lista$train_datagen
x_train = lista$x_train
y_train = lista$y_train
train = lista$train
model = lista$model
pred = lista$pred
rm(lista)
gc()
}
cats<- list.files(path = "data/dogs-vs-cats/train/", pattern = "cat.+")
dogs<- list.files(path = "data/dogs-vs-cats/train/", pattern = "dog.+")
size = 150
channels = 3
if(!flag){
conv_base <- application_inception_v3(
weights = "data/dogs-vs-cats/inception_v3_weights_tf_dim_ordering_tf_kernels_notop.h5",
include_top = FALSE,
input_shape = c(size, size, channels)
)
}
```
### 2) Train - Test Split
```{r data_split, include=FALSE}
if(!flag){
train <- c(cats[1:3000],dogs[1:3000])
train <- sample(train)
x_test <- test_prep(list.files(path = "data/dogs-vs-cats/test/"), size, channels)
train_datagen <- image_data_generator(rescale = 1/255)
batch_size = 50
id <- list.files(path = "data/dogs-vs-cats/test/")
id<- gsub("dog.|cat.|.jpg", "", id)
x_train <- train_prep(train, size, channels)
y_train <- as.numeric(grepl("dog.", train, ignore.case = TRUE))
train <- extract_features(x_train, y_train, 6000)
train$features <- reshape_features(train$features)
}
```
![](figures/chapter00/00_arrange.png)
### 3) Definición y entrenamiento de modelo (Keras)
```{r train, include=FALSE}
if(!flag){
model <- keras_model_sequential() %>%
layer_dense(units = 256, activation = "relu",
input_shape = 3 * 3 * 2048) %>%
layer_dropout(rate = 0.5) %>%
layer_dense(units = 1, activation = "sigmoid")
model %>% compile(
loss = "binary_crossentropy",
optimizer = optimizer_rmsprop(lr = 1e-4),
metrics = c("accuracy")
)
model %>% fit(
train$features, train$labels,
epochs = 10
)
pred <- predict_test(ts = x_test, id = id, size = 2500)
}
```
### 4) Predicción de nuevos datos
```{r predict, include=FALSE}
i = 1899
name <- paste0("data/dogs-vs-cats/test/",pred$ids[i],".jpg")
img <- magick::image_read(name)
ifelse(round(pred$predictions[i],digits = 0) == 1, "perro", "gato")
plot(img)
```
## Motivación Data Visualization
R tiene un framework para crear gráficas que (creo yo) es de los más versátiles para cosas estáticas. Este framework es llamado ggplot. Además de ese framework cuenta con otros como lattice o base, pero en general están en desuso.
```{r}
library(alluvial)
library(ggalluvial)
library(magrittr)
data(vaccinations)
cbPalette <- c("#999999", "#E69F00", "#56B4E9", "#009E73", "#F0E442",
"#0072B2", "#D55E00", "#CC79A7")
levels(vaccinations$response) <- rev(levels(vaccinations$response))
vaccinations %>% ggplot(
aes(x = survey,
fill = response,
stratum = response,
alluvium = subject,
weight = freq)) +
geom_flow() +
geom_stratum(alpha = .8) +
geom_text(stat = "stratum", infer.label = TRUE, size = 2.5) +
theme_bw() + theme(legend.position = "none",
panel.background = element_rect(fill = NA),
panel.grid.major.y = element_line(size = 1),
panel.grid.major.x = element_line(size = 0),
panel.grid.minor = element_line(size = 0),
axis.line = element_line(size = 0),
panel.border = element_rect(size = 0)) +
scale_fill_manual( values = c(cbPalette, "#999999", "#999999")) +
theme(legend.position = "none") +
labs(title = "Respuestas en encuestas de vacunación en tres puntos en el tiempo",
x = "encuesta", y = "numero de personas")
```
Si notan, el texto para crear la grafíca es largo y parece dificil, pero con practica todos estos comandos se vuelven intuitivos. Para esta intro a visualización de datos, solamente veremos diferentes tipos de gráficas y en capitulos siguientes profundizaremos en creación de gráficas. Además veremos conceptos básicos de bases de datos.