Código de Python - PerceptrónSimple

Imágen de perfil
Val: 10
Ha disminuido su posición en 3 puestos en Python (en relación al último mes)
Gráfica de Python

PerceptrónSimplegráfica de visualizaciones


Python

Publicado el 27 de Julio del 2019 por Fernando
1.209 visualizaciones desde el 27 de Julio del 2019
MODELO DE PERCEPTRON SIMPLE
Los perceptrones son tipos de redes neuronales, las neuronal network más simples que existen. El modelo de perceptrón simple permite realizar una clasificación binaria de dos clases linealmente separables. Cada clase puede contener diferentes variables (X1 … Xn), cada una de estas variables supone una entrada a la red neuronal. Cada entrada se asocia a un determinado peso (W1 … Wn), el sumatorio del producto de cada entrada por su correspondiente peso nos da un valor, Z (z= Σ Xn*Wn ). Las diferentes entradas convergen en una misma neurona, esta representa la neurona de salida y tendrá un determinado umbral de activación, Y. Si el valor Z es mayor que el umbral de activación (Y) la neurona se activará y clasificará una clase como positiva, si por el contrario el valor Z no supera el umbral de activación Y, la neurona no se activará y clasificará la clase como negativa. El modelo de perceptrón simple requiere de un entrenamiento supervisado, es decir, para cada conjunto de valores le indicamos a que clase pertenecen dichos valores. De esta forma, cada vez que se equivoque al clasificar un conjunto de valores, se podrán ajustar los diferentes pesos W. A medida que esta red se va entrenando siempre convergerá en una solución, siempre y cuando, las dos clases sean LINEALMENTE SEPARABLES.
A continuación, vamos con un programa sumamente sencillo. En este programa, las dos clases contienen 4 variables las cuales, corresponden a números aleatorios en coma flotante comprendidos entre 0 y 1. Aparecen ajustados los intervalos (en la función al() ) para que ambas clases sean linealmente separables ya que si no, el programa nunca encontrará una solución. Los pesos del perceptrón han sido iniciados aleatoriamente en el intervalo de 0 a 0.5. Como mencioné anteriormente, se trata de un tipo de aprendizaje supervisado, por ello, para cada conjunto de datos se indica la clase a la que pertenece. Una vez que tenemos los datos a clasificar y los pesos del perceptrón inicializados aleatoriamente, el siguiente paso consiste en ajustan los pesos. Estos pesos se ajustarán solo cuando el clasificador falle siguiendo la función de entrenamiento (o algoritmo de aprendizaje)  Wt+1 = Wt + (0 - Z)*Xn . Si el clasificador acierta la clase los pesos no se corrigen. Tras el entrenamiento el clasificador (en este caso en dos o tres ciclos) alcanza un rendimiento del 100%, de forma que todos los conjuntos de datos pertenecientes a la Clase 1 tienen un valor de Z > Y (superan el umbral de activación) y todos los datos pertenecientes a la Clase 2 tienen un valor de Z < Y (inferiores al umbral de activación).
Se trata de un algoritmo muy muy sencillo que representa el potencial de la Inteligencia Artificial en el análisis de datos. El umbral de activación o más formalmente la función de activación corresponde a la función más sencilla posible, la función escalón de McCulloch y Pitts. Estoy disponible para cualquier duda o sugerencia. Se que esto es un ejemplo sencillo, estaba practicando, diseñé e hice el programa en menos de una hora y decidí compartirlo por si a alguien le interesaba un poco el tema haciendo una mini-explicación.

Requerimientos

El código esta escrito en Python 3 y es necesario tener instalado el modulo random (Módulo de la librería estándar de Python).

Versión 0.1

Publicado el 27 de Julio del 2019gráfica de visualizaciones de la versión: Versión 0.1
1.211 visualizaciones desde el 27 de Julio del 2019
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import random
random.seed(0)
def al(tipo):
    if tipo==1:
        return 0.6+(0.4*random.random())
    else:
        return 0.5*random.random()
 
def generar_numeros(volumen):
#Devuelve una lista de tuplas que contienen una lista de datos y su clase
    datos=[]
    dato_1=()
    dato_2=()
    for n in range(volumen):
        dato_1=([al(1),al(2),al(1),al(2)],"Class 1")
        dato_2=([al(2),al(1),al(2),al(1)],"Class 2")
        datos.append(dato_1)
        datos.append(dato_2)
    return datos
 
def iniciar_perceptron():               #Pesos iniciados en valores entre 0 y 0.5
    percep=[None]*4
    for n in range(len(percep)):
        percep[n]=0.5*random.random()
    return percep
 
def entrenar_perceptron(datos,pesos):
    z = 0.0
    clase_perceptron = ""
    completo = True
    aciertos = 0
    errores = 0
    ciclo = 1
    while (completo):
        completo = False
        for n in datos:
            valores = n[0]
            clase = n[1]
            for n2 in range(len(valores)):  # Calcular z y clasificar
                z = z + valores[n2] * pesos[n2]
            if (z >= 0):
                clase_perceptron = "Class 1"
            if (z < 0):
                clase_perceptron = "Class 2"
 
            if (clase_perceptron == clase):  # Comprobar clasificacion y corregir
                aciertos += 1
            else:
                completo = True
                errores += 1
                for n2 in range(len(pesos)):  # Actualizacion de pesos segun la funcion de entrenamiento
                    pesos[n2] = pesos[n2] + (0.0 - z) * valores[n2]
            z = 0.0
        print("\nCICLO: ", ciclo)
        print("Aciertos: ", aciertos)
        print("Errores: ", errores)
        ciclo += 1
        aciertos = 0
        errores = 0
 
 
datos=generar_numeros(20000)
pesos=iniciar_perceptron()
entrenar_perceptron(datos,pesos)



Comentarios sobre la versión: Versión 0.1 (0)


No hay comentarios
 

Comentar la versión: Versión 0.1

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s5442