Descarga la aplicación para disfrutar aún más
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))
Compartir