Deep Learning en Python - Implementaciones  

  RSS
admin
(@admin)
Miembro Admin

En esta implementaci贸n de Deep Learning, nuestro objetivo es predecir la rotaci贸n de datos de un determinado banco, y es probable que los clientes abandonen este servicio bancario. El conjunto de datos utilizado es relativamente peque帽o y contiene 10000 filas con 14 columnas. Estamos utilizando la distribuci贸n de Anaconda y marcos como Theano, TensorFlow y Keras. Keras est谩 construido sobre Tensorflow y Theano que funcionan como backends.

# Red neuronal artificial
# Instalando Theano
pip install --upgrade theano

# Instalando Tensorflow
pip install 鈥搖pgrade tensorflow

# Instalando Keras
pip install --upgrade keras

Paso 1: preprocesamiento de datos

In[]:

# Importando las bibliotecas
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Importando la base de datos
dataset = pd.read_csv('Churn_Modelling.csv')

Paso 2

Creamos matrices de las caracter铆sticas del conjunto de datos y la variable de destino, que es la columna 14, etiquetada como "Salida".

El aspecto inicial de los datos se muestra a continuaci贸n:

In[]:
X = dataset.iloc[:, 3:13].values
Y = dataset.iloc[:, 13].values
X

Salida

Paso 3

Y

Salida

array([1, 0, 1, ..., 1, 1, 0], dtype = int64)

Etapa 4

Hacemos el an谩lisis m谩s simple codificando las variables de cadena. Estamos utilizando la funci贸n ScikitLearn 'LabelEncoder' para codificar autom谩ticamente las diferentes etiquetas en las columnas con valores entre 0 y n_classes-1.

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X_1 = LabelEncoder()
X[:,1] = labelencoder_X_1.fit_transform(X[:,1])
labelencoder_X_2 = LabelEncoder()
X[:, 2] = labelencoder_X_2.fit_transform(X[:, 2])
X

Salida

En la salida anterior, los nombres de los pa铆ses se reemplazan por 0, 1 y 2; mientras que masculino y femenino son reemplazados por 0 y 1.

Paso 5

Etiquetado de datos codificados

Usamos la misma biblioteca ScikitLearn y otra funci贸n llamada OneHotEncoder para simplemente pasar el n煤mero de columna creando una variable ficticia.

onehotencoder = OneHotEncoder(categorical features = [1])
X = onehotencoder.fit_transform(X).toarray()
X = X[:, 1:]
X

Ahora, las dos primeras columnas representan el pa铆s y la cuarta columna representa el g茅nero.

Salida

Siempre dividimos nuestros datos en parte de entrenamiento y pruebas; entrenamos a nuestro modelo en datos de entrenamiento y luego verificamos la precisi贸n de un modelo en datos de prueba que ayuda a evaluar la eficiencia del modelo.

Paso 6

Estamos utilizando la funci贸n train_test_split de ScikitLearn para dividir nuestros datos en conjunto de entrenamiento y conjunto de prueba. Mantenemos la relaci贸n de divisi贸n en 80:20.

# Dividir el conjunto de datos en el conjunto de entrenamiento y el conjunto de prueba
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)

Algunas variables tienen valores en miles, mientras que otras tienen valores en decenas o en unidades. Escalamos los datos para que sean m谩s representativos.

Paso 7

En este c贸digo, estamos ajustando y transformando los datos de entrenamiento utilizando la funci贸n StandardScaler. Normalizamos nuestra escala de modo que utilicemos el mismo m茅todo ajustado para transformar/escalar datos de prueba.

# Caracter铆stica de escalado
fromsklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

Salida

Los datos ahora se escalan correctamente. Finalmente, hemos terminado con nuestro preprocesamiento de datos. Ahora, vamos a empezar con nuestro modelo.

Paso 8

Importamos los m贸dulos requeridos aqu铆. Necesitamos el m贸dulo secuencial para inicializar la red neuronal y el m贸dulo denso para agregar las capas ocultas.

# Importando las librer铆as y paquetes de Keras. 
import keras
from keras.models import Sequential
from keras.layers import Dense

Paso 9

Nombraremos el modelo como Clasificador, ya que nuestro objetivo es clasificar la rotaci贸n de clientes. Luego usamos el m贸dulo secuencial para la inicializaci贸n.

# Inicializando red neuronal
classifier = Sequential()

Paso 10

A帽adimos las capas ocultas una a una usando la funci贸n densa. En el c贸digo de abajo, veremos muchos argumentos.

Nuestro primer par谩metro es output_dim. Es el n煤mero de nodos que agregamos a esta capa. init es la inicializaci贸n del gradiente estoc谩stico decente. En una red neuronal asignamos ponderaciones a cada nodo. En la inicializaci贸n, los pesos deben estar cerca de cero e inicializamos los pesos aleatoriamente usando la funci贸n uniforme. El par谩metro input_dim es necesario solo para la primera capa, ya que el modelo no conoce el n煤mero de nuestras variables de entrada. Aqu铆, el n煤mero total de variables de entrada es 11. En la segunda capa, el modelo conoce autom谩ticamente el n煤mero de variables de entrada de la primera capa oculta.

Ejecute la siguiente l铆nea de c贸digo para agregar la capa de entrada y la primera capa oculta:

classifier.add(Dense(units = 6, kernel_initializer = 'uniform', 
activation = 'relu', input_dim = 11))

Ejecute la siguiente l铆nea de c贸digo para agregar la segunda capa oculta:

classifier.add(Dense(units = 6, kernel_initializer = 'uniform', 
activation = 'relu'))

Ejecute la siguiente l铆nea de c贸digo para agregar la capa de salida:

classifier.add(Dense(units = 1, kernel_initializer = 'uniform', 
activation = 'sigmoid'))

Paso 11

Compilando la ANN

Hemos a帽adido varias capas a nuestro clasificador hasta ahora. Ahora los compilaremos usando el m茅todo de compilaci贸n. Los argumentos agregados en el control de compilaci贸n final completan la red neuronal. Por lo tanto, debemos tener cuidado en este paso.

Aqu铆 hay una breve explicaci贸n de los argumentos:

El primer argumento es Optimizer. Este es un algoritmo utilizado para encontrar el conjunto 贸ptimo de ponderaciones. Este algoritmo se llama Descenso Estoc谩stico de Gradiente (SGD). Aqu铆 estamos usando uno entre varios tipos, llamado 'Adam optimizer'. El SGD depende de la p茅rdida, por lo que nuestro segundo par谩metro es la p茅rdida. Si nuestra variable dependiente es binaria, usamos la funci贸n de p茅rdida logar铆tmica llamada 'binary_crossentropy', y si nuestra variable dependiente tiene m谩s de dos categor铆as en la salida, entonces usamos 'categorical_crossentropy'. Queremos mejorar el rendimiento de nuestra red neuronal en funci贸n de la precisi贸n, por lo que agregamos m茅tricas como precisi贸n.

# Compilando red neuronal 
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

Paso 12

Se deben ejecutar varios c贸digos en este paso.

Ajuste de la ANN al conjunto de entrenamiento

Ahora entrenamos nuestro modelo en los datos de entrenamiento. Usamos el m茅todo de ajuste para que se adapte a nuestro modelo. Tambi茅n optimizamos los pesos para mejorar la eficiencia del modelo. Para ello, tenemos que actualizar los pesos. El tama帽o del lote es el n煤mero de observaciones despu茅s de lo cual actualizamos los pesos. 'epochs' es el n煤mero total de iteraciones. Los valores de tama帽o de lote y 'epochs' se eligen mediante el m茅todo de prueba y error.

classifier.fit(X_train, y_train, batch_size = 10, epochs = 50)

Haciendo predicciones y evaluando el modelo

# Predecir los resultados del conjunto de pruebas
y_pred = classifier.predict(X_test)
y_pred = (y_pred > 0.5)

Predecir una sola observaci贸n nueva

# Predecir una sola observaci贸n nueva
"""Our goal is to predict if the customer with the following data will leave the bank:
Geography: Spain
Credit Score: 500
Gender: Female
Age: 40
Tenure: 3
Balance: 50000
Number of Products: 2
Has Credit Card: Yes
Is Active Member: Yes

Paso 13

Predecir el resultado del conjunto de pruebas

Para continuar viendo el resto de contenido por favor Reg铆strate o Inicia Sesi贸n

This topic was modified hace 6 meses 2 times by admin
This topic was modified hace 4 meses 2 times by admin
Citar
Respondido : 09/10/2018 4:33 pm
Share:
  
Trabajando

Por favor Iniciar Sesi贸n o Registro