SlideShare una empresa de Scribd logo
1 de 5
Descargar para leer sin conexión
Perceptron Simple
May 8, 2019
1 Importamos las librerias necesarias
In [1]: #!/usr/bin/env python3
# coding: utf-8
# # Importar librerías
from pylab import rand, plot, show, norm
2 Definimos la clase Perceptron
In [2]: # # Clase Perceptron
class Perceptron:
"""
Perceptron Simple
Parametros:
w_: array-1d
Pesos actualizados después del ajuste.
tasaApren_: float
Tasa de aprendizaje.
"""
def __init__(self, w_= rand(2)*2-1, tasaApren_ = 0.1):
"""
Metodo constructor del preceptron,
inicialza los valores por defecto.
"""
self.w = w_ # Vector w, representa los pesos.
self.tasaApren = tasaApren_ # Tasa de aprendizaje.
def respuesta(self, x):
"""
Salida del perceptron, aplica el producto
punto entre w (pesos) y x (data).
Parametros:
1
x: list, forma [valor 1, valor 2]
Data que se esta analizando.
Retorna:
int: Si el producto punto es mayor o igual
a uno (1) devuelve '1' de lo contrario '0'
"""
# Producto punto entre w y x.
y = (x[0] * self.w[0]) + (x[1] * self.w[1])
if y >= 1:
return 1
else:
return 0
def actualizarPesos(self, x, error):
"""
Metodo encargado de actualizar el valor
de los pesos en el vector w:
w(t+1) = w(t) + (tasaApren * error * x)
Donde:
w(t+1): Es el peso para la siguiente
iteracion de aprendizaje.
w(t): Es el peso para la iteracion
actual de aprendizaje.
tasaApren: Tasa de aprendizaje.
error: (resp. deseada) - (resp. perceptron).
x: Coordenada actual.
Parametros:
x: list, forma [coordenada x, coordenada y]
Data que se esta analizando.
"""
self.w[0] += self.tasaApren * error * x[0]
self.w[1] += self.tasaApren * error * x[1]
def entrenamiento(self, data):
"""
Metodo encargado de entrenar el perceptron simple,
el vector en los datos, cada vector en los datos
debe tener 3 elementos, el tercer elemento (x[2])
debe ser etiquetado (salida deseada)
Parametros:
data: list, forma [[x1, y1, resp1],
[x2, y2, resp2],
2
... ,
[xn, yn, respn]]
Vector con los datos, cada uno
debe tener la forma, valor 1,
valor 2 y respuesta deseada.
"""
# Determina si el perceptron aprendio segun el criterio.
aprendio = False
# Nunero de iteracion que le tomo al perceptron aprender.
iteracion = 0
# Mientras no aprenda.
while not aprendio:
# Mantiene el error general que se va obteniendo el aprendizaje.
globalError = 0.0
# Recorremos los datos.
for x in data:
# Obtenemos la respuesta del perceptron sobre el dato.
r = self.respuesta(x)
# Si la respuesta no es la deseada.
if x[2] != r:
# El error en la iteracion se actualiza a:
# respuesta deseada - respuesta obtenida.
error = x[2] - r
# Se actualiza los pesos con el dato
# y el error de la iteracion.
self.actualizarPesos(x, error)
# Se actualiza el error general del perceptron.
globalError += abs(error)
# Se contabiliza la iteracion para el criterio de aprendizaje.
iteracion += 1
# Criterio de salida: si el error general es 0,
# o la iteracion de aprendizaje sobre el 1000.
if globalError == 0.0 or iteracion >= 1000:
# Se imprime las iteraciones necesarias para aprender.
print("Iteraciones {}".format(iteracion))
# Salida del perceptron.
aprendio = True
3
3 Definimos el metodo para generar los datos de prueba.
In [3]: def datosGenerados():
"""
Metodo encargado de generar un conjunto de datos de prueba,
linealmente separables, con la siguiente forma:
[[x1, y1, resp1], [x2, y2, resp2], ... , [xn, yn, respn]]
Donde:
xn: Representa el valor 1.
yn: Representa el valor 2.
respn: Representa la etiqueta de la muestra.
Retorna:
list: Lista con los datos con la siguiente forma:
[[0, 0, 0], [0, 1, 0], [1, 0, 0], [1, 1, 1]]
"""
datos = []
datos.append([0,0,0])
datos.append([0,1,0])
datos.append([1,0,0])
datos.append([1,1,1])
return datos
4 Finalmente definimos el main para probar el Perceptron
In [4]: if __name__ == "__main__":
# Se genera los datos de prueba con los que entrenara el perceptron.
datosEntrenamiento = datosGenerados()
# Se instancia del perceptron.
perceptron = Perceptron()
# Se entrena el perceptron con los datos de prueba.
perceptron.entrenamiento(datosEntrenamiento)
# Se genera los datos con los que probara el perceptron.
datosPrueba = datosGenerados()
# Se prueba el perceptron con los datos de prueba.
# Se recorre los datos de prueba.
for x in datosPrueba:
# Obtenemos la respuesta del perceptron.
r = perceptron.respuesta(x)
4
# Verificamos si la respuesta no es correcta.
if r != x[2]:
# Si no es correcta, imprimimos 'error',
# no se agrega el punto a la grafica.
print ('error')
else:
# De lo contrario, la respuesta es correcta y se imprime.
print("[",x[0],",",x[1],"] -----> ", x[2])
Iteraciones 11
[ 0 , 0 ] -----> 0
[ 0 , 1 ] -----> 0
[ 1 , 0 ] -----> 0
[ 1 , 1 ] -----> 1
Al percetron le tomo 11 iteraciones llegar al margen de error deseado, este valor puede variar,
este resultado representa el aprendizaje de la compuerta logica XOR.
5

Más contenido relacionado

La actualidad más candente

Ejercicios en Netbeans
Ejercicios en NetbeansEjercicios en Netbeans
Ejercicios en Netbeansedgar muñoz
 
Menu con opciones de captura
Menu con opciones de capturaMenu con opciones de captura
Menu con opciones de capturajbersosa
 
3 desarollo manejo datos capitulo 2 -01 arreglos dos dimensiones (2)
3 desarollo manejo datos capitulo 2 -01 arreglos dos dimensiones (2)3 desarollo manejo datos capitulo 2 -01 arreglos dos dimensiones (2)
3 desarollo manejo datos capitulo 2 -01 arreglos dos dimensiones (2)luis freddy
 
Descubriendo scala
Descubriendo scalaDescubriendo scala
Descubriendo scalanluaces
 
3 desarollo manejo datos capitulo 2 -02 operaciones arreglos dos dime (3)
3 desarollo manejo datos capitulo 2 -02 operaciones arreglos dos dime (3)3 desarollo manejo datos capitulo 2 -02 operaciones arreglos dos dime (3)
3 desarollo manejo datos capitulo 2 -02 operaciones arreglos dos dime (3)luis freddy
 
3 desarollo manejo datos capitulo 2 -03 aplicaciones arreglos dos dime
3 desarollo manejo datos capitulo 2 -03 aplicaciones arreglos dos dime3 desarollo manejo datos capitulo 2 -03 aplicaciones arreglos dos dime
3 desarollo manejo datos capitulo 2 -03 aplicaciones arreglos dos dimeluis freddy
 
Problemas propuesto 1 al12
Problemas propuesto 1 al12Problemas propuesto 1 al12
Problemas propuesto 1 al12YO Por Que
 

La actualidad más candente (17)

Tema 2 Matemáticas
Tema 2 MatemáticasTema 2 Matemáticas
Tema 2 Matemáticas
 
[Sesion03] introduccion python
[Sesion03] introduccion python[Sesion03] introduccion python
[Sesion03] introduccion python
 
Ejercisos condicionales 1
Ejercisos condicionales 1Ejercisos condicionales 1
Ejercisos condicionales 1
 
Ejercicios en java
Ejercicios en javaEjercicios en java
Ejercicios en java
 
Ejercicios en Netbeans
Ejercicios en NetbeansEjercicios en Netbeans
Ejercicios en Netbeans
 
Como hacer un módulo para Visuse
Como hacer un módulo para VisuseComo hacer un módulo para Visuse
Como hacer un módulo para Visuse
 
Menu con opciones de captura
Menu con opciones de capturaMenu con opciones de captura
Menu con opciones de captura
 
Python boloñesa
Python boloñesa Python boloñesa
Python boloñesa
 
programas
programasprogramas
programas
 
Ejemplos robert miguel
Ejemplos robert miguelEjemplos robert miguel
Ejemplos robert miguel
 
Tema 10-1x2
Tema 10-1x2Tema 10-1x2
Tema 10-1x2
 
3 desarollo manejo datos capitulo 2 -01 arreglos dos dimensiones (2)
3 desarollo manejo datos capitulo 2 -01 arreglos dos dimensiones (2)3 desarollo manejo datos capitulo 2 -01 arreglos dos dimensiones (2)
3 desarollo manejo datos capitulo 2 -01 arreglos dos dimensiones (2)
 
Descubriendo scala
Descubriendo scalaDescubriendo scala
Descubriendo scala
 
3 desarollo manejo datos capitulo 2 -02 operaciones arreglos dos dime (3)
3 desarollo manejo datos capitulo 2 -02 operaciones arreglos dos dime (3)3 desarollo manejo datos capitulo 2 -02 operaciones arreglos dos dime (3)
3 desarollo manejo datos capitulo 2 -02 operaciones arreglos dos dime (3)
 
3 desarollo manejo datos capitulo 2 -03 aplicaciones arreglos dos dime
3 desarollo manejo datos capitulo 2 -03 aplicaciones arreglos dos dime3 desarollo manejo datos capitulo 2 -03 aplicaciones arreglos dos dime
3 desarollo manejo datos capitulo 2 -03 aplicaciones arreglos dos dime
 
Elaborar una calculadora
Elaborar una calculadoraElaborar una calculadora
Elaborar una calculadora
 
Problemas propuesto 1 al12
Problemas propuesto 1 al12Problemas propuesto 1 al12
Problemas propuesto 1 al12
 

Similar a Perceptron simple (20)

Red neuronal recurrente
Red neuronal recurrenteRed neuronal recurrente
Red neuronal recurrente
 
Newton And Neville Interpolation
Newton And Neville InterpolationNewton And Neville Interpolation
Newton And Neville Interpolation
 
algoritmos en R Studio
algoritmos en R Studioalgoritmos en R Studio
algoritmos en R Studio
 
Trabajo Final
Trabajo FinalTrabajo Final
Trabajo Final
 
Comandos
ComandosComandos
Comandos
 
Taller de derive
Taller de deriveTaller de derive
Taller de derive
 
Practica 1 Introduccion Al R
Practica 1 Introduccion Al RPractica 1 Introduccion Al R
Practica 1 Introduccion Al R
 
B2 T5 Vectores Ii
B2 T5 Vectores IiB2 T5 Vectores Ii
B2 T5 Vectores Ii
 
Examen parcial 2
Examen parcial 2Examen parcial 2
Examen parcial 2
 
Ejercicios Python parte 4
Ejercicios Python parte 4Ejercicios Python parte 4
Ejercicios Python parte 4
 
Comandos r
Comandos rComandos r
Comandos r
 
Tp1 2006
Tp1 2006Tp1 2006
Tp1 2006
 
R manual
R manualR manual
R manual
 
Examen Parcial 2
Examen Parcial 2Examen Parcial 2
Examen Parcial 2
 
Fundamentos de programacion
Fundamentos de programacionFundamentos de programacion
Fundamentos de programacion
 
Fundamentos de Python con Orientación a Objetos y Basado en Problemas
Fundamentos de Python con Orientación a Objetos y Basado en ProblemasFundamentos de Python con Orientación a Objetos y Basado en Problemas
Fundamentos de Python con Orientación a Objetos y Basado en Problemas
 
Tema 0 Repaso Programación en Java
Tema 0 Repaso Programación en JavaTema 0 Repaso Programación en Java
Tema 0 Repaso Programación en Java
 
jaisan
jaisanjaisan
jaisan
 
Interpolaion c++
Interpolaion c++Interpolaion c++
Interpolaion c++
 
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdf
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdfSesion1_Ciencia_de_Datos-Introduccion a Pithon.pdf
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdf
 

Más de Michel Jraiche

Más de Michel Jraiche (19)

Leccion 1 - Tema 3
Leccion 1 - Tema 3Leccion 1 - Tema 3
Leccion 1 - Tema 3
 
Perceptron multicapa
Perceptron multicapa Perceptron multicapa
Perceptron multicapa
 
Maquina restringida de boltzmann
Maquina restringida de boltzmannMaquina restringida de boltzmann
Maquina restringida de boltzmann
 
Leccion 6 - Tema 3
Leccion 6 - Tema 3Leccion 6 - Tema 3
Leccion 6 - Tema 3
 
Leccion 6 - Tema 2
Leccion 6 - Tema 2Leccion 6 - Tema 2
Leccion 6 - Tema 2
 
Leccion 6 - Tema 1
Leccion 6 - Tema 1Leccion 6 - Tema 1
Leccion 6 - Tema 1
 
Leccion 5 - Tema 3
Leccion 5 - Tema 3Leccion 5 - Tema 3
Leccion 5 - Tema 3
 
Leccion 5 - Tema 2
Leccion 5 - Tema 2Leccion 5 - Tema 2
Leccion 5 - Tema 2
 
Leccion 5 - Tema 1
Leccion 5 - Tema 1Leccion 5 - Tema 1
Leccion 5 - Tema 1
 
Leccion 4 - Tema 2
Leccion 4 - Tema 2Leccion 4 - Tema 2
Leccion 4 - Tema 2
 
Leccion 4 - Tema 1
Leccion 4 - Tema 1Leccion 4 - Tema 1
Leccion 4 - Tema 1
 
Leccion 3 - Tema 3
Leccion 3 - Tema 3Leccion 3 - Tema 3
Leccion 3 - Tema 3
 
Leccion 3 - Tema 2
Leccion 3 - Tema 2Leccion 3 - Tema 2
Leccion 3 - Tema 2
 
Leccion 3 - Tema 1
Leccion 3 - Tema 1Leccion 3 - Tema 1
Leccion 3 - Tema 1
 
Leccion 2 - Tema 2
Leccion 2 - Tema 2Leccion 2 - Tema 2
Leccion 2 - Tema 2
 
Leccion 2 - Tema 1
Leccion 2 - Tema 1Leccion 2 - Tema 1
Leccion 2 - Tema 1
 
Leccion 1 - Tema 3
Leccion 1 - Tema 3Leccion 1 - Tema 3
Leccion 1 - Tema 3
 
Leccion 1 - Tema 2
Leccion 1 - Tema 2Leccion 1 - Tema 2
Leccion 1 - Tema 2
 
Leccion 1 - Tema 1
Leccion 1 - Tema 1Leccion 1 - Tema 1
Leccion 1 - Tema 1
 

Último

BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...ITeC Instituto Tecnología Construcción
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Opentix
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTEREMMAFLORESCARMONA
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOSelenaCoronadoHuaman
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfmasogeis
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3AlexysCaytanoMelndez1
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionarmando_cardenas
 

Último (7)

BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTER
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdf
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacion
 

Perceptron simple

  • 1. Perceptron Simple May 8, 2019 1 Importamos las librerias necesarias In [1]: #!/usr/bin/env python3 # coding: utf-8 # # Importar librerías from pylab import rand, plot, show, norm 2 Definimos la clase Perceptron In [2]: # # Clase Perceptron class Perceptron: """ Perceptron Simple Parametros: w_: array-1d Pesos actualizados después del ajuste. tasaApren_: float Tasa de aprendizaje. """ def __init__(self, w_= rand(2)*2-1, tasaApren_ = 0.1): """ Metodo constructor del preceptron, inicialza los valores por defecto. """ self.w = w_ # Vector w, representa los pesos. self.tasaApren = tasaApren_ # Tasa de aprendizaje. def respuesta(self, x): """ Salida del perceptron, aplica el producto punto entre w (pesos) y x (data). Parametros: 1
  • 2. x: list, forma [valor 1, valor 2] Data que se esta analizando. Retorna: int: Si el producto punto es mayor o igual a uno (1) devuelve '1' de lo contrario '0' """ # Producto punto entre w y x. y = (x[0] * self.w[0]) + (x[1] * self.w[1]) if y >= 1: return 1 else: return 0 def actualizarPesos(self, x, error): """ Metodo encargado de actualizar el valor de los pesos en el vector w: w(t+1) = w(t) + (tasaApren * error * x) Donde: w(t+1): Es el peso para la siguiente iteracion de aprendizaje. w(t): Es el peso para la iteracion actual de aprendizaje. tasaApren: Tasa de aprendizaje. error: (resp. deseada) - (resp. perceptron). x: Coordenada actual. Parametros: x: list, forma [coordenada x, coordenada y] Data que se esta analizando. """ self.w[0] += self.tasaApren * error * x[0] self.w[1] += self.tasaApren * error * x[1] def entrenamiento(self, data): """ Metodo encargado de entrenar el perceptron simple, el vector en los datos, cada vector en los datos debe tener 3 elementos, el tercer elemento (x[2]) debe ser etiquetado (salida deseada) Parametros: data: list, forma [[x1, y1, resp1], [x2, y2, resp2], 2
  • 3. ... , [xn, yn, respn]] Vector con los datos, cada uno debe tener la forma, valor 1, valor 2 y respuesta deseada. """ # Determina si el perceptron aprendio segun el criterio. aprendio = False # Nunero de iteracion que le tomo al perceptron aprender. iteracion = 0 # Mientras no aprenda. while not aprendio: # Mantiene el error general que se va obteniendo el aprendizaje. globalError = 0.0 # Recorremos los datos. for x in data: # Obtenemos la respuesta del perceptron sobre el dato. r = self.respuesta(x) # Si la respuesta no es la deseada. if x[2] != r: # El error en la iteracion se actualiza a: # respuesta deseada - respuesta obtenida. error = x[2] - r # Se actualiza los pesos con el dato # y el error de la iteracion. self.actualizarPesos(x, error) # Se actualiza el error general del perceptron. globalError += abs(error) # Se contabiliza la iteracion para el criterio de aprendizaje. iteracion += 1 # Criterio de salida: si el error general es 0, # o la iteracion de aprendizaje sobre el 1000. if globalError == 0.0 or iteracion >= 1000: # Se imprime las iteraciones necesarias para aprender. print("Iteraciones {}".format(iteracion)) # Salida del perceptron. aprendio = True 3
  • 4. 3 Definimos el metodo para generar los datos de prueba. In [3]: def datosGenerados(): """ Metodo encargado de generar un conjunto de datos de prueba, linealmente separables, con la siguiente forma: [[x1, y1, resp1], [x2, y2, resp2], ... , [xn, yn, respn]] Donde: xn: Representa el valor 1. yn: Representa el valor 2. respn: Representa la etiqueta de la muestra. Retorna: list: Lista con los datos con la siguiente forma: [[0, 0, 0], [0, 1, 0], [1, 0, 0], [1, 1, 1]] """ datos = [] datos.append([0,0,0]) datos.append([0,1,0]) datos.append([1,0,0]) datos.append([1,1,1]) return datos 4 Finalmente definimos el main para probar el Perceptron In [4]: if __name__ == "__main__": # Se genera los datos de prueba con los que entrenara el perceptron. datosEntrenamiento = datosGenerados() # Se instancia del perceptron. perceptron = Perceptron() # Se entrena el perceptron con los datos de prueba. perceptron.entrenamiento(datosEntrenamiento) # Se genera los datos con los que probara el perceptron. datosPrueba = datosGenerados() # Se prueba el perceptron con los datos de prueba. # Se recorre los datos de prueba. for x in datosPrueba: # Obtenemos la respuesta del perceptron. r = perceptron.respuesta(x) 4
  • 5. # Verificamos si la respuesta no es correcta. if r != x[2]: # Si no es correcta, imprimimos 'error', # no se agrega el punto a la grafica. print ('error') else: # De lo contrario, la respuesta es correcta y se imprime. print("[",x[0],",",x[1],"] -----> ", x[2]) Iteraciones 11 [ 0 , 0 ] -----> 0 [ 0 , 1 ] -----> 0 [ 1 , 0 ] -----> 0 [ 1 , 1 ] -----> 1 Al percetron le tomo 11 iteraciones llegar al margen de error deseado, este valor puede variar, este resultado representa el aprendizaje de la compuerta logica XOR. 5