En este ejemplo vamos a construir un modelo de aprendizaje profundo utilizando TensorFlow para predecir el resultado de las votaciones autonómicas en base a los datos de las redes sociales de los candidatos. Utilizaremos una base de datos ficticia que consiste en los siguientes campos:
- Edad: edad del candidato
- Sexo: género del candidato (0 para hombre, 1 para mujer)
- Twitter: cantidad de seguidores en Twitter del candidato
- Facebook: cantidad de seguidores en Facebook del candidato
- Instagram: cantidad de seguidores en Instagram del candidato
- Resultado: resultado de las votaciones (0 para derrota, 1 para victoria)
Lo primero que haremos será importar las bibliotecas necesarias y cargar los datos:
import tensorflow as tf import pandas as pd import numpy as np # Cargar los datos data = pd.read_csv('datos_votaciones.csv')
A continuación, dividiremos los datos en un conjunto de entrenamiento y un conjunto de prueba:
# Dividir los datos en un conjunto de entrenamiento y un conjunto de prueba train_data = data.sample(frac=0.8, random_state=0) test_data = data.drop(train_data.index)
Luego, preprocesaremos los datos normalizando las características numéricas:
# Normalizar las características numéricas mean = train_data.mean(axis=0) std = train_data.std(axis=0) train_data = (train_data - mean) / std test_data = (test_data - mean) / std
A continuación, crearemos el modelo utilizando la API de alto nivel de TensorFlow tf.keras
:
# Crear el modelo model = tf.keras.Sequential([ tf.keras.layers.Dense(32, activation='relu', input_shape=[5]), tf.keras.layers.Dense(16, activation='relu'), tf.keras.layers.Dense(1, activation='sigmoid') ])
Este modelo tiene una capa de entrada con 5 características, dos capas ocultas con activación ReLU y una capa de salida con activación sigmoide (ya que estamos realizando una tarea de clasificación binaria).
A continuación, compilamos el modelo con una función de pérdida de entropía cruzada binaria y un optimizador Adam:
# Compilar el modelo model.compile(loss='binary_crossentropy', optimizer=tf.keras.optimizers.Adam(0.001), metrics=['accuracy'])
Finalmente, entrenamos el modelo durante 50 épocas utilizando los datos de entrenamiento:
# Entrenar el modelo history = model.fit(train_data[['Edad', 'Sexo', 'Twitter', 'Facebook', 'Instagram']], train_data['Resultado'], validation_data=(test_data[['Edad', 'Sexo', 'Twitter', 'Facebook', 'Instagram']], test_data['Resultado']), epochs=50)
Ahora podemos utilizar el modelo entrenado para hacer predicciones en nuevos datos. Por ejemplo, para hacer una predicción en un candidato de 30 años, hombre, con 1000 seguidores en Twitter, 5000 seguidores en Facebook y 2000 seguidores en Instagram, podemos hacer lo siguiente:
La predicción obtenida mediante el modelo entrenado será una probabilidad, ya que utilizamos una activación sigmoide en la capa de salida. Para convertir esta probabilidad en una clasificación binaria, podemos establecer un umbral (por ejemplo, 0.5) y asignar una victoria si la probabilidad es mayor que el umbral y una derrota en caso contrario.
# Convertir la probabilidad en una clasificación binaria threshold = 0.5 if prediction > threshold: print("El candidato ganará las elecciones") else: print("El candidato perderá las elecciones")
Este es un ejemplo básico de cómo utilizar TensorFlow para crear un modelo de aprendizaje profundo que pueda predecir los resultados de las votaciones autonómicas utilizando datos de las redes sociales de los candidatos. Por supuesto, para obtener resultados más precisos, se necesitaría una base de datos más grande y compleja y un modelo más sofisticado con más capas y más neuronas.
Para generar datos ficticios de votaciones, podemos utilizar la biblioteca numpy
de Python para generar datos aleatorios. A continuación, creamos una función que generará datos aleatorios para la base de datos:
import numpy as np import pandas as pd def generate_data(num_samples): # Generar datos aleatorios edad = np.random.randint(20, 75, num_samples) sexo = np.random.randint(0, 2, num_samples) twitter = np.random.randint(0, 1000000, num_samples) facebook = np.random.randint(0, 1000000, num_samples) instagram = np.random.randint(0, 1000000, num_samples) resultado = np.random.randint(0, 2, num_samples) # Crear un DataFrame de pandas con los datos data = pd.DataFrame({'Edad': edad, 'Sexo': sexo, 'Twitter': twitter, 'Facebook': facebook, 'Instagram': instagram, 'Resultado': resultado}) return data
La función generate_data
acepta un argumento num_samples
que indica la cantidad de datos que se generarán. En este ejemplo, generaremos 1000 filas de datos.
data = generate_data(1000) # Guardar los datos en un archivo CSV data.to_csv('datos_votaciones.csv', index=False)
Esto generará un archivo llamado datos_votaciones.csv
en el directorio de trabajo actual que contiene los datos ficticios de votaciones generados.
Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.