2.5 Python implementation
Perfilado de sección
-
Implementación en Python
Descripción
Esta sección proporciona una breve introducción al algoritmo de perceptrón y al conjunto de datos de la compuerta lógica AND que usaremos en este tutorial. NOTA: Se sugiere modificar el algoritmo para obtener el conjunto de datos de entrenamiento en forma estocástica.
Inicialización
import pandas as pd import numpy as np data = [[-1,-1, 1,-1], [-1, 1, 1,-1], [ 1,-1, 1,-1], [ 1, 1, 1, 1]] pd.DataFrame(data, index=list(range(len(data))), columns=['X1', 'X2','bias','Y'])
Cálculo de la salida
### Ver sección "2.2 Evolución del perceptrón"### prediction = sign(np.dot(weight, training))
Función de activación
### Ver sección "2.2 Evolución del perceptrón"### def sign(x): if x > 0: return 1.0 elif x < 0: return -1.0 else: return 1.0
Cálculo del error
### Ver sección "2.4 Función de pérdida"### error = desired - prediction sse += error**2
Actualización de los pesos
### Ver sección "2.3 Enseñar para que aprenda"### weight = weight + error * training
Algoritmo Completo
def sign(x): if x > 0: return 1.0 elif x < 0: return -1.0 else: return 1.0 import pandas as pd import numpy as np data = [[-1,-1, 1,-1], [-1, 1, 1,-1], [ 1,-1, 1,-1], [ 1, 1, 1, 1]] pd.DataFrame(data, index=list(range(len(data))), columns=['X1', 'X2','bias','Y']) train_data = pd.DataFrame(data, index=list(range(len(data))), columns=['X1', 'X2','bias','Y']) train_Y = train_data.Y train_data = train_data[['X1', 'X2','bias']] train_data.head() weight = np.zeros(train_data.shape[1]) for epoch in range(100): sse = 0.0 for sample in range(train_data.shape[0]): training = train_data.loc[sample].values desired = train_Y.loc[sample] prediction = sign(np.dot(weight, training)) error = desired - prediction sse += error**2 weight = weight + error * training print(f'SSE: {sse}') if sse == 0: break print(f'Weights: {weight}, Epoch: {epoch+1}')