Canalizaciones: Python y scikit-learn

El flujo de trabajo de cualquier proyecto de aprendizaje automático incluye todos los pasos necesarios para construirlo. Un proyecto de ML adecuado consta básicamente de cuatro partes principales que se detallan a continuación: 
 

  • Recopilación de datos: 
    el proceso de recopilación de datos depende del proyecto, pueden ser datos en tiempo real o datos recopilados de varias fuentes, como un archivo, una base de datos, una encuesta y otras fuentes.
  • Preprocesamiento de datos: por 
    lo general, dentro de los datos recopilados, hay muchos datos faltantes, valores extremadamente grandes, datos de texto desorganizados o datos ruidosos y, por lo tanto, no se pueden usar directamente dentro del modelo, por lo tanto, los datos requieren un preprocesamiento antes. ingresando al modelo.
  • Entrenamiento y prueba del modelo: una vez que los datos están listos para la aplicación del algoritmo, están listos para colocarse en el modelo de aprendizaje automático. Antes de eso, es importante tener una idea de qué modelo se va a utilizar, lo que puede dar un buen resultado de rendimiento. El conjunto de datos se divide en 3 secciones básicas, es decir, el conjunto de entrenamiento, el conjunto de validación y el conjunto de prueba. El objetivo principal es entrenar datos en el conjunto de entrenamiento, ajustar los parámetros usando el ‘conjunto de validación’ y luego probar el conjunto de prueba de rendimiento.
  • Evaluación: 
    La evaluación es una parte del proceso de desarrollo del modelo. Ayuda a encontrar el mejor modelo que representa los datos y qué tan bien funciona el modelo elegido en el futuro. Esto se hace después de realizar el entrenamiento del modelo en diferentes algoritmos. El lema principal es concluir la evaluación y elegir el modelo en consecuencia nuevamente.

Flujo de trabajo de ML en python 
La ejecución del flujo de trabajo es similar a una canalización, es decir, la salida de los primeros pasos se convierte en la entrada del segundo paso. Scikit-learn es una poderosa herramienta para el aprendizaje automático, proporciona una función para manejar dichas tuberías en el módulo sklearn.pipeline llamado Pipeline.  
Se necesitan 2 parámetros importantes, expresados ​​de la siguiente manera: 
 

  • La lista de pasos: 
    Lista de (nombre, transformación) tuplas (implementación de ajuste/transformación) que están enstringdas, en el orden en que están enstringdas, con el último objeto como estimador.
  • verboso:

Código: 
 

python3

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.tree import DecisionTreeClassifier
# import some data within sklearn for iris classification
iris = datasets.load_iris()
X = iris.data
y = iris.target
 
# Splitting data into train and testing part
# The 25 % of data is test size of the data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25)
# importing pipes for making the Pipe flow
from sklearn.pipeline import Pipeline
# pipe flow is :
# PCA(Dimension reduction to two) -> Scaling the data -> DecisionTreeClassification
pipe = Pipeline([('pca', PCA(n_components = 2)), ('std', StandardScaler()), ('decision_tree', DecisionTreeClassifier())], verbose = True)
 
# fitting the data in the pipe
pipe.fit(X_train, y_train)
 
# scoring data
from sklearn.metrics import accuracy_score
print(accuracy_score(y_test, pipe.predict(X_test)))

Producción: 
 

[Pipeline] ............... (step 1 of 3) Processing pca, total=   0.0s
[Pipeline] ............... (step 2 of 3) Processing std, total=   0.0s
[Pipeline] ..... (step 3 of 3) Processing Decision_tree, total=   0.0s
0.9736842105263158

Propiedad importante: 
 

  • pipe.named_steps: pipe.named_steps es un diccionario que almacena la clave de nombre vinculada a los objetos individuales en la tubería. Por ejemplo:
pipe.named_steps['decision_tree'] # returns a decision tree classifier object  

Hiperparámetros: 
hay diferentes conjuntos de hiperparámetros establecidos dentro de las clases que se pasan como canalización. Para verlos, se utiliza el método pipe.get_params(). Este método devuelve un diccionario de los parámetros y descripciones de cada clase en la canalización. 
Ejemplo: 
 

python3

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.tree import DecisionTreeClassifier
# import some data within sklearn for iris classification
iris = datasets.load_iris()
X = iris.data
y = iris.target
 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25)
 
from sklearn.pipeline import Pipeline
pipe = Pipeline([('pca', PCA(n_components = 2)), ('std', StandardScaler()), ('Decision_tree', DecisionTreeClassifier())], verbose = True)
 
pipe.fit(X_train, y_train)
 
# to see all the hyper parameters
pipe.get_params()

Producción: 
 

{'memory': None,
 'steps': [('pca',
   PCA(copy=True, iterated_power='auto', n_components=2, random_state=None,
       svd_solver='auto', tol=0.0, whiten=False)),
  ('std', StandardScaler(copy=True, with_mean=True, with_std=True)),
  ('Decision_tree',
   DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None, criterion='gini',
                          max_depth=None, max_features=None, max_leaf_nodes=None,
                          min_impurity_decrease=0.0, min_impurity_split=None,
                          min_samples_leaf=1, min_samples_split=2,
                          min_weight_fraction_leaf=0.0, presort='deprecated',
                          random_state=None, splitter='best'))],
 'verbose': True,
 'pca': PCA(copy=True, iterated_power='auto', n_components=2, random_state=None,
     svd_solver='auto', tol=0.0, whiten=False),
 'std': StandardScaler(copy=True, with_mean=True, with_std=True),
 'Decision_tree': DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None, criterion='gini',
                        max_depth=None, max_features=None, max_leaf_nodes=None,
                        min_impurity_decrease=0.0, min_impurity_split=None,
                        min_samples_leaf=1, min_samples_split=2,
                        min_weight_fraction_leaf=0.0, presort='deprecated',
                        random_state=None, splitter='best'),
 'pca__copy': True,
 'pca__iterated_power': 'auto',
 'pca__n_components': 2,
 'pca__random_state': None,
 'pca__svd_solver': 'auto',
 'pca__tol': 0.0,
 'pca__whiten': False,
 'std__copy': True,
 'std__with_mean': True,
 'std__with_std': True,
 'Decision_tree__ccp_alpha': 0.0,
 'Decision_tree__class_weight': None,
 'Decision_tree__criterion': 'gini',
 'Decision_tree__max_depth': None,
 'Decision_tree__max_features': None,
 'Decision_tree__max_leaf_nodes': None,
 'Decision_tree__min_impurity_decrease': 0.0,
 'Decision_tree__min_impurity_split': None,
 'Decision_tree__min_samples_leaf': 1,
 'Decision_tree__min_samples_split': 2,
 'Decision_tree__min_weight_fraction_leaf': 0.0,
 'Decision_tree__presort': 'deprecated',
 'Decision_tree__random_state': None,
 'Decision_tree__splitter': 'best'}

Publicación traducida automáticamente

Artículo escrito por piyush25pv y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *