++++Data Science
May 2026×Notebook lesson
Notebook converted from Jupyter for blog publishing.
01-Grid-Search
Driptanil DattaSoftware Developer
Grid Search
We can search through a variety of combinations of hyperparameters with a grid search. While many linear models are quite simple and even come with their own specialized versions that do a search for you, this method of a grid search will can be applied to any model from sklearn, and we will need to use it later on for more complex models, such as Support Vector Machines.
Imports
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as snsSTDERR
C:\ProgramData\Anaconda3\lib\site-packages\statsmodels\tools\_testing.py:19: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.
import pandas.util.testing as tmData
df = pd.read_csv("../DATA/Advertising.csv")df.head()HTML
MORE
TV
radio
newspaper
sales
0Formatting Data
## CREATE X and y
X = df.drop('sales',axis=1)
y = df['sales']
# TRAIN TEST SPLIT
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=101)
# SCALE DATA
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)Model
from sklearn.linear_model import ElasticNethelp(ElasticNet)STDOUT
MORE
Help on class ElasticNet in module sklearn.linear_model.coordinate_descent:
class ElasticNet(sklearn.linear_model.base.LinearModel, sklearn.base.RegressorMixin, sklearn.base.MultiOutputMixin)
| ElasticNet(alpha=1.0, l1_ratio=0.5, fit_intercept=True, normalize=False, precompute=False, max_iter=1000, copy_X=True, tol=0.0001, warm_start=False, positive=False, random_state=None, selection='cyclic')
| base_elastic_model = ElasticNet()Grid Search
A search consists of:
- an estimator (regressor or classifier such as sklearn.svm.SVC());
- a parameter space;
- a method for searching or sampling candidates;
- a cross-validation scheme
- a score function.
param_grid = {'alpha':[0.1,1,5,10,50,100],
'l1_ratio':[.1, .5, .7, .9, .95, .99, 1]}from sklearn.model_selection import GridSearchCV# verbose number a personal preference
grid_model = GridSearchCV(estimator=base_elastic_model,
param_grid=param_grid,
scoring='neg_mean_squared_error',
cv=5,
verbose=2)grid_model.fit(X_train,y_train)STDOUT
MORE
Fitting 5 folds for each of 42 candidates, totalling 210 fits
[CV] alpha=0.1, l1_ratio=0.1 .........................................
[CV] .......................... alpha=0.1, l1_ratio=0.1, total= 0.0s
[CV] alpha=0.1, l1_ratio=0.1 .........................................
[CV] .......................... alpha=0.1, l1_ratio=0.1, total= 0.0sSTDERR
[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.
[Parallel(n_jobs=1)]: Done 1 out of 1 | elapsed: 0.0s remaining: 0.0sSTDOUT
MORE
[CV] alpha=100, l1_ratio=0.1 .........................................
[CV] .......................... alpha=100, l1_ratio=0.1, total= 0.0s
[CV] alpha=100, l1_ratio=0.5 .........................................
[CV] .......................... alpha=100, l1_ratio=0.5, total= 0.0sSTDERR
[Parallel(n_jobs=1)]: Done 210 out of 210 | elapsed: 0.1s finishedRESULT
MORE
GridSearchCV(cv=5, error_score='raise-deprecating',
estimator=ElasticNet(alpha=1.0, copy_X=True, fit_intercept=True,
l1_ratio=0.5, max_iter=1000, normalize=False,
positive=False, precompute=False,
random_state=None, selection='cyclic',grid_model.best_estimator_RESULT
ElasticNet(alpha=0.1, copy_X=True, fit_intercept=True, l1_ratio=1,
max_iter=1000, normalize=False, positive=False, precompute=False,
random_state=None, selection='cyclic', tol=0.0001, warm_start=False)grid_model.best_params_RESULT
{'alpha': 0.1, 'l1_ratio': 1}# pd.DataFrame(grid_model.cv_results_)Using Best Model From Grid Search
y_pred = grid_model.predict(X_test)from sklearn.metrics import mean_squared_errormean_squared_error(y_test,y_pred)RESULT
2.3873426420874737