We use hyperparameter tuning to find the best settings for a machine learning model so it works well on new data.
Hyperparameter tuning (GridSearchCV) in ML Python
from sklearn.model_selection import GridSearchCV model = SomeModel() param_grid = {'param1': [values], 'param2': [values]} grid = GridSearchCV(model, param_grid, cv=number_of_folds) grid.fit(X_train, y_train) best_model = grid.best_estimator_ best_params = grid.best_params_
GridSearchCV tries all combinations of parameters you give it.
cv means how many parts to split your data for testing during tuning.
from sklearn.model_selection import GridSearchCV from sklearn.tree import DecisionTreeClassifier model = DecisionTreeClassifier() param_grid = {'max_depth': [3, 5, 7], 'min_samples_split': [2, 4]} grid = GridSearchCV(model, param_grid, cv=3) grid.fit(X_train, y_train)
from sklearn.model_selection import GridSearchCV from sklearn.svm import SVC model = SVC() param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf']} grid = GridSearchCV(model, param_grid, cv=5) grid.fit(X_train, y_train)
This program loads the iris flower data, splits it, and uses GridSearchCV to find the best decision tree settings. Then it tests the best model and prints accuracy.
from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score # Load data X, y = load_iris(return_X_y=True) # Split data X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # Define model and parameters dt = DecisionTreeClassifier(random_state=42) param_grid = {'max_depth': [2, 3, 4], 'min_samples_split': [2, 3]} # Setup GridSearchCV grid_search = GridSearchCV(dt, param_grid, cv=3) # Train with grid search grid_search.fit(X_train, y_train) # Best model and parameters best_model = grid_search.best_estimator_ best_params = grid_search.best_params_ # Predict and evaluate predictions = best_model.predict(X_test) accuracy = accuracy_score(y_test, predictions) print(f"Best Parameters: {best_params}") print(f"Test Accuracy: {accuracy:.3f}")
GridSearchCV can take time if you try many parameters or large data.
Use random_state to get the same results every time.
You can check grid_search.cv_results_ to see scores for all tries.
GridSearchCV helps find the best model settings automatically.
It tries all combinations you give and tests them with cross-validation.
Use it to improve your model's accuracy without guessing.
Practice
What is the main purpose of using GridSearchCV in machine learning?
Solution
Step 1: Understand what GridSearchCV does
GridSearchCV tries different hyperparameter combinations to find the best settings for a model.Step 2: Compare options with GridSearchCV's purpose
Only To find the best combination of hyperparameters automatically describes this automatic search for best hyperparameters.Final Answer:
To find the best combination of hyperparameters automatically -> Option BQuick Check:
GridSearchCV = best hyperparameters [OK]
- Confusing GridSearchCV with data splitting
- Thinking it visualizes predictions
- Assuming it reduces dataset size
Which of the following is the correct way to import GridSearchCV from sklearn?
Solution
Step 1: Recall the correct sklearn module for GridSearchCV
GridSearchCV is in themodel_selectionmodule of sklearn.Step 2: Match the correct import syntax
from sklearn.model_selection import GridSearchCV uses the correct module and syntax for import.Final Answer:
from sklearn.model_selection import GridSearchCV -> Option CQuick Check:
Correct import = from sklearn.model_selection import GridSearchCV [OK]
- Using deprecated sklearn.grid_search module
- Wrong import syntax like 'import GridSearchCV from sklearn'
- Assuming a nonexistent sklearn.tuning module
What will be the output of the following code snippet?
from sklearn.datasets import load_iris
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV
iris = load_iris()
X, y = iris.data, iris.target
param_grid = {'kernel': ['linear', 'rbf'], 'C': [1, 10]}
svc = SVC()
grid = GridSearchCV(svc, param_grid, cv=3)
grid.fit(X, y)
print(grid.best_params_)Solution
Step 1: Understand GridSearchCV output
GridSearchCV'sbest_params_attribute returns the best hyperparameters found after testing all combinations.Step 2: Analyze the code snippet
The code runs GridSearchCV with kernel and C values, then prints the best combination as a dictionary.Final Answer:
A dictionary with best kernel and C values found by cross-validation -> Option AQuick Check:
grid.best_params_ = best hyperparameters dict [OK]
- Expecting fixed values instead of dynamic best params
- Thinking cv parameter is missing (it is present)
- Confusing output with training scores
Identify the error in this GridSearchCV usage:
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV
param_grid = {'C': [0.1, 1, 10]}
svc = SVC()
grid = GridSearchCV(svc, param_grid)
grid.fit(X_train, y_train)
print(grid.best_score_)Assuming X_train and y_train are defined.
Solution
Step 1: Check default behavior of GridSearchCV
Ifcvis not given, GridSearchCV uses default 5-fold cross-validation.Step 2: Verify param_grid and SVC usage
Parameter grid keys like 'C' are correct; kernel is optional with default 'rbf'.Final Answer:
No error; code runs correctly and prints best score -> Option DQuick Check:
Default cv=5, param_grid keys correct [OK]
- Assuming cv parameter is mandatory
- Thinking param_grid keys need double underscores
- Believing kernel must be in param_grid
You want to tune a RandomForestClassifier using GridSearchCV. You want to try n_estimators values 50, 100 and max_depth values 5, 10. Which code snippet correctly sets up the grid search?
Solution
Step 1: Define param_grid correctly for RandomForestClassifier
Use keys as hyperparameter names with list of values: {'n_estimators': [50, 100], 'max_depth': [5, 10]}.Step 2: Setup GridSearchCV with valid cv parameter
The correct snippet initializes GridSearchCV with the proper param_grid using lists and a valid integer cv value (e.g., cv=4). Distractors include invalid cv values like strings, incorrect parameter key prefixes, and non-list value syntax like 'or'.Final Answer:
param_grid = {'n_estimators': [50, 100], 'max_depth': [5, 10]} rf = RandomForestClassifier() grid = GridSearchCV(rf, param_grid, cv=4) -> Option AQuick Check:
Correct param_grid and valid cv = param_grid = {'n_estimators': [50, 100], 'max_depth': [5, 10]} rf = RandomForestClassifier() grid = GridSearchCV(rf, param_grid, cv=4) [OK]
- Adding model name prefix to param_grid keys
- Using 'or' instead of list for values
- Setting invalid cv values like strings
Ready to prove it?
Pass the test and this pattern moves unknown
