Machine Learning
Machine Learning es una disciplina científica del ámbito de la Inteligencia Artificial que crea sistemas que aprenden automáticamente.
Aprender en este contexto quiere decir identificar patrones complejos en millones de datos. La máquina que realmente aprende es un
algoritmo que revisa los datos y es capaz de predecir comportamientos futuros.
Los diferentes algoritmos de machine learning se agrupan en : Supervised learning, Unsupervised learning, Semi-supervised learning,
Reinforcement learning.
Aprendizaje supervisado
Los algoritmos de aprendizaje supervisados construyen un modelo matemático de un conjunto de datos que contiene tanto las entradas
como las salidas [Link] el modelo matemático, cada ejemplo de entrenamiento está representado por una matriz o vector, a
veces llamado vector de features, y los datos de entrenamiento están representados por una matriz. A través de la optimización iterativa
de una función objetivo, los algoritmos de aprendizaje supervisado aprenden una función que puede usarse para predecir la salida
asociada con nuevas entradas. Los tipos de algoritmos de aprendizaje supervisado incluyen la clasificación y la regresión.
Clasificación
Todas las librerias deben ser llamadas en grupo y una sola vez.
train_test_split es utilizado para dividir datos.
[Link] es la librería de machine learning.
[Link] es la libreria para las métricas.
In [1]: from [Link] import drive
import numpy as np
import [Link] as plt
import pandas as pd
import [Link]
import [Link] as plt
from pandas import DataFrame
from sklearn.model_selection import train_test_split
from [Link] import LinearSVC, SVC
from [Link] import accuracy_score,fl_score
from [Link] import StandardScaler
from [Link] import Pipeline
Se procede a montar el drive
In [2]: [Link]( '/content/gdrive' )
Mounted at /content/gdrive
Es importante crear una variable que contenga la dirección de de la carpeta donde se desea trabajar tanto para guardar comopara leer
datos.
In [3]: path_data = "Dirección de la carpeta donde se encuentra el archivo a analizar"
#Ejemplo
#path_data = "/content/gdrive/My Drive/Intel igenciaArtificial/"
Luego de tener las dirección de la carpeta a utilizar se procede a leer los datos de clasificación.
In [4]: data = pd.read_excel(path_data+'nombre del archivo excel o subcarpetas + nombre de archivo' )
#Ejemplo
#data= pd.read_excel(path_data+'[Link]')
Para mostrar que datos tiene el dataframe data se utiliza la opción .head() que solo muestra las 5 primeras filas. Es muy importante
saber como son los datos, cantidad, columnas, si faltan datos, etc.
In [6]: [Link]()
Out[6]: Unnamed: O t1 t2 t3 t4 t5 Falla
o o 0.005085 0.209895 0.167741 0.185438 -0.000181 2
1 1 0.004835 0.209634 0.167600 0.185388 -0.000087 2
2 2 0.004935 0.208475 0.168226 0.184962 -0.000118 2
3 3 0.005222 0.209669 0.168295 0.185691 -0.000151 2
4 4 0.005768 0.210190 0.169399 0.186443 -0.000117 2
EJERCICIO.
Buscar la forma de mostra un resumen de la tabla donde indique la cantidad de datos, valores máximos y mínimos.
In [ ]: data. describe()
Out[8]: Unnamed: O t1 t2 t3 t4 t5 Falla
count 1225.000000 1225.000000 1225.000000 1225.000000 1225.000000 1.225000e+03 1225.000000
mean 612.000000 0.005660 0.131291 0.098470 0.111333 1.2654 79e-05 2.367347
std 353.771348 0.001869 0.132035 0.110145 0.119902 2.658838e-04 0.774752
min 0.000000 0.003715 0.030897 0.020922 0.024705 -9.775517e-04 1.000000
25% 306.000000 0.004859 0.051271 0.033771 0.040276 -1 .063525e-04 2.000000
50% 612.000000 0.005240 0.091883 0.063276 0.073212 5.086987e-07 3.000000
75% 918.000000 0.005701 0.139932 0.092839 0.108847 3.978629e-05 3.000000
max 1224.000000 0.016850 0.660945 0.537447 0.590824 2.640066e-03 3.000000
Antes de utilizar los métodos de machine learning los datos deben estar completos, es decir quena existan vacíos o NAN. Por otro lado,
estas tabalas solo deben contener las variables de entrada (X) así como las variables objetivo (y).
De la tabla anterior se puede ver una columna Unnamed la cual es no es parte del estudio. Por lo tanto se debe eliminar estar columna
utilizando el comando drop.
In [7]: [Link]([ 'Unnamed: 0' ], inplace=True, axis =l )
Después de utilizar el drop pasamos a verificar nuevamente si la tabla se encuentra de acuerdo a las necesidades requeridas.
In [8]: [Link]()
Out[8]: t1 t2 t3 t4 t5 Falla
o 0.005085 0.209895 0.167741 0.185438 -0.000181 2
1 0.004835 0.209634 0.167600 0.185388 -0.000087 2
2 0.004935 0.208475 0.168226 0.184962 -0.000118 2
3 0.005222 0.209669 0.168295 0.185691 -0.000151 2
4 0.005768 0.210190 0.169399 0.186443 -0.000117 2
A continuación se crea la variable X (datos de entrada) y la variable y(objetivo). Las variables X, y serán obtenidas a partir de la tabla
data.
La variable X será obtenida haciendo una copia de data. La función copy() es utilizada con el objetivo de no modificar la data original.
In [9]: X = [Link]()
La variable y será utilizando la función pop(). Este comando extrae la columna deseada y la pasa la variable y asi como tambien
actualiza la variable X sin la columna extraíada anterioremente
In [10]: y = X. pop( ' Falla' )
EJERCICIO Mostras las variables X , y.
In [ ]:
La función train_test_split se utiliza para dividir datos en dos grupos, en este caso se va dividir en entrenamiento (X,y) y en test (X,y).
test_size representa la cantidad de los valores de test. Cuando se pone en decial nos indica el porcentaje,caso contrario seria una
cantidad fija de datos.
In [11]: X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.5 , random_state = 40 )
In [13] : X_train
Out[13]: t1 t2 t3 t4 t5
13 0.004665 0.209349 0.167920 0.185220 -0.000109
312 0.005059 0.150726 0.116804 0.130656 -0.000088
473 0.005046 0.039151 0.026669 0.031376 0.000004
267 0.004614 0.045547 0.030134 0.035795 0.000004
810 0.004310 0.074879 0.047261 0.057093 0.000102
626 0.005915 0.112954 0.084438 0.095751 0.000049
1016 0.005551 0.060462 0.034748 0.042923 -0.000136
165 0.005378 0.102661 0.076134 0.086726 0.000148
7 0.004844 0.209589 0.167539 0.185285 -0.000105
219 0.005043 0.045482 0.030887 0.036396 0.000010
612 rows x 5 columns
EJERCICIO [Link] y mostrar los datos de train y test. [Link] test_size por un número entero y hacer el ejercicio 1.
A continuación se muestra el codigo de Support Vector Machine(método de machine learning). En el caso de clasificación se utiliza SVC
(support vector classification). Los kernel de este método son importantes para el ajuste de método.
Para mayor información: httgs://[Link]/stable/modules/generated/sklearn .[Link] (httgs://scikit-
[Link]/stable/modules/generated/[Link]).
In [14]: clf_svm = Pipeline([( 'scaler' , StandardScaler()),
( 'svm' , SVC(C=l , kernel ='rbf' , degree=3, gamma ='auto' , random_state=0))])
clf_svm.fit(X_train, y_train)
Out[14]: Pipeline(memory=None,
steps=[('scaler',
StandardScaler(copy=True, with_mean=True, with_std=True)),
('svm',
SVC(C=l, break_ties=False, cache_size=200, class_weight=None,
coef0=0.0, decision_function_shape='ovr', degree=3,
gamma='auto', kernel='rbf', max_iter=-1, probability=False,
random_state=0, shrinking=True, tol=0.001,
verbose=False))],
verbose=False)
In [15]: clf_svm.predict(X_test)
Out[lS]: array( [3, 2, 3, 3, 3, 3, 1, 3, 2, 3, 2, 3, 2, 3, 3, 2, 2, 3, 3, 3, 3, 3,
3, 3, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 2, 3,
3, 3, 3, 3, 3, 2, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 2, 3, 2, 3, 3, 2,
3, 3, 2, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 2, 3, 2,
1, 2, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 2, 3, 1, 3, 3, 3, 3, 2, 2, 2,
2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 2, 3, 3, 3, 3, 2, 3, 3,
3, 2, 2, 3, 3, 3, 2, 2, 2, 2, 2, 3, 2, 3, 2, 2, 3, 3, 3, 3, 2, 2,
3, 3, 1, 3, 2, 3, 1, 2, 2, 2, 2, 2, 3, 3, 3, 2, 3, 3, 3, 3, 3, 1,
1, 3, 2, 2, 2, 3, 2, 2, 3, 3, 2, 3, 3, 3, 3, 3, 2, 2, 3, 2, 3, 3,
3, 3, 2, 3, 3, 3, 3, 2, 3, 2, 2, 3, 3, 2, 2, 2, 2, 2, 3, 3, 2, 2,
2, 3, 1, 3, 2, 2, 3, 3, 3, 2, 3, 3, 2, 2, 2, 3, 3, 2, 3, 2, 3, 2,
3, 3, 3, 2, 2, 3, 3, 3, 3, 2, 3, 2, 2, 1, 3, 3, 3, 2, 3, 2, 3, 2,
2, 2, 3, 3, 3, 3, 3, 3, 2, 3, 1, 3, 1, 2, 3, 2, 2, 2, 3, 3, 3, 3,
3, 3, 2, 3, 3, 2, 2, 3, 3, 2, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 2, 3,
3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 2, 3, 2, 3, 3, 2, 2, 3, 2, 3, 2,
3, 2, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 3, 3, 3, 2, 3, 2, 3, 3, 3, 3,
2, 3, 3, 1, 3, 3, 2, 3, 3, 2, 3, 3, 2, 3, 3, 3, 2, 3, 2, 2, 2, 3,
3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 3, 1, 2, 3, 3, 3, 2, 3, 3, 2, 3, 3,
3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 3, 2, 3, 3, 3, 2, 3, 3, 2,
3, 2, 3, 3, 2, 2, 3, 3, 3, 3, 2, 3, 3, 2, 3, 3, 3, 3, 3, 3, 2, 3,
3, 2, 2, 3, 3, 3, 2, 3, 2, 2, 2, 2, 3, 3, 3, 3, 2, 3, 2, 2, 3, 2,
3, 3, 2, 2, 2, 3, 3, 2, 3, 3, 3, 3, 3, 2, 3, 3, 3, 2, 2, 3, 2, 3,
3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 2, 3, 2, 2, 2, 3, 2, 2, 3, 3, 3, 2,
3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 2, 2, 3, 3, 3, 2, 3, 3, 2,
3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2,
3, 3, 3, 3, 3, 2, 2, 3, 2, 3, 3, 3, 1, 3, 2, 3, 2, 3, 3, 2, 3, 3,
2, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 2, 3, 2, 3, 3, 3, 2, 2])
Las métricas son utilizadas para determinar la eficiencia del método. Una métrica muy utilizada en clasificación es el f1_score.
Para mayor información de métricas visitar la siguiente página: httQs://[Link]/stable/modules/model [Link]
.(httQs://[Link]/stable/modules/model [Link]).
In [16]: fl_svm =fl_score(y_test, clf_svm.predict(X_test),average='micro' )
fl_svm
Out[16]: 0.7194127243066885
Type Markdown and LaTeX: a 2
EJERCICIO
[Link] el f1_score para el entrenamiento.
Regresión
In [22]: from google . colab import drive
import numpy as np
import matplotlib . pyplot as plt
import pandas as pd
import scipy . io
import matplotlib . pyplot as plt
from pandas import DataFrame
from sklearn . model_selection import train_test_split
from sklearn . metrics import r2_score,mean_squared_error, mean- absolute- error
from sklearn . svm import SVR
import seaborn as sns
In [ ]: [Link]( '/content/gdrive' )
Drive already mounted at /content/gdrive; to attempt to forcibly remount , call drive . mount("/content/gdrive",
force_remount=True).
In [ ] : path_data = "Nombre de la carpeta "
In [17]: data = pd.read_excel(path_data+'Nombre del archivo excel' )
[Link]()
Out[17]: id PtP_Fx PtP_Fy PtP_Fz PtP_Vx PtP_Vy PtP_Vz PtP_AE Max_VB
o 1 19.988 49.693 26.362 0.753 0.627 0.761 0.366 48.893
1 2 20.389 50.102 25.701 0.761 0.658 0.809 0.323 49.571
2 3 17.216 48.269 23.890 0.822 0.724 0.862 0.284 50.303
3 4 18.267 47.902 25.763 0.808 0.719 0.760 0.317 51 .084
4 5 18.759 47.100 26.681 0.765 0.716 0.788 0.317 52.250
In [18]: [Link]([ 'id' ], inplace=True , axis =l )
[Link]()
Out[18]: PtP_Fx PtP_Fy PtP_Fz PtP_Vx PtP_Vy PtP_Vz PtP_AE Max_VB
o 19.988 49.693 26.362 0.753 0.627 0.761 0.366 48.893
1 20.389 50.102 25.701 0.761 0.658 0.809 0.323 49.571
2 17.216 48.269 23.890 0.822 0.724 0.862 0.284 50.303
3 18.267 47.902 25.763 0.808 0.719 0.760 0.317 51 .084
4 18.759 47.100 26.681 0.765 0.716 0.788 0.317 52.250
In [19]: X = [Link]()
y = [Link]( 'Max_VB' )
A continuación se dividen los datos. A diferencia de clasificación en este caso se esta utilziando la opción shuffle que sirve para dividir
los datos de forma ordenada o desordenada.
In [20]: X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3 ,shuffle=False )
EJERCICIO
[Link] los datos de train y test para los casos de shuffle igual a True y False.
A continuación se muestra el codigo de Support Vector Machine(método de machine learning). En el caso de regresión se utiliza SVR
(support vector regression). Los kernel de este método son importantes para el ajuste de método.
Para mayor información: httgs://[Link]/stable/modules/generated/sklearn .[Link] (httgs://scikit-
[Link]/stable/modules/generated/[Link]).
In [23]: m svr = SVR(kernel='linear' ,
gamma ='scale' ,
( =5000,
)
m_svr.fit(X_train, y_train)
Out[23]: SVR(C=5000, cache_size=200, coef0=0.0, degree=3, epsilon=0.1, gamma='scale',
kernel='linear', max_iter=-1, shrinking=True, tol=0.001, verbose=False)
Despues de haber ajustado el método se pueden realizar las predicciones utilizando la opción .predict().
In [24]: y_pred_train = m_svr.predict(X_train)
y_pred_test = m_svr.predict(X_test)
En el caso de regresión es muy importante realizar los gráficos de los datos medidos, entrenamiento y test para así poder comparar y
tener un idea de la eficiencia del método de machine learning.
In [25]: y_pred =[Link]([[Link](data=y_pred_train),
[Link](data=y_pred_test)], ignore_index=True )
[Link](figsize=(10, 6))
[Link](y)
[Link](y_pred, 'ro' )
[Link](y_pred_train, 'bo' )
[Link]([ 'Medido' , 'Test' , 'Train' ], loc ='upper left' )
[Link]( "cut" )
[Link]( "tool wear" )
plt. show()
300 - Medido •
• l'::st ..
• "i"ain
250
200
'-
10
11,J
~ 150
o
B
100
50
•
•
o
•
o 50 100 150 200 250 300
rut
Las métricas son utilizadas para determinar la eficiencia del método. Las métricas mas utilizadas en regresión son RMSE y MAE.
Para mayor información de métricas visitar la siguiente página: httRs://[Link]/stable/modules/model [Link]
.(httRs://[Link]/stable/modules/model [Link]).
In [26]: print ( 'R2=' , r2_score(y_train,y_pred_train))
print ( 'RMSE=' ,mean_squared_error(y_train,y_pred_train) ** (l / 2.0 ))
print ( 'MAE=' ,mean_absolute_error(y_train,y_pred_train))
R2= 0.6412387278116445
RMSE= 9.575966603863657
MAE= 7.5184996066748795
EJERCICIO
[Link] mas métricas para los datos de test.
Type Markdown and LaTeX: a 2
Series Temporales y sus Features
En la mayoria de equipos monitoreados se pueden encontrar series temporales como datos medidos asi como es el caso de mediciones
de vibración .
En este capitulo se explicará el procedimiento para extraer información de las series temporales debido que los métodos de machine
learning no utilizan las señales completas como datos de entrada. Es por eso la importancia de extraer las carácteristicas (features)
representativas de las series temporales.
Como se puede ver en la imagen a seguir una o un conjunto de series de temporales que su vez podria ser divido se le aplicaca un
función para extraer un feature. Las funciones pueden ser : Máximo , mínimo, pico a pico, kurtosis, energía absoluta y muchos mas.
In [ ] : path_data = "Dirección de la carpeta de google drive"
A continuación se procede a leer un archivo .mat que contiene la medición de vibración en un motor eléctrico que tiene fallas en
rodamiento.
In [27]: file = str (105 )
matdata = [Link] . loadmat(path_data+ 'nombre del archivo .mat' )
BA = [Link](matdata[ 'X' +file+'_BA_time' ]).T
Se procede a leer solo una columna de los datos de la variable BA. En este caso se esta utilizando todos los datos.
In [28]: Val_BA = BA[ 0, 0:[Link]]
In [ 29] : plt. plot (Val_BA)
plt. show()
O 20000 40000 60000 80000 100000 120000
EJERCICIO
[Link] los primero 100, 1000 y 10000 puntos de la serie temporal.
Para poder extraer los fatures de la serie temporal se pueden utilizar funciones credas por uno mismo, funciones listas encontradas en
numpy o pandas y por ultimo se pueden utilizar librerías como TSFresh, TSFel y TSFuse.
A seguir se utilizar la función .max de numpy para extarer el maximo valor de la serie temporal que puede ser utilzado como un feature.
In [ ]: Featurel=[Link](Val_BA)
Featurel
Out[31]: 0.3720348961424333
EJERCICIO
[Link] los siguientes features:
-mínimo -pico a pico -valor máximo de la FFT de la serie tempral -energía absoluta