• No results found

Se definen los principales atributos y procedimientos a utilizar: Instances entren: conjunto resultante de entrenamiento

Instances test: conjunto resultante de test Instances data: conjunto inicial de datos Esfera [] esferas: conjunto de esferas creadas

NormalizarDataset (): Normaliza el espacio de descriptores

Instance compuestoMayorActividad (Instances): devuelve del conjunto como parámetro, la próxima instancia a evaluar.

double calcularRadio(Instance i1,double c): devuelve el radio según el valor de c

double clacularDistancia(Instance i1,Instance i2):devuelve la distancia euclidiana entre dos instancias.

void ejecutarExclusionEsfera(): realiza varios pasos del procedimiento de exclusión de esfera. Este método tiene el peso principal

ejecutarExclusionEsfera(): | atrib1  compuestoMayorActividad(entren) |testadicionarElemento(atrib1) |normalizarDataset() |mientras data.NúmeroElementos =!= 0 | radiocalcularRadio(atrib1,c)

| esferas[i]nuevaEsfera(atrib1,radio)

| para j0 hasta jdata.NúmeroElementos | atrib2  entren.ObtenerElemento (j) | radcalcularDistancia(atrib2,atrib1) | si rad<=radio | test.adicionarElemento(atrib2) | data.ObtenerElemento(j) | ii+1 Fin Paso previo:

PP Normalizar el espacio de descriptores.

Esta operación se realiza para optimizar los cálculos y se usa la fórmula (se aplica a todo el conjunto de datos original): según 2.1.1.2

donde Xij es el j-ésimo descriptor no normalizado para la i-ésima molécula y Xnij es el valor normalizado para dicho descriptor. Se crea un objeto de tipo vector de elementos Normalización y luego se calculan los valores máximo y mínimo por descriptor usando un método de organización ascendente por descriptores que incluye la clase Instances. Luego se realiza un desplazamiento por todo el conjunto de datos original usando los valores ya calculados y los existentes originalmente. Cada instancia ya normalizada se copia a otro conjunto, resultando un conjunto totalmente normalizado.

P1 Como primer paso del método se debe seleccionar un compuesto, por lo general se selecciona el de mayor actividad.

En la mayoría de los casos, se resuelve seleccionando el compuesto que tenga mayores valores numéricos. Se debe mencionar que existen conjuntos de datos que según su sentido físico o

químico, no coincide con el criterio antes mencionado; es decir, el compuesto de mayor actividad puede ser el de menores valores numéricos.

Esta operación puede ser tan sencilla como la creación de un ciclo para recorrer la tabla (el objeto de tipo Instances) sumando los valores numéricos de cada instancia y seleccionando la mayor de estas sumas, manteniendo a la vez una referencia de la instancia de mayores valores dentro de la tabla.

P2 Incluir el compuesto de mayor actividad en el conjunto de entrenamiento.

Esta acción consiste en tomar el conjunto de entrenamiento y llamar a un método que contiene la clase Instances agregando así la instancia seleccionada en el paso anterior. Además se debe eliminar esta instancia del conjunto original de datos para no ser utilizada en pasos posteriores.

P3 Construir una esfera cuyo centro es el punto representativo del compuesto antes seleccionado con radio según 2.1.1.1.

Donde K es el número de descriptores (variables), N es el número de compuestos (instancias) y c es el nivel de disimilaridad. Este valor debe ser variado en aras de construir varios conjuntos de entrenamiento y predicción.

Para realizar este paso, lo primero es crear un vector de tipo Esfera y como primer elemento una esfera, la cual tiene como atributos una instancia (la seleccionada en el paso 1) como centro y un radio (ya calculado).

P4 Incluir los compuestos cuyos puntos representativos están dentro de esta esfera (la distancia espacial entre la instancia-centro de la esfera y cualquier otra es menor que el radio de la esfera) en el conjunto de predicción excepto la instancia-centro de la esfera. Aquí lo principal es calcular las distancias entre todas las demás instancias respecto a la que constituye el centro de la esfera. Para esto se hace un ciclo según la cantidad de compuestos en el conjunto de datos restante y por cada una de estas instancias, se calcula la distancia. Todos aquellos elementos que cumplan esta condición se almacenan en el conjunto de predicción (esto sucede dentro del mismo ciclo cuando se llama al método add (Instance inst) del conjunto de predicción el cual existe como variable de tipo Instances).

Para no incluirlos en ningún otro cálculo posterior, se realiza un proceso de eliminación de instancias. Este ocurre con la llamada del método delete (int j) el cual elimina la instancia indexada con ese valor, todo esto dentro del mismo ciclo que controla el cálculo de las distancias antes mencionado.

P6 En el conjunto actual de datos quedan N compuestos. Si N no es igual a 0, ir al próximo paso. Si N es igual a 0; fin.

Conocer la cantidad de elementos que tiene un conjunto consiste en llamar al método numInstances() de la clase Instances, el cual devuelve la cantidad de compuestos y se hace la comparación con el valor 0.

P7 Seleccionar uno de los puntos representativos de instancias que restan, como el próximo “pivote o centro” y comenzar el proceso nuevamente.

Este paso constituye el direccionamiento del algoritmo hacia la creación de una nueva esfera y el comienzo de la siguiente iteración. Seleccionar un elemento del conjunto es llamar al método

instance (int i) de la clase Instances.

Red de Kohonen

Definición matemática del algoritmo de redes auto-organizadas.

Los mapas auto-organizados (SOM) constituyen una técnica de visualización inventada por profesor Teuvo Kohonen, la cual reduce las dimensiones del conjunto de datos a través del uso de las redes neuronales auto-organizadas. Como los humanos no pueden visualizar datos de grandes dimensiones, pues esta técnica sirve para realizar una mejor comprensión de estos datos.

SOM actúa reduciendo las dimensiones y produciendo un mapa de usualmente una o dos dimensiones en el cual se “plotea” las similitudes del conjunto de datos agrupando los elementos de datos similares. Un SOM cumple con dos objetivos; reducir las dimensiones y mostrar las similitudes.

Figura 2.1.2.1

Este es mismo conjunto de datos pero luego de aplicar este método.

Figura 2.1.2.2

Estas fotos corresponden a un conjunto de datos 3-dimensional, el cual muy usado para los experimentos con mapas auto-organizados.

La primera parte del SOM es el conjunto de datos. En el ejemplo anterior, los colores están representados en tres dimensiones (rojo, azul y verde). La idea principal de los SOM es proyectar datos n-dimensionales en algo que se pueda comprender visualmente (en este caso sería una imagen, un mapa 2-dimensional).

El segundo componente del SOM es el vector de pesos. Cada vector de pesos tiene dos elementos; el primero es el dato el cual es de la misma dimensión que el vector de muestra y el segundo

elemento es su localización natural. Lo bueno de los colores es que el dato puede ser mostrado por el color (el color es el dato) y la localización es la posición x,y del pixel en la pantalla (Germano, 1999), pero con otros valores a representar, las imágenes resultantes pueden ser diversas.

SOM permite visualizar la distribución de puntos representativos de compuestos en un espacio de descriptores multidimensional, proyectándolos en un mapa bidimensional preservando el orden de las distancias entre ellos (puntos cercanos en el espacio de descriptores multidimensionales son proyectados como puntos cercanos o incluso como un solo punto) y la alta resolución (los grupos de puntos representativos ocupan la mayor parte del mapa).

Como toda técnica de proyección, SOM maneja algunas distorsiones en la posición relativa de los puntos representativos en un mapa 2D en comparación con los puntos originales en el espacio de descriptores además de otras distorsiones porque SOM es un método no lineal. Este no proporciona un criterio cuantitativo sobre la diversidad de bases de datos moleculares, el cual podría ser por ejemplo, más apropiado para decidir la adquisición de nuevas bases de datos.

El método consiste en una entrada y capas de salida bidimensionales. El número de nodos de capas de entrada es igual al número de descriptores. El número de nodos de capas es igual a MN, donde M y N son definidos por el usuario o estimados previamente. Todos los nodos de la capa de entrada están conectados a la capa superior. La red es inicializada con una selección aleatoria de pesos Wij (i=1,..,

MN

; j=1,…,

K

) para todos los nodos de la capa de salida. Los valores iniciales de velocidad de aprendizaje α y tamaño de la vecindad del nodo están inicializados.

El proceso de entrenamiento consiste en lo siguiente:

a. Los descriptores Xnlj (l es el número del compuesto, l =1,..,K) por cada compuesto son presentados a la capa de entrada uno a la vez.

b. El nodo ganador se define como

2.1.2.1

fórmula

2.1.2.2

donde t es el número de paso. El proceso sigue hasta que se alcanza la convergencia. El tamaño de la vecindad es frecuentemente reducido.(Golbraikh, 2000)

Definición computacional del algoritmo de redes auto-organizadas.

Los mapas auto-organizadas constituyen uno de los tipos de redes más usados actualmente, emulando el comportamiento del cerebro en la resolución de algunos problemas como son el agrupamiento de patrones, análisis exploratorio, visualización y minería de datos. Se caracterizan porque en su entrenamiento no se presentan salidas objetivo que se desean asociar a cada patrón de salida sino que la red dará como resultado, una visión de las relaciones entre los patrones de entrada. (Bonifacio Martin del Brio, 1997)

Se cree (aunque no ha sido demostrado) que la información en el cerebro está organizada espacialmente y por tanto, el objetivo de estos mapas es reproducir esta organización.(Perez, 1993) Las clases que permiten la manipulación del conjunto de datos originales así como para manipular los datos como instancias son las expuestas anteriormente en la introducción del método de exclusión de esfera (Instances, Instance).

Para este tipo de red se definen dos capas de neuronas, la capa inferior, la cual contiene las neuronas censoras y la capa superior que tiene a las neuronas de salida, organizadas a modo de estructura rectangular. Cada una de las neuronas censoras está conectada a todas las neuronas de la capa superior mediante el vector de pesos Wij y estas (las neuronas superiores) están conectadas entre sí formando una malla red rectangular. Esta relación entre las neuronas de salida ofrece una medida de vecindad según la distancia entre ellas.

Figura 2.1.2.3

El proceso de aprendizaje de la red de Kohonen es no supervisado y relativamente simple. Estos tipos de modelos (no supervisados) no suelen muy complejos y presentan, como descripción, algoritmos rápidos y sencillos. En estos modelos, nada le indica a la red si está actuando correcta o incorrectamente, pues no se dispone de una salida a la cual la red neuronal deba tender. Entonces durante el proceso de aprendizaje, la red auto organizada debe encontrar por sí misma, rasgos comunes, regularidades o categorías entre los elementos de entrada e incorporarlos a su estructura interna de conexiones. Se dice en este caso que las neuronas deben auto organizarse en función de los datos que recibe. La calidad de los resultados de la red requiere un número de patrones de aprendizaje suficientemente amplio.

En el caso que se desarrolla en este trabajo, los pesos Wij entre los nodos de entrada y los de salida se inicializan con valores aleatorios pequeños y progresivamente se presentan los vectores del conjunto de entrenamiento, uno a uno. Cuando se recibe un vector de datos, se calcula la medida de distancia entre este vector y el vector de las neuronas de salida, permitiendo seleccionar el nodo de salida con distancia mínima. Luego de alcanzar este estado, los vectores de pesos de este y sus nodos vecinos son actualizados para hacerlos mas “cercanos” a la entrada actual. Como el radio va

disminuyendo en función del tiempo, la vecindad de una neurona dada se va reduciendo paulatinamente.

Para la implementación de este algoritmo, se crearon 4 clases. La clase RedKohonen y 3 clases internas Neurona, NeuronaInferior y NeuronaSuperior. Las clases NeuronaInferior y NeuronaSuperior heredan de Neurona y esta clase tiene como atributo principal un vector de pesos cuya dimensión corresponde con la de los vectores de entrada de la red. También tiene un método para calcular la distancia euclídea de esta neurona a un vector cualquiera, pasando este último, como parámetro del método y devolviendo la distancia resultante (también está implementada la función de distancia propuesta por Kohonen). Se tiene además un método para actualizar los pesos de la neurona de acuerdo a un vector parámetro de este método. La clase NeuronaInferior, usada en la clase RedKohonen para la creación de un arreglo de neuronas de este tipo. La clase NeuronaSuperior, tiene además de lo heredado de Neurona, una variable de conjunto de datos de tipo Instances, para acumular las entradas “ganadoras” para un posterior trabajo con este conjunto. La clase RedKohonen tiene, como atributos principales, un vector de neuronas inferiores, el cual representa la capa inferior de la red neuronal. Esta capa es la encargada de recibir el vector de entrada. Otro de los atributos que posee es una matriz de neuronas superiores, la cual representa el mapa con las neuronas de la capa superior. Hay una variable para “radio” y otras para “número de iteración actual” y “número total de iteraciones” donde la primera varía en función de la segunda y tercera variable.

En (Perez, 1993) se sugiere el siguiente algoritmo para generar la red de Kohonen:

P1. Inicializar los pesos. Asignar valores pequeños aleatorios a los pesos de los caminos desde los N nodos de entrada a los M de salida. Definir el radio de vecindad inicial.

P2. Presentar una entrada.

P3. Calcular distancias. Calcular las distancias Dj entre la entrada y cada nodo de salida j usando la expresión:

donde Xi (t) es la entrada a la neurona censora i en el tiempo t, y Wij es el peso desde el nodo de entrada i al de salida j en el tiempo t.

P4. Selección del nodo con distancia mínima. Seleccionar la neurona j* como la unidad de salida con distancia mínima.

P5. Actualizar los pesos.

Los pesos son actualizados para el nodo j* y todos los nodos en la vecindad de este definida por NE*j, donde

NE t

j es el conjunto de nodos considerados para estar en la vecindad del nodo j en el tiempo t. La vecindad comienza grande y lentamente decrece en el tiempo. Los nuevos pesos son:

2.1.2.4

El factor (t) es un término de ganancia o coeficiente escalar de adaptación en el rango (0< (t) <1) que decrece en el tiempo.

P6. Ir al paso P2.

Pseudocódigo

Se definen los principales atributos y procedimientos a utilizar: Instances entren: conjunto resultante de entrenamiento.

Instances test: conjunto resultante de test. Instances data: conjunto inicial de datos.

NeuronaSuperior [][] SOM: mapa con las neuronas de salida.

NeuronaSuperior nSuperior: Neurona de la capa superior que resulta ganadora para la instancia actual.

Int NumIterActual: mantiene el número de iteración.

int RADIO: radio actual. Disminuye según el número de iteraciones. inciarRed ():ejecuta la red de Kohonen. Procedimiento principal.

NeuronaSuperior calcularDistanciaNeuronaSalida(Instance inst):busca en el mapa la neurona ganadora y adiciona la instancia al conjunto de datos que tiene cada NeuronaSuperior.

void actualizarRadio(): actualiza el radio en función del número de instancias total y del número de iteración actual.

void pasoEntrenamiento(Instance instance):Procedimiento principal.

Procedimientos principales: Entre ambos ocurre la ejecución del método.

void pasoEntrenamiento(Instance instance){ |

| calcularDistanciaNeuronaSalida(instance) ;se busca en el mapa la neurona ganadora

| ;se actualiza el parámetro nSuperior

| Para i0 hasta iSOM.númeroElementos | Para j0 hasta jSOM[i].númeroElementos

| Si nSuperior.DistanciaHasta(SOM[i][j].obtenerPesos) < RADIO | SOM[i][j].actualizarPesos(instance)

iniciarRed():

| Para i0 hasta iNúmeroIteraciones

| actualizarRadio()

| instanceobtenerInstanciaDataset() | pasoEntrenamiento(instance)

| númeroIteracionActualnúmeroIteracionActual+1 Fin

Las clases NeuronaInferior y NeuronaSuperior heredan de la clase Neurona la cual se compone principalmente de:

int [] vectorPesos: vector de pesos asociado a cada neurona

int index: variable para contabilizar el número de veces que la neurona ha resultado ganadora.

Métodos principales:

double getDistancia(double vectorRefer): calcula y devuelve la distancia desde el vector parámetro al vector atributo de la neurona.

void actualizarPesos(double [] vector): actualiza el vector de la neurona según el vector parámetro del método utilizando la fórmula propuesta por la bibliografía consultada.

Se realiza la siguiente implementación del algoritmo existente en (Perez, 1993) para generar la red de Kohonen:

P1. Inicializar los pesos. Asignar valores pequeños aleatorios a los pesos de los caminos desde los N nodos de entrada a los M de salida. Definir el radio de vecindad inicial.

En el constructor de RedKohonen se inicializan las variables que representan las capas “neuronaInfer” y “SOM”. Estos a su vez activan los constructores de las clases Neurona,

NeuronaInferior y NeuronaSuperior. Es en este nivel donde se inicializan aleatoriamente y con valores pequeños, los vectores de pesos de todas las neuronas. Como se sugiere en la bibliografía(Perez, 1993), se define como radio inicial 1*10^7 con el cual, en la primera unidad de tiempo (la primera iteración) establece como vecindad de la neurona ganadora, a toda la red, pero posteriormente va disminuyendo.

P2. Presentar una entrada.

Esta acción ocurre en el método iniciarRed, el cual hace una llamada al pasoEntrenamiento (Instance inst) y entonces este otro método recibe como parámetro un vector de datos.

P3. Calcular distancias. Calcular las distancias Dj entre la entrada y cada nodo de salida j usando la expresión 2.2.3 :

donde Xi (t) es la entrada a la neurona censora i en el tiempo t, y Wij es el peso desde el nodo de entrada i al de salida j en el tiempo t.

La próxima línea a ejecutar en el método pasoEntrenamiento (Instance inst) es la llamada al método calcularDistanciaNeuronaSalida (Instance inst). En este método hay un ciclo para recorrer el mapa y por cada elemento (cada neurona superior) calcula su distancia respecto al vector pasado como parámetro.

P4. Selección del nodo con distancia mínima. Seleccionar la neurona j* como la unidad de salida con distancia mínima.

Como resultado de la llamada al método anterior, se obtiene la neurona superior ganadora, y se agrega la instancia recibida como dato en el conjunto que tienen las neuronas de la capa superior para este fin.

P5. Actualizar los pesos.

Los pesos son actualizados para el nodo j* y todos los nodos en la vecindad de éste definida por NE*j, donde

NE t

j es el conjunto de nodos considerados para estar en la vecindad del nodo j

en el tiempo t. La vecindad comienza grande y lentamente decrece en el tiempo. Los nuevos pesos son asignados según 2.2.4:

El factor (t) es un término de ganancia o coeficiente escalar de adaptación en el rango (0< (t) <1) que decrece en el tiempo.

En el método pasoEntrenamiento (Instance inst), por último se ejecuta un ciclo que recorre el mapa completamente y si la distancia entre la neurona superior ganadora en esa unidad de tiempo y la neurona superior en cuestión es menor que el radio actual, es decir; que pertenece a su vecindad, se actualiza su vector de pesos.

P6. Ir al paso P2.

Para hacer esto, la clase RedKohonen posee un método que manda a ejecutar al pasoEntrenamiento (Instance inst). Este se llama iniciarRed () y principalmente tiene un ciclo para la cantidad de iteraciones y en cada una de estas, realiza la llamada al método actualizarRadio (), que realiza un decremento del valor del radio; manda a ejecutar el método pasoEntrenamiento (), pasándole a este, una por una, todas las instancias. Incrementa además la variable de “iteración actual”.

Según (Perez, 1993), la cantidad de pasos debe ser mayor que 500 veces el número de neuronas en la red. Para (t) debe comenzar con un valor cercano a la unidad y posteriormente debe decrecer de modo monótono. Se tiene como una selección adecuada la expresión (t)= 0.9*(1-t/1000).

Método de clúster K-medias.

Definición matemática del método de clústeres K-medias

Cualquier análisis de datos, incluyendo el modelado QSAR, está basado en la suposición de la homogeneidad y la ausencia de outliers influyentes. Esto significa que el sistema investigado, es decir, la serie de compuestos, debe estar en un similar “estado”, tener suficientes propiedades similares en todo momento de la investigación, y el mecanismo de influencia de X sobre Y debe ser