Transformadores de funciones personalizadas en pipelines
En algún momento te dijeron que los sensores podrían funcionar peor con personas obesas. Antes lo habías abordado usando pesos, pero ahora piensas que esta información también puede ser útil para la ingeniería de características, así que decides sustituir el peso registrado de una persona por un indicador de si es obesa. Quieres hacerlo usando pipelines. Tienes numpy disponible como np, RandomForestClassifier(), FunctionTransformer(), y GridSearchCV().
Este ejercicio forma parte del curso
Diseño de flujos de trabajo de Machine Learning en Python
Instrucciones del ejercicio
- Define un extractor de características personalizado. Debe ser una función que devuelva una copia modificada de su entrada.
- Sustituye cada valor de la primera columna por un indicador de si ese valor supera un umbral dado por un múltiplo de la media de la columna.
- Convierte el extractor de características anterior en un transformador y colócalo en una pipeline junto con un clasificador de bosque aleatorio.
- Usa una búsqueda en cuadrícula con validación cruzada para probar los valores 1, 2 y 3 para la constante de multiplicación
multiplieren tu extractor de características.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
# Define a feature extractor to flag very large values
def more_than_average(X, multiplier=1.0):
Z = ____
Z[:,1] = ____ > multiplier*np.mean(Z[:,1])
return Z
# Convert your function so that it can be used in a pipeline
pipe = Pipeline([
('ft', ____(____)),
('clf', RandomForestClassifier(random_state=2))])
# Optimize the parameter multiplier using GridSearchCV
params = ____
grid_search = GridSearchCV(pipe, param_grid=params)