Aplicación en paralelo de transformadores usando FeatureUnion#

  • Permite unir una lista de transformadores en un nuevo transformador que combina sus salidas.

  • Durante el proceso de entrenamiento, cada uno de los transformadores es entrenado independientemente.

  • Los transformadores son aplicados en paralelo al set de datos, y las salidas son concatenadas lado a lado en una matriz.

  • La combinación de FeatureUnion y Pipeline permite crear modelos complejos.

[1]:
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
from sklearn.feature_selection import SelectKBest
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import FeatureUnion, Pipeline
from sklearn.svm import SVC

iris = load_iris()

X, y = iris.data, iris.target

#
# Crea un PCA que extrae unicamente dos (2) componentes
#
pca = PCA(n_components=2)

#
# Crea un transformador que selecciona únicamente la mejor característica
#
selection = SelectKBest(k=1)

#
# Crea la unión
#
combined_features = FeatureUnion(
    [
        ("pca", pca),
        ("univ_select", selection),
    ]
)

#
# Crea un nuevo vector de variables independientes que usando FeatureUnion
#
X_features = combined_features.fit(X, y).transform(X)
X_features.shape
[1]:
(150, 3)
[2]:
#
# Crea el modelo de regresión
#
svm = SVC(kernel="linear")

#
# Crea un pipeline
#
pipeline = Pipeline(
    [
        ("features", combined_features),
        ("svm", svm),
    ]
)

#
# Búsqueda de la mejor combinación de hiperparámetros usando GridSearchCV
#
param_grid = dict(
    features__pca__n_components=[1, 2, 3],
    features__univ_select__k=[1, 2],
    svm__C=[0.1, 1, 10],
)

gridSearchCV = GridSearchCV(
    pipeline,
    param_grid=param_grid,
)

gridSearchCV.fit(X, y)

gridSearchCV.best_params_
[2]:
{'features__pca__n_components': 3, 'features__univ_select__k': 1, 'svm__C': 10}