ElasticNet#
- classsklearn.linear_model.ElasticNet(alpha=1.0,*,l1_ratio=0.5,fit_intercept=True,precompute=False,max_iter=1000,copy_X=True,tol=0.0001,warm_start=False,positive=False,random_state=None,selection='cyclic')[source]#
Linear regression with combined L1 and L2 priors as regularizer.
Minimizes the objective function:
1/(2*n_samples)*||y-Xw||^2_2+alpha*l1_ratio*||w||_1+0.5*alpha*(1-l1_ratio)*||w||^2_2
If you are interested in controlling the L1 and L2 penaltyseparately, keep in mind that this is equivalent to:
a*||w||_1+0.5*b*||w||_2^2
where:
alpha=a+bandl1_ratio=a/(a+b)
The parameter l1_ratio corresponds to alpha in the glmnet R package whilealpha corresponds to the lambda parameter in glmnet. Specifically, l1_ratio= 1 is the lasso penalty. Currently, l1_ratio <= 0.01 is not reliable,unless you supply your own sequence of alpha.
Read more in theUser Guide.
- Parameters:
- alphafloat, default=1.0
Constant that multiplies the penalty terms. Defaults to 1.0.See the notes for the exact mathematical meaning of thisparameter.
alpha=0is equivalent to an ordinary least square,solved by theLinearRegressionobject. For numericalreasons, usingalpha=0with theLassoobject is not advised.Given this, you should use theLinearRegressionobject.- l1_ratiofloat, default=0.5
The ElasticNet mixing parameter, with
0<=l1_ratio<=1. Forl1_ratio=0the penalty is an L2 penalty.Forl1_ratio=1itis an L1 penalty. For0<l1_ratio<1, the penalty is acombination of L1 and L2.- fit_interceptbool, default=True
Whether the intercept should be estimated or not. If
False, thedata is assumed to be already centered.- precomputebool or array-like of shape (n_features, n_features), default=False
Whether to use a precomputed Gram matrix to speed upcalculations. The Gram matrix can also be passed as argument.For sparse input this option is always
Falseto preserve sparsity.Checkan example on how to use a precomputed Gram Matrix in ElasticNetfor details.- max_iterint, default=1000
The maximum number of iterations.
- copy_Xbool, default=True
If
True, X will be copied; else, it may be overwritten.- tolfloat, default=1e-4
The tolerance for the optimization: if the updates aresmaller than
tol, the optimization code checks thedual gap for optimality and continues until it is smallerthantol, see Notes below.- warm_startbool, default=False
When set to
True, reuse the solution of the previous call to fit asinitialization, otherwise, just erase the previous solution.Seethe Glossary.- positivebool, default=False
When set to
True, forces the coefficients to be positive.- random_stateint, RandomState instance, default=None
The seed of the pseudo random number generator that selects a randomfeature to update. Used when
selection== ‘random’.Pass an int for reproducible output across multiple function calls.SeeGlossary.- selection{‘cyclic’, ‘random’}, default=’cyclic’
If set to ‘random’, a random coefficient is updated every iterationrather than looping over features sequentially by default. This(setting to ‘random’) often leads to significantly faster convergenceespecially when tol is higher than 1e-4.
- Attributes:
- coef_ndarray of shape (n_features,) or (n_targets, n_features)
Parameter vector (w in the cost function formula).
sparse_coef_sparse matrix of shape (n_features,) or (n_targets, n_features)Sparse representation of the fitted
coef_.- intercept_float or ndarray of shape (n_targets,)
Independent term in decision function.
- n_iter_list of int
Number of iterations run by the coordinate descent solver to reachthe specified tolerance.
- dual_gap_float or ndarray of shape (n_targets,)
Given param alpha, the dual gaps at the end of the optimization,same shape as each observation of y.
- n_features_in_int
Number of features seen duringfit.
Added in version 0.24.
- feature_names_in_ndarray of shape (
n_features_in_,) Names of features seen duringfit. Defined only when
Xhas feature names that are all strings.Added in version 1.0.
See also
ElasticNetCVElastic net model with best model selection by cross-validation.
SGDRegressorImplements elastic net regression with incremental training.
SGDClassifierImplements logistic regression with elastic net penalty (
SGDClassifier(loss="log_loss",penalty="elasticnet")).
Notes
To avoid unnecessary memory duplication the X argument of the fit methodshould be directly passed as a Fortran-contiguous numpy array.
The precise stopping criteria based on
tolare the following: First, check thatthat maximum coordinate update, i.e.\(\max_j |w_j^{new} - w_j^{old}|\)is smaller thantoltimes the maximum absolute coefficient,\(\max_j |w_j|\).If so, then additionally check whether the dual gap is smaller thantoltimes\(||y||_2^2 / n_{ ext{samples}}\).Examples
>>>fromsklearn.linear_modelimportElasticNet>>>fromsklearn.datasetsimportmake_regression
>>>X,y=make_regression(n_features=2,random_state=0)>>>regr=ElasticNet(random_state=0)>>>regr.fit(X,y)ElasticNet(random_state=0)>>>print(regr.coef_)[18.83816048 64.55968825]>>>print(regr.intercept_)1.451>>>print(regr.predict([[0,0]]))[1.451]
L1-based models for Sparse Signalsshowcases ElasticNet alongside Lasso and ARD Regression for sparsesignal recovery in the presence of noise and feature correlation.
- fit(X,y,sample_weight=None,check_input=True)[source]#
Fit model with coordinate descent.
- Parameters:
- X{ndarray, sparse matrix, sparse array} of (n_samples, n_features)
Data.
Note that large sparse matrices and arrays requiring
int64indices are not accepted.- yndarray of shape (n_samples,) or (n_samples, n_targets)
Target. Will be cast to X’s dtype if necessary.
- sample_weightfloat or array-like of shape (n_samples,), default=None
Sample weights. Internally, the
sample_weightvector will berescaled to sum ton_samples.Added in version 0.23.
- check_inputbool, default=True
Allow to bypass several input checking.Don’t use this parameter unless you know what you do.
- Returns:
- selfobject
Fitted estimator.
Notes
Coordinate descent is an algorithm that considers each column ofdata at a time hence it will automatically convert the X inputas a Fortran-contiguous numpy array if necessary.
To avoid memory re-allocation it is advised to allocate theinitial data in memory directly using that format.
- get_metadata_routing()[source]#
Get metadata routing of this object.
Please checkUser Guide on how the routingmechanism works.
- Returns:
- routingMetadataRequest
A
MetadataRequestencapsulatingrouting information.
- get_params(deep=True)[source]#
Get parameters for this estimator.
- Parameters:
- deepbool, default=True
If True, will return the parameters for this estimator andcontained subobjects that are estimators.
- Returns:
- paramsdict
Parameter names mapped to their values.
- staticpath(X,y,*,l1_ratio=0.5,eps=0.001,n_alphas=100,alphas=None,precompute='auto',Xy=None,copy_X=True,coef_init=None,verbose=False,return_n_iter=False,positive=False,check_input=True,**params)[source]#
Compute elastic net path with coordinate descent.
The elastic net optimization function varies for mono and multi-outputs.
For mono-output tasks it is:
1/(2*n_samples)*||y-Xw||^2_2+alpha*l1_ratio*||w||_1+0.5*alpha*(1-l1_ratio)*||w||^2_2
For multi-output tasks it is:
(1/(2*n_samples))*||Y-XW||_Fro^2+alpha*l1_ratio*||W||_21+0.5*alpha*(1-l1_ratio)*||W||_Fro^2
Where:
||W||_21= \sum_i \sqrt{\sum_jw_{ij}^2}
i.e. the sum of norm of each row.
Read more in theUser Guide.
- Parameters:
- X{array-like, sparse matrix} of shape (n_samples, n_features)
Training data. Pass directly as Fortran-contiguous data to avoidunnecessary memory duplication. If
yis mono-output thenXcan be sparse.- y{array-like, sparse matrix} of shape (n_samples,) or (n_samples, n_targets)
Target values.
- l1_ratiofloat, default=0.5
Number between 0 and 1 passed to elastic net (scaling betweenl1 and l2 penalties).
l1_ratio=1corresponds to the Lasso.- epsfloat, default=1e-3
Length of the path.
eps=1e-3means thatalpha_min/alpha_max=1e-3.- n_alphasint, default=100
Number of alphas along the regularization path.
- alphasarray-like, default=None
List of alphas where to compute the models.If None alphas are set automatically.
- precompute‘auto’, bool or array-like of shape (n_features, n_features), default=’auto’
Whether to use a precomputed Gram matrix to speed upcalculations. If set to
'auto'let us decide. The Grammatrix can also be passed as argument.- Xyarray-like of shape (n_features,) or (n_features, n_targets), default=None
Xy = np.dot(X.T, y) that can be precomputed. It is usefulonly when the Gram matrix is precomputed.
- copy_Xbool, default=True
If
True, X will be copied; else, it may be overwritten.- coef_initarray-like of shape (n_features, ), default=None
The initial values of the coefficients.
- verbosebool or int, default=False
Amount of verbosity.
- return_n_iterbool, default=False
Whether to return the number of iterations or not.
- positivebool, default=False
If set to True, forces coefficients to be positive.(Only allowed when
y.ndim==1).- check_inputbool, default=True
If set to False, the input validation checks are skipped (including theGram matrix when provided). It is assumed that they are handledby the caller.
- **paramskwargs
Keyword arguments passed to the coordinate descent solver.
- Returns:
- alphasndarray of shape (n_alphas,)
The alphas along the path where models are computed.
- coefsndarray of shape (n_features, n_alphas) or (n_targets, n_features, n_alphas)
Coefficients along the path.
- dual_gapsndarray of shape (n_alphas,)
The dual gaps at the end of the optimization for each alpha.
- n_iterslist of int
The number of iterations taken by the coordinate descent optimizer toreach the specified tolerance for each alpha.(Is returned when
return_n_iteris set to True).
See also
MultiTaskElasticNetMulti-task ElasticNet model trained with L1/L2 mixed-norm as regularizer.
MultiTaskElasticNetCVMulti-task L1/L2 ElasticNet with built-in cross-validation.
ElasticNetLinear regression with combined L1 and L2 priors as regularizer.
ElasticNetCVElastic Net model with iterative fitting along a regularization path.
Notes
For an example, seeexamples/linear_model/plot_lasso_lasso_lars_elasticnet_path.py.
Examples
>>>fromsklearn.linear_modelimportenet_path>>>fromsklearn.datasetsimportmake_regression>>>X,y,true_coef=make_regression(...n_samples=100,n_features=5,n_informative=2,coef=True,random_state=0...)>>>true_coefarray([ 0. , 0. , 0. , 97.9, 45.7])>>>alphas,estimated_coef,_=enet_path(X,y,n_alphas=3)>>>alphas.shape(3,)>>>estimated_coef array([[ 0., 0.787, 0.568], [ 0., 1.120, 0.620], [-0., -2.129, -1.128], [ 0., 23.046, 88.939], [ 0., 10.637, 41.566]])
- predict(X)[source]#
Predict using the linear model.
- Parameters:
- Xarray-like or sparse matrix, shape (n_samples, n_features)
Samples.
- Returns:
- Carray, shape (n_samples,)
Returns predicted values.
- score(X,y,sample_weight=None)[source]#
Returncoefficient of determination on test data.
The coefficient of determination,\(R^2\), is defined as\((1 - \frac{u}{v})\), where\(u\) is the residualsum of squares
((y_true-y_pred)**2).sum()and\(v\)is the total sum of squares((y_true-y_true.mean())**2).sum().The best possible score is 1.0 and it can be negative (because themodel can be arbitrarily worse). A constant model that always predictsthe expected value ofy, disregarding the input features, would geta\(R^2\) score of 0.0.- Parameters:
- Xarray-like of shape (n_samples, n_features)
Test samples. For some estimators this may be a precomputedkernel matrix or a list of generic objects instead with shape
(n_samples,n_samples_fitted), wheren_samples_fittedis the number of samples used in the fitting for the estimator.- yarray-like of shape (n_samples,) or (n_samples, n_outputs)
True values for
X.- sample_weightarray-like of shape (n_samples,), default=None
Sample weights.
- Returns:
- scorefloat
\(R^2\) of
self.predict(X)w.r.t.y.
Notes
The\(R^2\) score used when calling
scoreon a regressor usesmultioutput='uniform_average'from version 0.23 to keep consistentwith default value ofr2_score.This influences thescoremethod of all the multioutputregressors (except forMultiOutputRegressor).
- set_fit_request(*,sample_weight:bool|None|str='$UNCHANGED$')→ElasticNet[source]#
Configure whether metadata should be requested to be passed to the
fitmethod.Note that this method is only relevant when this estimator is used as asub-estimator within ameta-estimator and metadata routing is enabledwith
enable_metadata_routing=True(seesklearn.set_config).Please check theUser Guide on how the routingmechanism works.The options for each parameter are:
True: metadata is requested, and passed tofitif provided. The request is ignored if metadata is not provided.False: metadata is not requested and the meta-estimator will not pass it tofit.None: metadata is not requested, and the meta-estimator will raise an error if the user provides it.str: metadata should be passed to the meta-estimator with this given alias instead of the original name.
The default (
sklearn.utils.metadata_routing.UNCHANGED) retains theexisting request. This allows you to change the request for someparameters and not others.Added in version 1.3.
- Parameters:
- sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
Metadata routing for
sample_weightparameter infit.
- Returns:
- selfobject
The updated object.
- set_params(**params)[source]#
Set the parameters of this estimator.
The method works on simple estimators as well as on nested objects(such as
Pipeline). The latter haveparameters of the form<component>__<parameter>so that it’spossible to update each component of a nested object.- Parameters:
- **paramsdict
Estimator parameters.
- Returns:
- selfestimator instance
Estimator instance.
- set_score_request(*,sample_weight:bool|None|str='$UNCHANGED$')→ElasticNet[source]#
Configure whether metadata should be requested to be passed to the
scoremethod.Note that this method is only relevant when this estimator is used as asub-estimator within ameta-estimator and metadata routing is enabledwith
enable_metadata_routing=True(seesklearn.set_config).Please check theUser Guide on how the routingmechanism works.The options for each parameter are:
True: metadata is requested, and passed toscoreif provided. The request is ignored if metadata is not provided.False: metadata is not requested and the meta-estimator will not pass it toscore.None: metadata is not requested, and the meta-estimator will raise an error if the user provides it.str: metadata should be passed to the meta-estimator with this given alias instead of the original name.
The default (
sklearn.utils.metadata_routing.UNCHANGED) retains theexisting request. This allows you to change the request for someparameters and not others.Added in version 1.3.
- Parameters:
- sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
Metadata routing for
sample_weightparameter inscore.
- Returns:
- selfobject
The updated object.
Gallery examples#
Fitting an Elastic Net with a precomputed Gram Matrix and Weighted Samples
Effect of model regularization on training and test error
