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
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
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.
In [3]:
# librerís
from sklearn.datasets import load_breast_cancer
data = load_breast_cancer()
In [4]:
data.keys()
Out[4]:
In [7]:
# imprimir la descripción completa de la información
print(data['DESCR'])
In [8]:
# estructura de la información
data['data'].shape
Out[8]:
In [12]:
# configurar nuestra información y etiquetas
X = data['data']
y = data['target']
In [16]:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y)
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.
In [17]:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
# ajustar la información de prueba
scaler.fit(X_train)
Out[17]:
In [18]:
# aplicar la transformación a la información
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
In [19]:
from sklearn.neural_network import MLPClassifier
In [20]:
mlp = MLPClassifier(hidden_layer_sizes=(30,30,30))
In [21]:
# ahora que tenemos el modelo generardo, ya podemos ajustar la información al modelo
mlp.fit(X_train,y_train)
Out[21]:
In [23]:
predictions = mlp.predict(X_test)
In [24]:
from sklearn.metrics import classification_report,confusion_matrix
print(confusion_matrix(y_test,predictions))
In [25]:
print(classification_report(y_test,predictions))
In [ ]: