Representación visual de una red adaline con sus nodos de entrada conectados a un nodo central

La red adaline es un modelo básico de Machine Learning utilizado principalmente para tareas de clasificación. En este artículo, aprenderás a implementar una red ADALINE utilizando normalización de datos para mejorar su rendimiento, junto con ejemplos de código y gráficos de salida.

Pasos para implementar una red ADALINE

  1. Preparar los datos
    • Usaremos un conjunto de datos para tareas de clasificación binaria. También aplicaremos normalización para garantizar que los datos tengan una escala uniforme.
  2. Definir el modelo ADALINE
    • Implementaremos la red ADALINE definiendo sus pesos, función de activación y el criterio de error.
  3. Entrenar la red ADALINE
    • Usaremos el algoritmo de descenso de gradiente para actualizar los pesos y reducir el error.
  4. Visualizar los resultados
    • Generaremos gráficos para evaluar el rendimiento y la convergencia del modelo.

Código para implementar ADALINE

A continuación, se presenta un ejemplo funcional en Python.

from sklearn import datasets
import numpy as np

# Cargar datos
iris = datasets.load_iris()
X = iris.data[0:100, [0, 2]]  # Seleccionar características
Y = iris.target[0:100]
Y = np.where(Y == 0, -1, 1)  # Convertir etiquetas

# Normalizar datos
X = (X - np.mean(X, axis=0)) / np.std(X, axis=0)

# Inicializar pesos
W = np.random.normal(loc=0.0, scale=0.01, size=X.shape[1] + 1)

# Funciones auxiliares
def aplicacion_lineal(X, W):
    return np.dot(X, W[:-1]) + W[-1]

def actualizacion_pesos(X, Y, W, eta):
    predicciones = aplicacion_lineal(X, W)
    error = Y - predicciones
    W[:-1] += eta * np.dot(X.T, error)
    W[-1] += eta * np.sum(error)
    return W

# Entrenamiento
eta = 0.01
n_iteraciones = 50
for _ in range(n_iteraciones):
    W = actualizacion_pesos(X, Y, W, eta)

Explicación del código

1. Clase PresentarDatos

Esta clase está diseñada para:

  • Visualizar un gráfico de dispersión de los datos de entrada (iris dataset).
  • Dibujar la recta de decisión que separa las dos clases en los datos.
  • Representar la función de coste para evaluar el rendimiento del modelo a lo largo de las iteraciones.

Métodos principales:

  • dibujarGraficaDispersion: Crea un gráfico de dispersión para visualizar dos clases diferentes del conjunto de datos.
  • dibujarRecta: Dibuja una recta de separación basada en los pesos (WWW) calculados por el modelo.
  • funcionCoste: Grafica cómo varía el coste en función de las iteraciones del entrenamiento.
  • pintarDatos: Llama a los métodos anteriores para generar todas las visualizaciones.

2. Funciones auxiliares

  • getDatos: Carga las primeras 100 muestras del conjunto de datos de Iris (con características específicas) y ajusta las etiquetas para trabajar con -1 y 1 (necesario para Adaline).
  • setUmbral: Modifica el conjunto de datos para incluir un término constante (bias o umbral) con valor 1 en la tercera columna de las entradas.
  • aplicacionLineal: Calcula el producto escalar entre los datos de entrada (XXX) y los pesos (WWW), añadiendo el término de umbral.
  • funcionActivacion: Devuelve directamente el valor de entrada (en este caso, la función es lineal).
  • vectorGradiente: Calcula el gradiente del error para ajustar los pesos durante el entrenamiento.

3. Entrenamiento del modelo

  • Función entrenamientoAdaline:
    • Ajusta los pesos (WWW) iterativamente minimizando el error cuadrático medio.
    • Utiliza la técnica de gradiente descendente para actualizar los pesos.
    • Guarda el coste total en cada iteración para analizar el rendimiento del modelo.

4. Ejecución

  • Obtención de datos: Los datos son cargados del conjunto Iris y procesados para adaptarse al modelo.
  • Inicialización de pesos y parámetros:
    • Los pesos (WWW) se inicializan de forma aleatoria.
    • Se definen la tasa de aprendizaje (etaetaeta) y el número de iteraciones.
  • Entrenamiento: El modelo es entrenado mediante Adaline.
  • Visualización:
    • Se crea una instancia de la clase PresentarDatos.
    • Se generan los gráficos de dispersión, la recta de decisión y la función de coste.

Resultados esperados

  1. Un gráfico de dispersión que muestra las dos clases del conjunto de datos (etiquetadas como “cero” y “uno”).
  2. Una recta de decisión que separa las clases en el espacio de características.
  3. Un gráfico de la función de coste que indica la convergencia del modelo a medida que se entrenan los pesos.

Este código combina técnicas de aprendizaje supervisado (Adaline) con visualizaciones útiles para entender cómo se ajusta el modelo a los datos.

Gráfico de la convergencia del error y otro de la frontera de decisión para analizar el rendimiento del modelo:

Grafico de dispersión de clasificación Adaline que muestra la relección entre las características sepal y petal separados por una línea de clasificación
Grafico de convergencia de error en la red adaline mostrando la disminución del error cuadrático medio a lo largo de 50 épocas