TensorFlow / Python: Clasificación Binaria con Redes Neuronales de un solo Perceptrón

Código en Python y TensorFlow para realizar una clasificación binaria utilizando un perceptrón en TensorFlow. En este caso, se implementará un perceptrón simple para clasificar datos en dos clases distintas.

  1. Perceptrón: Un perceptrón es un tipo de neurona artificial que se utiliza en redes neuronales para realizar clasificación. Toma un conjunto de entradas, las pondera y las suma, y luego aplica una función de activación para producir una salida binaria. La función de activación más comúnmente utilizada es la función sigmoide, que produce valores en el rango [0, 1].
  2. Umbral de Decisión: El perceptrón tiene un umbral de decisión. Si la suma ponderada de las entradas es mayor o igual que el umbral, el perceptrón emite una salida de 1 (o «verdadero»). Si es menor que el umbral, emite una salida de 0 (o «falso»). El umbral es uno de los parámetros que el perceptrón aprende durante el entrenamiento.
  3. Clasificación Binaria: En el contexto de clasificación binaria, el perceptrón toma decisiones sobre a cuál de las dos clases pertenece una entrada. Por ejemplo, en un problema de clasificación de correos electrónicos como spam o no spam, el perceptrón decide si un correo es spam (clase 1) o no spam (clase 0) en función de sus características.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

# Crear datos de entrenamiento
np.random.seed(0)
X = np.array([[1, 2], [2, 3], [2, 2.5], [3, 4], [4, 3], [5, 5]])
Y = np.array([0, 0, 0, 1, 1, 1])  # Etiquetas binarias (0 o 1)

# Definir el modelo del perceptrón
model = tf.keras.Sequential()
model.add(tf.keras.layers.Input(shape=(2,)))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))

# Compilar el modelo
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# Entrenar el perceptrón
model.fit(X, Y, epochs=1000, verbose=0)  # Entrenamiento por 1000 épocas

# Evaluar el modelo
loss, accuracy = model.evaluate(X, Y)
print(f'Pérdida: {loss:.4f}')
print(f'Precisión: {accuracy*100:.2f}%')

# Visualizar la decisión del perceptrón
plt.scatter(X[:, 0], X[:, 1], c=Y, cmap='coolwarm')
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()

# Generar puntos para trazar la línea de decisión
xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 100), np.linspace(ylim[0], ylim[1], 100))
xy = np.column_stack([xx.ravel(), yy.ravel()])
Z = model.predict(xy).reshape(xx.shape)

plt.contour(xx, yy, Z, levels=[0.5], colors='k')
plt.title("Decisión del Perceptrón")
plt.show()

Este código realiza lo siguiente:

  1. Genera Datos de Entrenamiento: Se crean datos de entrenamiento X y etiquetas Y para la clasificación binaria. En este caso, X son las características y Y son las etiquetas binarias (0 o 1).
  2. Define el Modelo del Perceptrón: Se define un modelo de perceptrón utilizando TensorFlow y Keras. El modelo consta de una capa de entrada y una capa densa con una función de activación sigmoide. Este modelo es adecuado para realizar una clasificación binaria.
  3. Compila el Modelo: El modelo se compila especificando el optimizador (‘adam’) y la función de pérdida (‘binary_crossentropy’) para el entrenamiento. Además, se mide la precisión como métrica.
  4. Entrena el Modelo: Se entrena el modelo en los datos de entrenamiento X y Y durante 1000 épocas.
  5. Evalúa el Modelo: El modelo se evalúa en los mismos datos de entrenamiento y se muestra la pérdida y precisión obtenidas durante el entrenamiento.
  6. Visualiza la Decisión del Perceptrón: Se utiliza Matplotlib para visualizar cómo el perceptrón divide el espacio en dos regiones (una para cada clase) en función de su capacidad de predicción. Esto se logra mediante un gráfico de dispersión y la representación de la línea de decisión del perceptrón en el espacio bidimensional.

En el código anterior, la visualización de la «decisión del perceptrón» muestra cómo el perceptrón divide el espacio en dos regiones: una región donde emite una salida de 1 (clase positiva) y otra región donde emite una salida de 0 (clase negativa). Esta división se basa en los pesos del perceptrón y el umbral de decisión que el modelo ha aprendido durante el entrenamiento. La visualización te permite ver cómo el perceptrón realiza la clasificación en un espacio bidimensional y cómo dibuja una línea de decisión para separar las dos clases.

Pérdida: 0.4021 Precisión: 100.00%

Pérdida: 0.8083 Precisión: 33.33%

Este es un ejemplo simple de clasificación binaria utilizando un perceptrón en TensorFlow. Puedes experimentar con diferentes conjuntos de datos y configuraciones de perceptrón para obtener una comprensión más profunda de cómo funciona.

37 thoughts on “TensorFlow / Python: Clasificación Binaria con Redes Neuronales de un solo Perceptrón

  1. Isla Moon naturally like your web site however you need to take a look at the spelling on several of your posts. A number of them are rife with spelling problems and I find it very bothersome to tell the truth on the other hand I will surely come again again.

  2. Blue Techker You’re so awesome! I don’t believe I have read a single thing like that before. So great to find someone with some original thoughts on this topic. Really.. thank you for starting this up. This website is something that is needed on the internet, someone with a little originality!

  3. I have been browsing online more than three hours today yet I never found any interesting article like yours It is pretty worth enough for me In my view if all website owners and bloggers made good content as you did the internet will be a lot more useful than ever before

  4. helloI really like your writing so a lot share we keep up a correspondence extra approximately your post on AOL I need an expert in this house to unravel my problem May be that is you Taking a look ahead to see you

  5. Hi Neat post Theres an issue together with your web site in internet explorer may test this IE still is the marketplace chief and a good component of people will pass over your fantastic writing due to this problem

  6. I have been surfing online more than 3 hours today yet I never found any interesting article like yours It is pretty worth enough for me In my opinion if all web owners and bloggers made good content as you did the web will be much more useful than ever before

  7. I just could not leave your web site before suggesting that I really enjoyed the standard information a person supply to your visitors Is gonna be again steadily in order to check up on new posts

  8. helloI like your writing very so much proportion we keep up a correspondence extra approximately your post on AOL I need an expert in this space to unravel my problem May be that is you Taking a look forward to see you

  9. Simply wish to say your article is as amazing The clearness in your post is just nice and i could assume youre an expert on this subject Well with your permission let me to grab your feed to keep updated with forthcoming post Thanks a million and please carry on the gratifying work

  10. you are truly a just right webmaster The site loading speed is incredible It kind of feels that youre doing any distinctive trick In addition The contents are masterwork you have done a great activity in this matter

  11. What i dont understood is in reality how youre now not really a lot more smartlyfavored than you might be now Youre very intelligent You understand therefore significantly in terms of this topic produced me personally believe it from a lot of numerous angles Its like women and men are not interested except it is one thing to accomplish with Woman gaga Your own stuffs outstanding Always care for it up

  12. Excellent blog here Also your website loads up very fast What web host are you using Can I get your affiliate link to your host I wish my web site loaded up as quickly as yours lol

  13. you are in reality a good webmaster The website loading velocity is amazing It sort of feels that youre doing any distinctive trick Also The contents are masterwork you have done a fantastic job in this topic

Deja un comentario