sábado, 30 de junio de 2018

Ejemplo de redes neuronales con SAS

Existen diferentes opciones para implementar una red neuronal con SAS. Una primera opción sería emplear el módulo SAS Visual Data Mining de la plataforma SAS Viya que de forma muy visual nos permite trabajar con este tipo de algoritmos.


Una segunda opción es utilizar SAS Enterprise Miner que tiene nodos para implementar diferentes tipos de redes neuronales dentro de un workflow analítico:

En nuestro ejemplo vamos a usar el módulo SAS/STAT que mediante programación SAS BASE nos permite trabajar con redes neuronales utilizando el procedimiento PROC NEURAL
En nuestro ejemplo partimos de un fichero que contiene pruebas clínicas  donde tenemos
las variables var1 a var7 que guardan el resultado de pruebas clínicas y la variable target 1/0 indica si el paciente tiene o no la enfermedad de estudio. Queremos predecir la probabilidad de enfermedad en base a los valores de las pruebas clínicas. Como es habitual, partimos de un dataset de entrenamiento (test) y otro de validación (validar).  El código para implementarlo es el siguiente:


/* Para usar el procedimiento NEURAL necesitamos crear previamente una  data
   mining database (DMDB) que guarda info de metadata sobre los datos originales */

proc dmdb batch data = test
    out = dmtest
    dmdbcat = prucli; /*catalogo de metadata */
  var var1 - var7;
  class target;
  target target;
run;

proc dmdb batch data = validar
    out = dmvalidar
    dmdbcat = prucli; 
  var var1 - var7;
  class target;
  target target;
run;

/* Creamos el modelo */
/* Una red neuronal da mucha info en la salida por eso "nloptions noprint" está especificado */

proc neural data = test dmdbcat = prucli random = 20 /* semilla */;
  nloptions noprint;
  input var1 - var7 / level = interval; /* variables continuas */
  target target / level = nominal; /* variable nominal */
  archi MLP hidden= 2; /* arquitectura MLP=perceptron multi capa y numeros de capas ocultas */
  train maxiter = 200; /* máximo de iteraciones */
  score out = out outfit = fit; /* tabla de ajuste */
  score data = test out = resultado; /* tabla de salida con coef y predicciones */
run;

/*  Validamos el modelo */

/* Matriz de confusión: I_target: predicción y F_target = valor real */

proc sql; 
create table val as
(select F_target, I_target, count(*) as cont
from resultado
group by F_target, I_target);
quit;

No hay comentarios:

Publicar un comentario