Get startedGet started for free

Custom function transformers in pipelines

At some point, you were told that the sensors might be performing poorly for obese individuals. Previously you had dealt with that using weights, but now you are thinking that this information might also be useful for feature engineering, so you decide to replace the recorded weight of an individual with an indicator of whether they are obese. You want to do this using pipelines. You have numpy available as np, RandomForestClassifier(), FunctionTransformer(), and GridSearchCV().

This exercise is part of the course

Designing Machine Learning Workflows in Python

View Course

Exercise instructions

  • Define a custom feature extractor. This is a function that will output a modified copy of its input.
  • Replace each value of the first column with the indicator of whether that value is above a threshold given by a multiple of the column mean.
  • Convert the feature extractor above to a transformer and place it in a pipeline together with a random forest classifier.
  • Use grid search CV to try values 1, 2 and 3 for the multiplication constant multiplier in your feature extractor.

Hands-on interactive exercise

Have a go at this exercise by completing this sample code.

# 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)
Edit and Run Code