Está en la página 1de 39

REDES NEURONALES

CON SKLEARN
Sklearn
Scikit-Learn implementa el perceptrón multicapa con:
sklearn.neural_network.MLPClassifier (clasificación)
sklearn.neural_network.MLPRegressor (regresión)
Ejemplo:
Parámetros de MLPClassifier y MLPRegressor
hidden_layer_sizes
• Es una tupla con el número de neuronas en cada capa
oculta: (5, ) es una capa oculta de 5 neuronas y (50, 20, 10)
son 3 capas ocultas de 50, 20 y 10 neuronas.
activation
• Función de activación de las neuronas de las capas ocultas
(no es posible establecer funciones de activación distintas
para cada capa). Hay cuatro opciones:
• identity, función identidad que devuelve el mismo valor que
recibe: f(x) = x
• logistic, función logística: f(x) = 1 / (1 + exp(-x))
• tanh, función tangente hiperbólica: f(x) = tanh(x)
• relu, (opción por defecto) función "rectified linear unit":
f(x) = max(0, x)
(No se incluye la función escalón, usada en el perceptrón, es
decir, no es posible simular un perceptrón)
Parámetros de MLPClassifier y MLPRegressor
hidden_layer_sizes
• Es una tupla con el número de neuronas en cada capa
oculta: (5, ) es una capa oculta de 5 neuronas y (50, 20, 10)
son 3 capas ocultas de 50, 20 y 10 neuronas.
activation
• Función de activación de las neuronas de las capas ocultas
(no es posible establecer funciones de activación distintas
para cada capa). Hay cuatro opciones:
• identity, función identidad que devuelve el mismo valor que
recibe: f(x) = x
• logistic, función logística: f(x) = 1 / (1 + exp(-x))
• tanh, función tangente hiperbólica: f(x) = tanh(x)
• relu, (opción por defecto) función "rectified linear unit": f(x)
= max(0, x)
(No se incluye la función escalón, usada en el perceptrón, es
decir, no es posible simular un perceptrón)
Parámetros de MLPClassifier y MLPRegressor
solver
Optimizador para calcular el mínimo de la función de coste:
• lbfgs, optimizador de la familia de los métodos casi-Newton
• sgd, descenso de gradiente estocástico
• adam (opción por defecto)
max_iter
Determina el número máximo de epochs para entrenar la RN.
El valor por defecto es 200. Si converge antes de max_iter, se
detiene el aprendizaje.
learning_rate
Tasa de aprendizaje para actualización de pesos. Puede ser:
-constant, valor constante especificado por el parámetro
learning_rate_init, aplicable solo con solver "sgd" o "adam".
-invscaling, tasa de aprendizaje gradualmente decreciente.
Solo es aplicable con solver "sgd".
-adaptative. Este método mantiene la tasa de aprendizaje
constante e igual a learning_rate_init mientras se confirme
una reducción en el valor de la función de coste durante el
entrenamiento, en cuyo caso se actualiza.
Parámetros de MLPClassifier y MLPRegressor
solver
Es el optimizador para calcular el mínimo de la función de coste:
• lbfgs, optimizador de la familia de los métodos casi-Newton
• sgd, descenso de gradiente estocástico
• adam (opción por defecto)
max_iter
Determina el número máximo de epochs para entrenar la RN. El
valor por defecto es 200. Si converge antes de max_iter, se
detiene el aprendizaje.
learning_rate
Tasa de aprendizaje para actualización de los pesos. Puede ser:
-constant, valor constante especificado por el parámetro
learning_rate_init, aplicable solo si el solver es "sgd" o "adam".
-invscaling, tasa de aprendizaje gradualmente decreciente. Solo
es aplicable si el solver es "sgd“con power_t por defecto 0.5
-adaptative. Este método mantiene la tasa de aprendizaje
constante e igual a learning_rate_init mientras se confirme una
reducción en el valor de la función de coste durante el
entrenamiento, en cuyo caso se actualiza.
CLASIFICACIÓN CON
REDES NEURONALES
SKLEARN MLPClassifier
CLASIFICACIÓN CON
DATAFRAME
DICCIONARIO
SKLEARN MLPClassifier
PESO ESTATURA DECISION
Ejm: MODELOS: Determinar si una 55 160 SI
postulante a modelo es aceptada o no, 60 180 SI
en función de su peso y estatura. 62 155 NO
Ejemplos de entrenamiento:
65 160 NO
CONSULTA:
67 160 NO
peso=61, estatura=151, d=no
peso=60, estatura= 170 65 179 SI

decisión=si 72 187 SI
75 155 NO
64 178 SI
77 170 NO
78 160 NO
70 185 SI
CLASIFICACIÓN: MODELOS DATAFRAME DICCIONARIO
import numpy as np
import pandas as pd
from sklearn.neural_network import MLPClassifier
# DATOS
df = pd.DataFrame( {
“peso":[55,60,62,67,65,75,64,77,78,70,72,65],
“estatura":[168,180,155,160,179,155,178,170,160,185,187,160],
“decision": [1,1,0,0,1,0,1,0,0,1,1,0] } )
entrada=[“peso", “estatura"]
salida=[“decision"]
x = df[entrada]
y = df[salida]
if len(salida)==1:
y=np.ravel(y)
CLASIFICACIÓN: MODELOS DATAFRAME DICCIONARIO
# SELECCIONAR DATOS DE train y test PARA
ENTRENAMIENTO Y PRUEBA
from sklearn.model_selection import train_test_split
xtrain, xtest, ytrain, ytest = train_test_split(x, y, test_size =
0.2)
# NORMALIZAR LOS DATOS
from sklearn.preprocessing import StandardScaler
escalar = StandardScaler()
xtrain = escalar.fit_transform(xtrain)
xtest = escalar.transform(xtest)
# TRAIN
modelo=MLPClassifier(activation='logistic', max_iter=100,
hidden_layer_sizes=(3, ),solver='lbfgs')
modelo.fit(xtrain, ytrain)
modelo.predict(xtrain)
CLASIFICACIÓN: MODELOS DATAFRAME DICCIONARIO
# TEST
model.predict(xtest)
print(“precision: ”, modelo.score(xtest, ytest))
# DATOS DE CONSULTA (query)
dfquery = pd.DataFrame( {
“peso":[61,60],
“estatura":[151,170] } )
xq = dfquery[entrada]
print("datos de consulta: ",xq)
# NORMALIZAR LOS DATOS DE CONSULTA
xq = escalar.transform(xq)
# RESULTADO DE LA CONSULTA
print('predicciones:', model.predict(xq))
CLASIFICACIÓN CON
EXCEL
SKLEARN MLPClassifier
Ejm. CLASIFICACIÓN DE VOCALES
VARIABLES DE
VARIABLES DE ENTRADA
SALIDA
X
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 S1 S2 S3 S4

A 0 1 0 1 0 1 1 1 1 1 0 1 1 0 1 0 0 0 1
A 1 1 1 1 0 1 1 1 1 1 0 1 1 0 1 0 0 0 1
E 1 1 1 1 0 0 1 1 0 1 0 0 1 1 1 0 0 1 0
E 0 1 1 1 0 0 1 1 0 1 0 0 0 1 1 0 0 1 0
I 1 1 1 0 1 0 0 1 0 0 1 0 1 1 1 0 0 1 1
I 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 1
O 1 1 1 1 0 1 1 0 1 1 0 1 1 1 1 0 1 0 0
O 0 1 0 1 0 1 1 0 1 1 0 1 0 1 0 0 1 0 0
U 1 0 1 1 0 1 1 0 1 1 0 1 1 1 1 0 1 0 1
U 1 0 1 1 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1
a 1 1 1 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1
a 0 1 1 0 0 1 1 1 1 1 0 1 1 1 0 0 1 1 1
e 1 1 1 1 0 1 1 1 1 1 0 0 1 1 1 1 0 0 0
e 0 1 1 1 0 1 1 1 1 1 0 0 0 1 1 1 0 0 0
i 0 1 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 0 1
i 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1
o 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 0 1 0
o 0 0 0 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0
u 0 0 0 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 1
u 0 0 0 1 0 1 1 0 1 1 0 1 0 1 0 1 0 1 1
CLASIFICACIÓN DE VOCALES: EXCEL
import numpy as np
import pandas as pd
from sklearn.neural_network import MLPClassifier
# DATOS EN EXCEL
df = pd.read_excel (‘vocales.xlsx',sheet_name= 'datos')
print(df)
# VARIABLES DE ENTRADA
entrada= ["X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9",
"X10", "X11", "X12", "X13", "X14", "X15"]
# VARIABLES DE SALIDA
salida= ["S1", "S2", "S3", "S4", "S5", "S6", "S7"]
# DATOS DE ENTRADA
x = df[entrada]
# DATOS DE SALIDA
y = df[salida]
if len(salida)==1:
y=np.ravel(y)
CLASIFICACIÓN DE VOCALES: EXCEL
# SELECCIONAR DATOS DE train y test PARA
ENTRENAMIENTO Y PRUEBA
#from sklearn.model_selection import train_test_split
#xtrain, xtest, ytrain, ytest = train_test_split(x,y, test_size=0.2)
xtrain=x
ytrain=y
# NORMALIZAR LOS DATOS
#from sklearn.preprocessing import StandardScaler
#escalar = StandardScaler()
#xtrain = escalar.fit_transform(xtrain)
#xtest = escalar.transform(xtest)
# TRAIN
modelo = MLPClassifier(hidden_layer_sizes=(20,20),
activation="logistic", random_state=1, max_iter=2000,
solver='lbfgs')
modelo.fit(xtrain, ytrain)
print("precisión de train: ",modelo.score(xtrain, ytrain))
CLASIFICACIÓN DE VOCALES: EXCEL
# TEST
#xtest=x
#ytest=y
#ypred=modelo.predict(xtest)
#print("salida de test - salida de predicción: ", ytest - ypred)
# DATOS DE CONSULTA (query)
dfquery = pd.read_excel (‘vocales.xlsx',sheet_name= ‘query')
xq = dfquery[entrada]
print("datos de consulta: ",xq)
# NORMALIZAR LOS DATOS DE CONSULTA
#xq = escalar.transform(xq)
# RESULTADO DE LA CONSULTA
print('predicciones:', modelo.predict(xq))
PREDICCIÓN CON
REDES NEURONALES
SKLEARN MLPRegressor
PREDICCIÓN CON CSV
SEPARADO POR COMAS
SKLEARN MLPRegressor
Ejm. Comportamiento clima
Year Month Tmax Tmin Rain Sun
0 1957 1 8.7 2.7 39.5 53.0
1 1957 2 9.0 2.9 69.8 64.9
2 1957 3 13.9 5.7 25.4 96.7
3 1957 4 14.2 5.2 5.7 169.6
4 1957 5 16.2 6.5 21.3 195.0
.. ... ... ... ... ... ...
743 2018 12 10.7 5.2 60.6 40.3
744 2019 1 7.6 2.0 33.2 56.4
745 2019 2 12.4 3.3 34.2 120.2
746 2019 3 13.1 5.8 49.6 119.0
747 2019 4 15.8 5.7 12.8 170.1

[748 rows x 6 columns]


PREDICCIÓN DE LA TEMPERATURA: CSV
import numpy as np
import pandas as pd
from sklearn.neural_network import MLPRegressor
# DATOS EN CSV
df = pd.read_csv ('tiempo02.csv')
print(df)
# VARIABLES DE ENTRADA
entrada = ["Year", "Month"]
# VARIABLES DE SALIDA
salida = ["Tmax"]
# DATOS DE ENTRADA
x = df[entrada]
# DATOS DE SALIDA
y = df[salida]
if len(salida)==1:
y = np.ravel(y)
PREDICCIÓN DE LA TEMPERATURA: CSV
# SELECCIONAR DATOS DE train y test PARA
ENTRENAMIENTO Y PRUEBA
from sklearn.model_selection import train_test_split
xtrain, xtest, ytrain, ytest = train_test_split(x, y, test_size =
0.2)
# NORMALIZAR LOS DATOS
from sklearn.preprocessing import StandardScaler
escalar = StandardScaler()
xtrain = escalar.fit_transform(xtrain)
xtest = escalar.transform(xtest)
# TRAIN
modelo = MLPRegressor(hidden_layer_sizes=(20,20
),activation=“relu" ,random_state=1, max_iter=2000,
solver='lbfgs')
modelo.fit(xtrain, ytrain)
modelo.predict(xtrain)
PREDICCIÓN DE LA TEMPERATURA: CSV
# TEST
ypred = modelo.predict(xtest)
print("salida de test - salida de predicción: ", ytest - ypred)
print("precisión del test: ",modelo.score(xtest, ytest))
# DATOS DE CONSULTA (query)
dfquery = pd.DataFrame( {
"Year":[2019, 2020],
"Month":[5, 1] } )
xq = dfquery[entrada]
print("datos de consulta: ",xq)
# NORMALIZAR LOS DATOS DE CONSULTA
xq = escalar.transform(xq)
# RESULTADO DE LA CONSULTA
print('predicciones:', modelo.predict(xq))
PREDICCIÓN CON EXCEL
SKLEARN MLPRegressor
NORMALIZANDO LAS
SALIDAS
(si con relu la precisión es
menor a 0,9)
PREDICCIÓN CON
EXCEL
SKLEARN MLPRegressor
EJM. AJUSTE DE CURVAS

X COSX SENX
0 1 0
0,01 0,99995 0,01
0,02 0,9998 0,019999
0,03 0,99955 0,029996
0,04 0,9992 0,039989
0,05 0,99875 0,049979
0,06 0,998201 0,059964
0,07 0,997551 0,069943
0,08 0,996802 0,079915
0,09 0,995953 0,089879
,,, ,,, ,,,
1 0,540302 0,841471
AJUSTE DE CURVAS
import numpy as np
import pandas as pd
from sklearn.neural_network import MLPRegressor
# DATOS EN EXCEL
df = pd.read_excel (‘seno.xlsx', sheet_name= 'datos')
print(df)
# VARIABLES DE ENTRADA
entrada=[“x",“cosx"]
# VARIABLES DE SALIDA
salida=[“senx"]
# DATOS DE ENTRADA
x = df[entrada]
# DATOS DE SALIDA
y = df[salida]
if len(salida)==1:
y=np.ravel(y)
AJUSTE DE CURVAS
# SELECCIONAR DATOS DE train y test PARA
ENTRENAMIENTO Y PRUEBA
from sklearn.model_selection import train_test_split
xtrain, xtest, ytrain, ytest = train_test_split(x, y, test_size =
0.2)
print(xtest, ytest)
# NORMALIZAR LOS DATOS
#from sklearn.preprocessing import StandardScaler
#escalar = StandardScaler()
#xtrain = escalar.fit_transform(xtrain)
#xtest = escalar.transform(xtest)
# TRAIN
modelo=MLPRegressor(activation=‘relu', max_iter=2000,
hidden_layer_sizes=(20, 12),solver='lbfgs')
modelo.fit(xtrain, ytrain)
AJUSTE DE CURVAS
# TEST
print("precisión del test: ",modelo.score(xtest, ytest))
# DATOS DE CONSULTA (query)
dfquery = pd.read_excel (‘seno.xlsx',sheet_name= ‘query')
xq = dfquery[entrada]
print("datos de consulta: ",xq)
# NORMALIZAR LOS DATOS DE CONSULTA
#xq = escalar.transform(xq)
# RESULTADO DE LA CONSULTA
yq=modelo.predict(xq)
print('predicciones:', yq)
ye=np.sin(xq['x'])
print('exactos:',ye)
print('ERROR EXACTO EN %:')
error= np.abs((ye-yq)/ye)*100
print(error)
CLASIFICACIÓN Y PREDICCIÓN
CON DATASET
SKLEARN

Repositorio de datasets:
https://archive.ics.uci.edu/ml/datasets.php
Breast cancer wisconsin (diagnostic) dataset
**Data Set Characteristics:**
:Number of Instances: 569
:Number of Attributes: 30 numeric, predictive attributes and
the class
:Attribute Information:
- radius (mean of distances from center to points on the
perimeter)
- texture (standard deviation of gray-scale values)
- perimeter
- area
- smoothness (local variation in radius lengths)
- compactness (perimeter^2 / area - 1.0)
- concavity (severity of concave portions of the contour)
- concave points (number of concave portions of the
contour)
- symmetry
- fractal dimension ("coastline approximation" - 1)
Breast cancer wisconsin (diagnostic) dataset
MIN MAX
radius (mean): 6.981 28.11
texture (mean): 9.71 39.28
perimeter (mean): 43.79 188.5
area (mean): 143.5 2501.0
smoothness (mean): 0.053 0.163
compactness (mean): 0.019 0.345
concavity (mean): 0.0 0.427
concave points (mean): 0.0 0.201
symmetry (mean): 0.106 0.304
fractal dimension (mean): 0.05 0.097
radius (standard error): 0.112 2.873
texture (standard error): 0.36 4.885
perimeter (standard error): 0.757 21.98
area (standard error): 6.802 542.2
smoothness (standard error): 0.002 0.031
compactness (standard error 0.002 0.135
concavity (standard error): 0.0 0.396
Breast cancer wisconsin (diagnostic) dataset
MIN MAX
concave points (standard error): 0.0 0.053
symmetry (standard error): 0.008 0.079
fractal dimension (standard error):0.001 0.03
radius (worst): 7.93 36.04
texture (worst): 12.02 49.54
perimeter (worst): 50.41 251.2
area (worst): 185.2 4254.0
smoothness (worst): 0.071 0.223
compactness (worst): 0.027 1.058
concavity (worst): 0.0 1.252
concave points (worst): 0.0 0.291
symmetry (worst): 0.156 0.664
fractal dimension (worst): 0.055 0.208
CLASIFICACIÓN: DATASET CANCER
Import pandas as pd
# IMPORTAR DATOS DEL DATASET
from sklearn import datasets
dataset = datasets.load_breast_cancer()
print('Información en el dataset:')
print(dataset.keys()))
# SE OBTIENE LAS CARACTERÍSTICAS DEL DATASET
print('Características del dataset:')
print(dataset.DESCR)
# DATOS DE ENTRADA (COLUMNAS DE ENTRADA EN data)
x = dataset.data
# Variables de entrada (nombre de columnas de entrada)
entrada=dataset.feature_names
# DATOS DE SALIDA (COLUMNAS DE SALIDA EN target)
y = dataset.target
# Variables de entrada (nombre de columnas de entrada)
salida=dataset.target_names
CLASIFICACIÓN: DATASET CANCER

# SELECCIONAR DATOS DE train y test


from sklearn.model_selection import train_test_split
xtrain, xtest, ytrain, ytest = train_test_split(x, y, test_size= 0.2)
# NORMALIZAR LOS DATOS
from sklearn.preprocessing import StandardScaler
escalar = StandardScaler()
xtrain = escalar.fit_transform(xtrain)
xtest = escalar.transform(xtest)
# CREAR EL MODELO DE RED NEURONAL
from sklearn.neural_network import MLPClassifier
modelo=MLPClassifier(activation='logistic', max_iter=100,
hidden_layer_sizes=(3, ),solver='lbfgs')
CLASIFICACIÓN: DATASET CANCER

# ENTRENAR EL MODELO CON LOS DATOS DE train


modelo.fit(xtrain, ytrain)
# PRUEBA (PREDICCIÓN) CON LOS DATOS DE test
ypred = modelo.predict(xtest)
print('Exactitud con datos test:‘,modelo.score(xtest, ytest))
print('Diferencia entre y-pred (predicción) Y y_test (dato)')
print(ypred - ytest)
# MATRIZ DE CONFUSIÓN PARA VERIFICAR EL
RENDIMIENTO DEL MODELO
from sklearn.metrics import confusion_matrix
matriz = confusion_matrix(ytest, ypred)
print('Matriz de Confusión:‘,matriz)
CLASIFICACIÓN: DATASET CANCER
# DATOS DE CONSULTA (query)
dfquery = pd.DataFrame( {"mean radius":[28],"mean texture":
[39], "mean perimeter":[188],"mean area":[2500],"mean
smoothness":[0.1],"mean compactness":[0.3],"mean
concavity":[0.4],"mean concave points":[0.2],"mean
symmetry":[0.3],"mean fractal dimension":[0.09],"radius
error":[2],"texture error":[4],"perimeter error":[21],"area
error":[542],"smoothness error":[0.03],"compactness
error":[0.1],"concavity error":[0.3],"concave points error":
[0.05],"symmetry error":[0.07],"fractal dimension error":[0.03]
,"worst radius":[36],"worst texture":[49.5],"worst perimeter":
[251],"worst area":[4254],"worst moothness“: [0.22],"worst
compactness":[1],"worst concavity":[1.2],"worst concave
points": [0.2],"worst symmetry":[0.6],"worst fractal
dimension":[0.2] } )
CLASIFICACIÓN: DATASET CANCER

xq = dfquery[entrada]
print("datos de consulta: ",xq)
# NORMALIZAR LOS DATOS DE CONSULTA
xq = escalar.transform(xq)
# RESULTADO DE LA CONSULTA
print('predicciones:', modelo.predict(xq))
GRACIAS

También podría gustarte