Aprendizaje automático: flujos de trabajo automáticos
Introducción
Para ejecutar y producir resultados con éxito, un modelo de aprendizaje automático debe automatizar algunos flujos de trabajo estándar. El proceso de automatizar estos flujos de trabajo estándar se puede realizar con la ayuda de Scikit-learn Pipelines. Desde la perspectiva de un científico de datos, la canalización es un concepto generalizado, pero muy importante. Básicamente, permite que los datos fluyan desde su formato sin procesar a alguna información útil. El funcionamiento de las tuberías se puede entender con la ayuda del siguiente diagrama:
Los bloques de canalizaciones de ML son los siguientes:
Data ingestion- Como sugiere el nombre, es el proceso de importar los datos para su uso en el proyecto ML. Los datos se pueden extraer en tiempo real o por lotes de uno o varios sistemas. Es uno de los pasos más desafiantes porque la calidad de los datos puede afectar todo el modelo de AA.
Data Preparation- Después de importar los datos, necesitamos preparar los datos que se utilizarán para nuestro modelo de AA. El preprocesamiento de datos es una de las técnicas más importantes de preparación de datos.
ML Model Training- El siguiente paso es entrenar nuestro modelo ML. Contamos con varios algoritmos de aprendizaje automático, como el refuerzo supervisado, no supervisado, para extraer las características de los datos y realizar predicciones.
Model Evaluation- A continuación, necesitamos evaluar el modelo ML. En el caso de la canalización de AutoML, el modelo ML se puede evaluar con la ayuda de varios métodos estadísticos y reglas comerciales.
ML Model retraining- En el caso de la canalización de AutoML, no es necesario que el primer modelo sea el mejor. El primer modelo se considera un modelo de línea de base y podemos entrenarlo repetidamente para aumentar la precisión del modelo.
Deployment- Por fin, necesitamos implementar el modelo. Este paso implica aplicar y migrar el modelo a las operaciones comerciales para su uso.
Desafíos que acompañan a las canalizaciones de ML
Para crear canalizaciones de ML, los científicos de datos enfrentan muchos desafíos. Estos desafíos se dividen en las siguientes tres categorías:
Calidad de los datos
El éxito de cualquier modelo de aprendizaje automático depende en gran medida de la calidad de los datos. Si los datos que proporcionamos al modelo ML no son precisos, confiables y sólidos, terminaremos con un resultado incorrecto o engañoso.
Fiabilidad de los datos
Otro desafío asociado con las canalizaciones de ML es la confiabilidad de los datos que proporcionamos al modelo de ML. Como sabemos, puede haber varias fuentes de las que los científicos de datos pueden adquirir datos, pero para obtener los mejores resultados, debe asegurarse de que las fuentes de datos sean fiables y fiables.
Accesibilidad de datos
Para obtener los mejores resultados de las canalizaciones de ML, los datos en sí deben ser accesibles, lo que requiere consolidación, limpieza y curación de datos. Como resultado de la propiedad de accesibilidad a los datos, los metadatos se actualizarán con nuevas etiquetas.
Modelado de canalización de ML y preparación de datos
La fuga de datos, que ocurre desde el conjunto de datos de entrenamiento hasta el conjunto de datos de prueba, es un problema importante que debe abordar el científico de datos mientras prepara los datos para el modelo ML. Generalmente, en el momento de la preparación de los datos, el científico de datos usa técnicas como la estandarización o la normalización en todo el conjunto de datos antes de aprender. Pero estas técnicas no pueden ayudarnos a evitar la filtración de datos porque el conjunto de datos de entrenamiento se habría visto influenciado por la escala de los datos en el conjunto de datos de prueba.
Mediante el uso de canalizaciones de ML, podemos evitar esta fuga de datos porque las canalizaciones garantizan que la preparación de datos, como la estandarización, se limite a cada pliegue de nuestro procedimiento de validación cruzada.
Ejemplo
El siguiente es un ejemplo en Python que demuestra la preparación de datos y el flujo de trabajo de evaluación del modelo. Para este propósito, estamos utilizando el conjunto de datos de diabetes india Pima de Sklearn. Primero, crearemos una canalización que estandarizó los datos. Luego, se creará un modelo de análisis discriminativo lineal y, por último, la tubería se evaluará mediante una validación cruzada de 10 veces.
Primero, importe los paquetes necesarios de la siguiente manera:
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
Ahora, debemos cargar el conjunto de datos de diabetes Pima como se hizo en ejemplos anteriores:
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
A continuación, crearemos una canalización con la ayuda del siguiente código:
estimators = []
estimators.append(('standardize', StandardScaler()))
estimators.append(('lda', LinearDiscriminantAnalysis()))
model = Pipeline(estimators)
Por último, vamos a evaluar esta canalización y generar su precisión de la siguiente manera:
kfold = KFold(n_splits=20, random_state=7)
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())
Salida
0.7790148448043184
El resultado anterior es el resumen de la precisión de la configuración en el conjunto de datos.
Modelado de canalización de ML y extracción de características
La fuga de datos también puede ocurrir en el paso de extracción de características del modelo ML. Es por eso que los procedimientos de extracción de características también deben restringirse para detener la fuga de datos en nuestro conjunto de datos de entrenamiento. Como en el caso de la preparación de datos, mediante el uso de canalizaciones de ML, también podemos evitar esta fuga de datos. FeatureUnion, una herramienta proporcionada por las canalizaciones de ML se puede utilizar para este propósito.
Ejemplo
El siguiente es un ejemplo en Python que demuestra la extracción de características y el flujo de trabajo de evaluación de modelos. Para este propósito, estamos utilizando el conjunto de datos de diabetes india Pima de Sklearn.
Primero, se extraerán 3 características con PCA (Análisis de componentes principales). Luego, se extraerán 6 características con análisis estadístico. Después de la extracción de características, el resultado de la selección de múltiples características y los procedimientos de extracción se combinarán utilizando
Herramienta FeatureUnion. Por último, se creará un modelo de regresión logística y la tubería se evaluará mediante una validación cruzada de 10 veces.
Primero, importe los paquetes necesarios de la siguiente manera:
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import Pipeline
from sklearn.pipeline import FeatureUnion
from sklearn.linear_model import LogisticRegression
from sklearn.decomposition import PCA
from sklearn.feature_selection import SelectKBest
Ahora, debemos cargar el conjunto de datos de diabetes Pima como se hizo en ejemplos anteriores:
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
A continuación, la unión de características se creará de la siguiente manera:
features = []
features.append(('pca', PCA(n_components=3)))
features.append(('select_best', SelectKBest(k=6)))
feature_union = FeatureUnion(features)
A continuación, la canalización se creará con la ayuda de las siguientes líneas de script:
estimators = []
estimators.append(('feature_union', feature_union))
estimators.append(('logistic', LogisticRegression()))
model = Pipeline(estimators)
Por último, vamos a evaluar esta canalización y generar su precisión de la siguiente manera:
kfold = KFold(n_splits=20, random_state=7)
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())
Salida
0.7789811066126855
El resultado anterior es el resumen de la precisión de la configuración en el conjunto de datos.