Introducción

RStudio ha implementado una librería con la cual interactuar con el lenguaje Python. Esto aumenta las posibilidades por cuanto se tiene acceso tanto a las librerías de R como a las de Python para realizar el modelamiento.

En este ejercicio, se realiza un modelamiento de redes neuronales mediante Keras, pero direccionado por un RMarkdown de RStudio.

Keras de Python es una interfaz para hacer más amigable TensorFlow. Mi instalación de Python se realizó por medio de la distribución Anaconda.

La librería de R es reticulate y las de Python son genfromtxt desde numpy y Sequential y Dense desde keras.

## Using TensorFlow backend.

La base de datos es pima indians diabetes bajada desde Kaggle, un archivo plano.

El objetivo del conjunto de datos es predecir de forma diagnóstica si un paciente tiene diabetes o no, basándose en ciertas mediciones diagnósticas.

Pregnancies Glucosa BloodPresure SkinThickness Insulin BMI DiabetesPedigreeFunction Age
6 148 72 35 0 33.6 0.627 50
1 85 66 29 0 26.6 0.351 31
8 183 64 0 0 23.3 0.672 32
1 89 66 23 94 28.1 0.167 21
0 137 40 35 168 43.1 2.288 33
5 116 74 0 0 25.6 0.201 30

Como se observa, todas son variables numéricas contínuas, excepto el número de embarazos.

Se crea un modelo neuronal secuencial con una capa de entrada (input layer) donde se le definen ocho entradas, las variables diagnósticas.

La capa de salida presenta si tiene o no diabetes, así que se usa una función de activación sigmoidal.

Em medio tiene dos capas (hidden layers). Cada capa se inicializa mediante un número aleatorio tomado de una distribución uniforme. Keras ajusta el rango de este número aleatorio entre 0 y 0.05 por defecto. ¿Tiene que ver con la tasa de aprendizaje?

La función de activación de la capa de entrada y las invisibles es relu (rectified linear activation unit), estándar actual debido a que ha mostrado sus bondades por simplicidad, rápidez computacional y tipo de representación 1.

Las capas se han relacionado entre sí de manera densa.

La primera capa invisible tiene doce neuronas, y la segunda ocho.

Para la compilación del modelo se utilizó una función de pérdida logarítmica, que en Keras se denomina ‘binary-crossentropy’. Al inicio permite cambios grandes y va esperando cambios cada vez menores a medida se acerca a una solución. Y el algoritmo de gradiente decendente utilizado es adam, el utilizado por defecto por su eficiencia.

Por ahora la métrica de medición es la certeza (accuracy).

Se ajusta el modelo sobre los datos cargados por medio de 150 iteraciones (epochs), pero se actualizan los coeficientes de las combinaciones lineales (weights) cada diez.

# crea el modelo
for train, test in kfold.split(X, Y):
  model = Sequential()
  model.add(Dense(12, input_dim=8, kernel_initializer='uniform' , activation='relu'))
  model.add(Dense(8, kernel_initializer='uniform', activation='relu'))
  model.add(Dense(1, kernel_initializer='uniform', activation='sigmoid'))
# compila el modelo
## WARNING:tensorflow:From C:\Users\Fernando\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.
## Instructions for updating:
## Colocations handled automatically by placer.
model.compile(loss = 'binary_crossentropy' , optimizer = 'adam' , metrics = ['accuracy'])
# Ajusta el modelo
model.fit(X[train], Y[train], epochs=150, batch_size=10, verbose=0)
# evalua el modelo
## <keras.callbacks.History object at 0x0000000034E67BA8>
## 
## WARNING:tensorflow:From C:\Users\Fernando\Anaconda3\lib\site-packages\tensorflow\python\ops\math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.
## Instructions for updating:
## Use tf.cast instead.
scores = model.evaluate(X[test], Y[test], verbose=0)

Se muestra el código python relacionado con el modelamiento con el objeto de que se observe cómo procesa código python.

El ajuste es del 77.6315786%, basado en una validación cruzada k-fold con k = 10.


  1. https://machinelearningmastery.com/rectified-linear-activation-function-for-deep-learning-neural-networks/