Bird
Raised Fist0
ML Pythonml~20 mins

scikit-learn Pipeline in ML Python - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
Pipeline Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of a simple scikit-learn Pipeline
What is the output of the following code snippet when predicting with the pipeline?
ML Python
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
import numpy as np

pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('clf', LogisticRegression(random_state=0))
])

X_train = np.array([[1, 2], [2, 3], [3, 4], [4, 5]])
y_train = np.array([0, 0, 1, 1])

pipeline.fit(X_train, y_train)

X_test = np.array([[1.5, 2.5]])
prediction = pipeline.predict(X_test)
print(prediction)
A[0 1]
B[0]
C[1]
DRaises a ValueError
Attempts:
2 left
💡 Hint
Think about how the pipeline transforms data before prediction.
Model Choice
intermediate
2:00remaining
Choosing the correct pipeline step for text data
You want to build a pipeline to classify text documents. Which step should you include before the classifier to convert text into numbers?
AKMeans()
BCountVectorizer()
CPCA()
DStandardScaler()
Attempts:
2 left
💡 Hint
Text data needs to be converted into numeric features before classification.
Hyperparameter
advanced
2:00remaining
Setting hyperparameters in a pipeline
Given this pipeline: pipeline = Pipeline([ ('scaler', StandardScaler()), ('clf', LogisticRegression()) ]) How do you set the LogisticRegression parameter 'C' to 0.5 when using GridSearchCV?
A{'scaler__C': [0.5]}
B{'C': [0.5]}
C{'pipeline__C': [0.5]}
D{'clf__C': [0.5]}
Attempts:
2 left
💡 Hint
Use double underscores to access parameters of steps inside the pipeline.
Metrics
advanced
2:00remaining
Evaluating pipeline performance with cross-validation
You run cross_val_score on a pipeline with a classifier and get these scores: [0.8, 0.85, 0.78, 0.82, 0.81]. What is the mean accuracy?
A0.81
B0.82
C0.80
D0.83
Attempts:
2 left
💡 Hint
Add all scores and divide by the number of scores.
🔧 Debug
expert
2:00remaining
Identifying error in pipeline usage
What error does this code raise? from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression pipeline = Pipeline([ ('scaler', StandardScaler()), ('clf', LogisticRegression()) ]) X_test = [[1, 2], [3, 4]] prediction = pipeline.predict(X_test)
AValueError: This Pipeline instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.
BAttributeError: 'Pipeline' object has no attribute 'predict'
CTypeError: 'list' object is not callable
DNo error, outputs predictions
Attempts:
2 left
💡 Hint
You must train the pipeline before predicting.

Practice

(1/5)
1. What is the main purpose of using a Pipeline in scikit-learn?
easy
A. To manually split data into training and testing sets
B. To chain preprocessing steps and model training into one object
C. To visualize the data distribution
D. To increase the size of the dataset

Solution

  1. Step 1: Understand what a Pipeline does

    A Pipeline in scikit-learn combines multiple steps like data preprocessing and model training into a single object.
  2. Step 2: Identify the main purpose

    This chaining helps keep code clean and allows fitting and predicting in one call.
  3. Final Answer:

    To chain preprocessing steps and model training into one object -> Option B
  4. Quick Check:

    Pipeline = chaining steps [OK]
Hint: Pipeline chains steps for clean, safe model building [OK]
Common Mistakes:
  • Thinking Pipeline is for data visualization
  • Confusing Pipeline with data splitting
  • Assuming Pipeline increases data size
2. Which of the following is the correct way to create a scikit-learn Pipeline with a scaler and a logistic regression model?
easy
A. Pipeline(('scaler', StandardScaler()), ('model', LogisticRegression()))
B. Pipeline({'scaler': StandardScaler(), 'model': LogisticRegression()})
C. Pipeline([('scaler', StandardScaler()), ('model', LogisticRegression())])
D. Pipeline(['scaler': StandardScaler(), 'model': LogisticRegression()])

Solution

  1. Step 1: Recall Pipeline syntax

    A Pipeline requires a list of tuples, each tuple with a name and a transformer or estimator.
  2. Step 2: Check each option

    Pipeline([('scaler', StandardScaler()), ('model', LogisticRegression())]) uses a list of tuples correctly. Options B and D use dictionary syntax which is invalid. Pipeline(('scaler', StandardScaler()), ('model', LogisticRegression())) uses tuples but not inside a list.
  3. Final Answer:

    Pipeline([('scaler', StandardScaler()), ('model', LogisticRegression())]) -> Option C
  4. Quick Check:

    Pipeline needs list of (name, step) tuples [OK]
Hint: Use list of (name, step) tuples to build Pipeline [OK]
Common Mistakes:
  • Using dictionary instead of list of tuples
  • Passing tuples without list
  • Using incorrect brackets or colons
3. Given the code below, what will print(y_pred) output?
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
import numpy as np

X_train = np.array([[1, 2], [2, 3], [3, 4]])
y_train = np.array([0, 1, 0])
X_test = np.array([[1, 2], [4, 5]])

pipe = Pipeline([
    ('scaler', StandardScaler()),
    ('model', LogisticRegression())
])
pipe.fit(X_train, y_train)
y_pred = pipe.predict(X_test)
print(y_pred)
medium
A. [1 0]
B. [1 1]
C. [0 0]
D. [0 1]

Solution

  1. Step 1: Understand the pipeline steps

    The pipeline first scales the data, then fits LogisticRegression on training data.
  2. Step 2: Predict on test data

    After scaling, the model predicts labels for X_test. Given training labels, the model likely predicts 0 for [1,2] and 1 for [4,5].
  3. Final Answer:

    [0 1] -> Option D
  4. Quick Check:

    Scaled data + logistic regression predicts [0 1] [OK]
Hint: Pipeline applies all steps in order before predict [OK]
Common Mistakes:
  • Ignoring scaling effect on prediction
  • Assuming model predicts all zeros
  • Confusing training and test labels
4. What is wrong with the following Pipeline code?
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

pipe = Pipeline([
    ('scaler', StandardScaler),
    ('model', LogisticRegression())
])
pipe.fit(X_train, y_train)
medium
A. StandardScaler is not instantiated with parentheses
B. LogisticRegression should be imported from sklearn.svm
C. Pipeline requires a dictionary, not a list
D. fit method is missing required parameters

Solution

  1. Step 1: Check each pipeline step

    StandardScaler is passed without parentheses, so it is the class, not an instance.
  2. Step 2: Understand Pipeline requirements

    Pipeline steps must be instances, so StandardScaler() is needed. LogisticRegression() is correct.
  3. Final Answer:

    StandardScaler is not instantiated with parentheses -> Option A
  4. Quick Check:

    Instantiate transformers with () [OK]
Hint: Always instantiate transformers with parentheses in Pipeline [OK]
Common Mistakes:
  • Passing classes instead of instances
  • Wrong import for LogisticRegression
  • Using dict instead of list for Pipeline steps
5. You want to build a Pipeline that first fills missing values with the mean, then scales features, and finally trains a RandomForestClassifier. Which of the following Pipeline definitions is correct?
hard
A. Pipeline([('imputer', SimpleImputer(strategy='mean')), ('scaler', StandardScaler()), ('model', RandomForestClassifier())])
B. Pipeline([('scaler', StandardScaler()), ('imputer', SimpleImputer(strategy='mean')), ('model', RandomForestClassifier())])
C. Pipeline([('model', RandomForestClassifier()), ('imputer', SimpleImputer(strategy='mean')), ('scaler', StandardScaler())])
D. Pipeline([('imputer', SimpleImputer(strategy='mean')), ('model', RandomForestClassifier()), ('scaler', StandardScaler())])

Solution

  1. Step 1: Determine correct order of steps

    Missing values must be filled first, then scaling, then model training.
  2. Step 2: Check each option's order

    Pipeline([('imputer', SimpleImputer(strategy='mean')), ('scaler', StandardScaler()), ('model', RandomForestClassifier())]) follows the correct order: imputer, scaler, model. Others have wrong order.
  3. Final Answer:

    Pipeline([('imputer', SimpleImputer(strategy='mean')), ('scaler', StandardScaler()), ('model', RandomForestClassifier())]) -> Option A
  4. Quick Check:

    Impute -> scale -> model [OK]
Hint: Impute missing -> scale features -> train model [OK]
Common Mistakes:
  • Scaling before imputing missing values
  • Placing model before preprocessing steps
  • Incorrect step order causing errors