<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Neural Networks
En el siguiente ejercicio de neural networks vamos a utilizar la librería scikit-learn, si aún no cuentas con esta librería en tu computadora te recomiendo usar el siguiente comando en la anaconda-promt
Step1:  Train Test Split
Debemos de separar nuestra información entre entrenamiento y procesamiento, esto es muy fácil con el módulo de SciKit Learn y su función train_test_split del model_selection
Step2:  Preprocesamiento de la información
La red neuronal puede tener dificultades para converger antes de la cantidad máxima de iteraciones permitidas si los datos no están normalizados. El Perceptron multicapa es sensible a las incrustaciones de características, por lo que es muy recomendable escalar sus datos. Tenga en cuenta que debe aplicar la misma escala al conjunto de prueba para obtener resultados significativos. Hay muchos métodos diferentes para la normalización de los datos, utilizaremos el StandardScaler incorporado para la estandarización.
Step3:  Entrenamiento del modelo
Ahora entrenaremos nuestro modelo, el módulo SciKit Learn hace esta tarea muy fácil, con el uso de el estimador de objetos, en este caso particular importaremos nuestro estimador (Multi-Layer Perceptron Classifier model) from the neural_network library of SciKit-Learn
Step4:  Predicciones y Evaluación
Ya que tenemos nuestro modelo, podemos realizar predicciones.
<ASSISTANT_TASK:>
Python Code:
# librerias
import pandas as pd
data = pd.read_csv('../../data/wine.csv', names = ["Cultivator", "Alchol", "Malic_Acid", "Ash", "Alcalinity_of_Ash", "Magnesium", "Total_phenols", "Falvanoids", "Nonflavanoid_phenols", "Proanthocyanins", "Color_intensity", "Hue", "OD280", "Proline"])
# verificar la integridad de la información
data.head()
# realizar una descriptiva gráfica del dataframe
data.describe().transpose()
# estructura de los datos
data.shape
# preparar los datos para su procesamiento
X = data.drop('Cultivator', axis=1)
y = data['Cultivator']
Explanation: Neural Networks
En el siguiente ejercicio de neural networks vamos a utilizar la librería scikit-learn, si aún no cuentas con esta librería en tu computadora te recomiendo usar el siguiente comando en la anaconda-promt:
conda install scikit-learn
Para mayor información en cuanto a la instalación puedes visitar el siguiente link documentación
¿Qué es una neural network?
Las redes neuronales son un marco de aprendizaje automático que intenta imitar el patrón de aprendizaje de las redes neuronales biológicas naturales. Las redes neuronales biológicas tienen neuronas interconectadas con dendritas que reciben entradas, y luego, a partir de estas entradas, producen una señal de salida a través de un axón a otra neurona. Trataremos de imitar este proceso mediante el uso de Redes neuronales artificiales (ANN), que a partir de ahora llamaremos redes neuronales. El proceso de crear una red neuronal comienza con la forma más básica, un solo perceptrón
¿Qué es un perceptrón?
Un perceptron tiene una o más entradas, un sesgo, una función de activación y una única salida. El perceptron recibe entradas, las multiplica por un poco de peso y luego las pasa a una función de activación para producir una salida. Hay muchas funciones de activación posibles para elegir, como la función logística, una función trigonométrica, una función de paso, etc. También nos aseguramos de agregar un sesgo al perceptrón, esto evita problemas donde todas las entradas podrían ser iguales a cero (es decir, ningún peso multiplicativo tendría un efecto).
Una vez que tenemos el resultado, podemos compararlo con una etiqueta conocida y ajustar los pesos en consecuencia (los pesos usualmente comienzan con valores de inicialización aleatorios). Seguimos repitiendo este proceso hasta que hayamos alcanzado un número máximo de iteraciones permitidas, o una tasa de error aceptable.
Para crear una red neuronal, simplemente comenzamos a agregar capas de perceptrones, creando un modelo de perceptrón multicapa de una red neuronal. Tendrás una capa de entrada que tomará directamente tus entradas de funciones y una capa de salida que creará las salidas resultantes. Las capas intermedias se conocen como capas ocultas porque no "ven" directamente las entradas o salidas de características.
Tenga en cuenta que, debido a su naturaleza, las redes neuronales tienden a funcionar mejor en la GPU que en la CPU. El marco de aprendizaje de sci-kit no está diseñado para la optimización de GPU. Si desea continuar con la GPU y los modelos distribuidos, eche un vistazo a otros marcos, como el TensforFlow de fuente abierta de Google.
Información
Para este análisis, abordaremos el tema del fraude en el vino. Usaremos el conjunto de datos de vino del Repositorio de aprendizaje automático de UCI. Tiene varias características químicas de diferentes vinos, todos cultivados en la misma región en Italia, pero los datos están etiquetados por tres diferentes cultivares posibles. Trataremos de construir un modelo que pueda clasificar a qué cultivar pertenece un vino en función de sus características químicas utilizando redes neuronales. Puedes obtener los datos link
End of explanation
# importar función
from sklearn.model_selection import train_test_split
# generar la información para su procesamiento
X_train, X_test, y_train, y_test = train_test_split(X,y)
Explanation: Train Test Split
Debemos de separar nuestra información entre entrenamiento y procesamiento, esto es muy fácil con el módulo de SciKit Learn y su función train_test_split del model_selection:
End of explanation
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
# ajustar la información de entrenamiento
scaler.fit(X_train)
# aplicar la transformación a toda la información
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
Explanation: Preprocesamiento de la información
La red neuronal puede tener dificultades para converger antes de la cantidad máxima de iteraciones permitidas si los datos no están normalizados. El Perceptron multicapa es sensible a las incrustaciones de características, por lo que es muy recomendable escalar sus datos. Tenga en cuenta que debe aplicar la misma escala al conjunto de prueba para obtener resultados significativos. Hay muchos métodos diferentes para la normalización de los datos, utilizaremos el StandardScaler incorporado para la estandarización.
End of explanation
# importar librería
from sklearn.neural_network import MLPClassifier
# crear la instancía que nos permitira definir el número de capaz y el máximo número de iteraciones
mlp = MLPClassifier(hidden_layer_sizes=(15,15,15),max_iter=1000)
# ahora que tenemos el modelo generardo, ya podemos ajustar la información al modelo
mlp.fit(X_train,y_train)
Explanation: Entrenamiento del modelo
Ahora entrenaremos nuestro modelo, el módulo SciKit Learn hace esta tarea muy fácil, con el uso de el estimador de objetos, en este caso particular importaremos nuestro estimador (Multi-Layer Perceptron Classifier model) from the neural_network library of SciKit-Learn
End of explanation
predictions = mlp.predict(X_test)
# importar los métodos de reporte
from sklearn.metrics import classification_report,confusion_matrix
print(confusion_matrix(y_test,predictions))
print(classification_report(y_test,predictions))
Explanation: Predicciones y Evaluación
Ya que tenemos nuestro modelo, podemos realizar predicciones.
End of explanation
<END_TASK>