Logo Studenta

RED_NEURONAL_TITANIC

Esta es una vista previa del archivo. Inicie sesión para ver el archivo original

# -*- coding: utf-8 -*-
"""
PREDICCION TITANIC
La siguiente red neuronal cuenta con la finalidad de predecir que pasajeros podrian morir
considerando las estadisticas de 1307 pasajeros, el desafio nos facilita los datos de 890 pasajeros
para entrenamiento y el resto para prueba y puesta en marcha
"""
#Importamos libreris
import numpy as np #libreria para ingresar datos en forma de arreglos 
#from numpy import loadtxt as Load
#Las de tensorflow son lobrerias que nos permiten disenar las redes neuronales 
from tensorflow.keras.models import Sequential as Sequential
from tensorflow.keras.layers import Dense as Dense
#Esta libreria nos permite analizar los datos 
from sklearn.model_selection import train_test_split as Test
"""
Numero de pasajero
Sobrevivencia
Clase 
Nombre del pasajero
Edad
SibSp: número de hermanos, hermanas, hermanastros o hermanastras en el barco. Parch: número de padres e hijos en el barco.
Parch:El conjunto de datos define las relaciones familiares de esta manera...
	Padre = madre, padre
	Niño = hija, hijo, hijastra, hijastro
	Algunos niños viajaron sólo con una niñera, por lo tanto parch=0 para ellos.
ticket:numero de ticket
fare:tarifa de pasajero
cabina
Puerto de embarque:c=Cherbourg, Q=Queenstown, S=Southampton
"""
# Cargamos el dataset
dataset_train = np.loadtxt(r'C:\Users\DELL 7280\Documents\LALO TEC LAGUNA\NOVENO SEMESTRE\Inteligencia artificial\TITANIC\train.csv', delimiter=',',dtype=str)
"""
Ya que el dataset esta compuesto por un datos inutiles como 
id de pasajero, cabina, nombre y cabina, esos los eliminaresmos de las entradas de nuestra red neuronal
"""
#Separamos la salidas
y=dataset_train[1:892,1].astype(int)
#Separo la clase del pasajero, ya que se sabe que la gente de clase alta por los privilegios que gizaban contaba con mayores chanzas de sobrevivencia,
# si bien no es el criterio demayor importancia considero que hay que tenerlo presente
x_pclass=dataset_train[1:892,2].astype(int)
#Clasificar por sexo, ya que era una epoca donde los modales estaban a la orden del dia y mas tratandose de gente inglesa en su mayoria, habia una
#mayor posibilidad de sobrevivir deacuerdo al proverbio mujeres y ninos primero
x_genero=dataset_train[1:892,5] #seleccionamos la primera columna con categorias string, masculino o femenino y las pasamos a 1=masculino y 0=femenino
x_genero_num=np.where(x_genero=='male',1,0)
#Sabemos que los infantes contaban con mayor oportunidad de sobrevivir por eso la edad importa
x_edad1=dataset_train[1:892,6]
#El plan es rellenar los nulos con un valor neutro digamos 30 anos y transformarlo a entero para que la red le sea mas facil categorizarlo
x_edad= (np.array([float(x) if x != '' else 30.0 for x in x_edad1])).astype(int)
#Como hay un aplio margen entre las edades y basicamente el criterio es ninos y ancianos myor prioridad los separe en esas categorias
x_edad_num=np.where(x_edad<15 ,0,np.where(x_edad<45 ,1,2))
#continuamos con la division de datos utiles
x_sibsp=dataset_train[1:892,7].astype(int)
#numero de familiares
x_parch=dataset_train[1:892,8].astype(int)
#lo que pago por el boleto
x_fare=dataset_train[1:892,10]
x_fare_num=np.where(x_fare.astype(float)<20.0 ,0,np.where(x_fare.astype(float)<50.0 ,1,2))
#Juntamos las entradas utiles en un soloarreglo
x_FULL=np.vstack((x_pclass, x_genero_num , x_edad_num ,x_sibsp ,x_parch,x_fare_num)).T
#Parametros de la arquitectura 4 capas OCULTAS de 13 neuronas, y una capa de salida con una sola neurona
oculta1 = Dense(units=12, input_shape=[6])
oculta2 = Dense(units=14,activation="relu")
oculta3 = Dense(units=14,activation="tanh")
oculta4 = Dense(units=14,activation="relu")
oculta5 = Dense(units=14,activation="tanh")
salida = Dense(units=1, activation='sigmoid')
modelo = Sequential([oculta1, oculta2,oculta3,oculta4,oculta5, salida])
# compile the keras model
modelo.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
#Definimos los datos para el entrenamiento, ya que toda la data ingresada esta para entrenamiento dejare el 100%
x_FULL_train, x_FULL_test, y_train, y_test = Test(x_FULL, y, test_size=1, random_state=30)
# Programamos las caracteristicas del entrenamiento 
modelo.fit(x_FULL_train , y_train, epochs=275, batch_size=10,verbose=True)
"""
________________________________________________________________________________________________________
"""
#Para probar la efectividad de la red neuronal tendremos que ingresar el dataset de evaluacion
dataset_test = np.loadtxt(r'C:\Users\DELL 7280\Documents\LALO TEC LAGUNA\NOVENO SEMESTRE\Inteligencia artificial\TITANIC\test.csv', delimiter=',',dtype=str)
#Separo la clase del pasajero, ya que se sabe que la gente de clase alta por los privilegios que gizaban contaba con mayores chanzas de sobrevivencia,
# si bien no es el criterio demayor importancia considero que hay que tenerlo presente
x_pclass_test=dataset_test[1:419,1].astype(int)
#Clasificar por sexo, ya que era una epoca donde los modales estaban a la orden del dia y mas tratandose de gente inglesa en su mayoria, habia una
#mayor posibilidad de sobrevivir deacuerdo al proverbio mujeres y ninos primero
x_genero_test=dataset_test[1:419,4] #seleccionamos la primera columna con categorias string, masculino o femenino y las pasamos a 1=masculino y 0=femenino
x_genero_num_test=np.where(x_genero_test=='male',1,0)
#Sabemos que los infantes contaban con mayor oportunidad de sobrevivir por eso la edad importa
x_edad1_test=dataset_test[1:419,5]
#El plan es rellenar los nulos con un valor neutro digamos 30 anos y transformarlo a entero para que la red le sea mas facil categorizarlo
x_edad_test= (np.array([float(x) if x != '' else 30.0 for x in x_edad1_test])).astype(int)
#Como hay un aplio margen entre las edades y basicamente el criterio es ninos y ancianos myor prioridad los separe en esas categorias
x_edad_num_test=np.where(x_edad_test<15 ,0,np.where(x_edad_test<45 ,1,2))
#continuamos con la division de datos utiles
x_sibsp_test=dataset_test[1:419,6].astype(int)
#numero de familiares
x_parch_test=dataset_test[1:419,7].astype(int)
#lo que pago por el boleto
#NOOOOOOO, resulta que dentro del dataset de test tenemos que desconocemos lo que un tripulante pago por su boleto :(, ya que es solo un caso particular lo analizare 
#y asignare un valor en funcion de su clase, edady cabina
#este extrano tenia 60 anos, no iba con nadie, no ocupaba cabina y era de 3ra clase, entonces obvio pago muy poco por su entrada por lo le asignare un valor que pueda
#entrar dentro de la categoria economica
x_fare_test=dataset_test [1:419,9]
x_fare_test1= (np.array([float(x) if x != '' else 19.0 for x in x_fare_test])).astype(int)
x_fare_num_test=np.where(x_fare_test1.astype(float)<20.0 ,0,np.where(x_fare_test1.astype(float)<50.0 ,1,2))
#Juntamos las entradas utiles en un soloarreglo
x_FULL_test=np.vstack((x_pclass_test, x_genero_num_test , x_edad_num_test ,x_sibsp_test ,x_parch_test,x_fare_num_test)).T
"""
________________________________________________________________________________________________________
"""
#Pero resulta que desgraciablemente las respuestas estan en otra dataset :( entonces toca importarla
dataset_test_y = np.loadtxt(r'C:\Users\DELL 7280\Documents\LALO TEC LAGUNA\NOVENO SEMESTRE\Inteligencia artificial\TITANIC\gender_submission.csv', delimiter=',',dtype=str)
y_test=dataset_test_y[1:419,1].astype(int)
"""
________________________________________________________________________________________________________
"""
#primero revisamo con los datos del entrenamiento el acierto obtenido
# evaluate the keras model
_, accuracy = modelo.evaluate(x_FULL_train , y_train)
print('Accuracy: %.2f' % (accuracy*100))
#Ahora si viene lo chido..... probar si el entrenamiento ha funcionado
predicciones = modelo.predict(x_FULL_test)
print(predicciones[0:10],max(predicciones),min(predicciones))
for i in range(10):
	print('%s => %d
(expected %d)' % (x_FULL_test [i].tolist(), predicciones[i], y_test[i]))
#Por los reultados dados en este entrenamiento debere considrar un UMBRAL DE 0.1
predicciones = (modelo.predict(x_FULL_test) > 0.2).astype(int)
print(predicciones[30:45],max(predicciones),min(predicciones))
for i in range(15):
	print('%s => %d (expected %d)' % (x_FULL_test [i].tolist(), predicciones[i], y_test[i]))
#Guardamos pesos polarizados
#Si los resultados me agradaron guardar pesos
#COMO GUARDAR MODELOS NEURONALES
#libreria utilizada
from tensorflow.keras.models import save_model
#Guardamos en formato.h5, toda la informacion dentro de la variable modelo en este caso la estructura y los pesos de la red neuronal, luego del entremiento ideal para guardar buenos resultados
save_model(modelo, "pesos_DESAFIO_TITANIC.h5")
_, accuracy = modelo.evaluate(x_FULL_test ,y_test )
print('Accuracy: %.2f' % (accuracy*100))

Continuar navegando

Materiales relacionados