8000 [MRG] API kwonly args in impute, inspection, kernel_ridge (#16926) · scikit-learn/scikit-learn@dc0cc6e · GitHub
[go: up one dir, main page]

Skip to content

Commit dc0cc6e

Browse files
authored
[MRG] API kwonly args in impute, inspection, kernel_ridge (#16926)
, and linear_model
1 parent 4d9478f commit dc0cc6e

24 files changed

+151
-84
lines changed

sklearn/impute/_base.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from ..utils.sparsefuncs import _get_median
1515
from ..utils.validation import check_is_fitted
1616
from ..utils.validation import FLOAT_DTYPES
17+
from ..utils.validation import _deprecate_positional_args
1718
from ..utils._mask import _get_mask
1819
from ..utils import is_scalar_nan
1920

@@ -67,7 +68,7 @@ class _BaseImputer(TransformerMixin, BaseEstimator):
6768
It adds automatically support for `add_indicator`.
6869
"""
6970

70-
def __init__(self, missing_values=np.nan, add_indicator=False):
71+
def __init__(self, *, missing_values=np.nan, add_indicator=False):
7172
self.missing_values = missing_values
7273
self.add_indicator = add_indicator
7374

@@ -205,7 +206,8 @@ class SimpleImputer(_BaseImputer):
205206
upon :meth:`transform` if strategy is not "constant".
206207
207208
"""
208-
def __init__(self, missing_values=np.nan, strategy="mean",
209+
@_deprecate_positional_args
210+
def __init__(self, *, missing_values=np.nan, strategy="mean",
209211
fill_value=None, verbose=0, copy=True, add_indicator=False):
210212
super().__init__(
211213
missing_values=missing_values,
@@ -525,8 +527,8 @@ class MissingIndicator(TransformerMixin, BaseEstimator):
525527
[False, False]])
526528
527529
"""
528-
529-
def __init__(self, missing_values=np.nan, features="missing-only",
530+
@_deprecate_positional_args
531+
def __init__(self, *, missing_values=np.nan, features="missing-only",
530532
sparse="auto", error_on_new=True):
531533
self.missing_values = missing_values
532534
self.features = features

sklearn/impute/_iterative.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,9 +206,8 @@ class IterativeImputer(_BaseImputer):
206206
Journal of the Royal Statistical Society 22(2): 302-306.
207207
<https://www.jstor.org/stable/2984099>`_
208208
"""
209-
210209
def __init__(self,
211-
estimator=None,
210+
estimator=None, *,
212211
missing_values=np.nan,
213212
sample_posterior=False,
214213
max_iter=10,

sklearn/impute/_knn.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from ..utils import is_scalar_nan
1515
from ..utils._mask import _get_mask
1616
from ..utils.validation import check_is_fitted
17+
from ..utils.validation import _deprecate_positional_args
1718

1819

1920
class KNNImputer(_BaseImputer):
@@ -94,8 +95,8 @@ class KNNImputer(_BaseImputer):
9495
[5.5, 6. , 5. ],
9596
[8. , 8. , 7. ]])
9697
"""
97-
98-
def __init__(self, missing_values=np.nan, n_neighbors=5,
98+
@_deprecate_positional_args
99+
def __init__(self, *, missing_values=np.nan, n_neighbors=5,
99100
weights="uniform", metric="nan_euclidean", copy=True,
100101
add_indicator=False):
101102
super().__init__(

sklearn/impute/tests/test_impute.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,14 @@ def _check_statistics(X, X_true,
4848
assert_ae = assert_array_almost_equal
4949

5050
# Normal matrix
51-
imputer = SimpleImputer(missing_values, strategy=strategy)
51+
imputer = SimpleImputer(missing_values=missing_values, strategy=strategy)
5252
X_trans = imputer.fit(X).transform(X.copy())
5353
assert_ae(imputer.statistics_, statistics,
5454
err_msg=err_msg.format(False))
5555
assert_ae(X_trans, X_true, err_msg=err_msg.format(False))
5656

5757
# Sparse matrix
58-
imputer = SimpleImputer(missing_values, strategy=strategy)
58+
imputer = SimpleImputer(missing_values=missing_values, strategy=strategy)
5959
imputer.fit(sparse.csc_matrix(X))
6060
X_trans = imputer.transform(sparse.csc_matrix(X.copy()))
6161

sklearn/inspection/_partial_dependence.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from ..utils import _determine_key_type
2121
from ..utils import _get_column_indices
2222
from ..utils.validation import check_is_fitted
23+
from ..utils.validation import _deprecate_positional_args
2324
from ..tree import DecisionTreeRegressor
2425
from ..ensemble import RandomForestRegressor
2526
from ..exceptions import NotFittedError
@@ -181,7 +182,8 @@ def _partial_dependence_brute(est, grid, features, X, response_method):
181182
return averaged_predictions
182183

183184

184-
def partial_dependence(estimator, X, features, response_method='auto',
185+
@_deprecate_positional_args
186+
def partial_dependence(estimator, X, features, *, response_method='auto',
185187
percentiles=(0.05, 0.95), grid_resolution=100,
186188
method='auto'):
187189
"""Partial dependence of ``features``.

sklearn/inspection/_permutation_importance.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from ..utils import Bunch
88
from ..utils import check_random_state
99
from ..utils import check_array
10+
from ..utils.validation import _deprecate_positional_args
1011

1112

1213
def _calculate_permutation_scores(estimator, X, y, col_idx, random_state,
@@ -37,7 +38,8 @@ def _calculate_permutation_scores(estimator, X, y, col_idx, random_state,
3738
return scores
3839

3940

40-
def permutation_importance(estimator, X, y, scoring=None, n_repeats=5,
41+
@_deprecate_positional_args
42+
def permutation_importance(estimator, X, y, *, scoring=None, n_repeats=5,
4143
n_jobs=None, random_state=None):
4244
"""Permutation importance for feature evaluation [BRE]_.
4345

sklearn/inspection/_plot/partial_dependence.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@
1313
from ...utils import check_array
1414
from ...utils import check_matplotlib_support # noqa
1515
from ...utils import _safe_indexing
16+
from ...utils.validation import _deprecate_positional_args
1617

1718

18-
def plot_partial_dependence(estimator, X, features, feature_names=None,
19+
@_deprecate_positional_args
20+
def plot_partial_dependence(estimator, X, features, *, feature_names=None,
1921
target=None, response_method='auto', n_cols=3,
2022
grid_resolution=100, percentiles=(0.05, 0.95),
2123
method='auto', n_jobs=None, verbose=0, fig=None,
@@ -322,8 +324,12 @@ def convert_feature(fx):
322324
fig.clear()
323325
ax = fig.gca()
324326

325-
display = PartialDependenceDisplay(pd_results, features, feature_names,
326-
target_idx, pdp_lim, deciles)
327+
display = PartialDependenceDisplay(pd_results=pd_results,
328+
features=features,
329+
feature_names=feature_names,
330+
target_idx=target_idx,
331+
pdp_lim=pdp_lim,
332+
deciles=deciles)
327333
return display.plot(ax=ax, n_cols=n_cols, line_kw=line_kw,
328334
contour_kw=contour_kw)
329335

@@ -406,7 +412,8 @@ class PartialDependenceDisplay:
406412
Figure containing partial dependence plots.
407413
408414
"""
409-
def __init__(self, pd_results, features, feature_names, target_idx,
415+
@_deprecate_positional_args
416+
def __init__(self, pd_results, *, features, feature_names, target_idx,
410417
pdp_lim, deciles):
411418
self.pd_results = pd_results
412419
self.features = features

sklearn/kernel_ridge.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from .metrics.pairwise import pairwise_kernels
1111
from .linear_model._ridge import _solve_cholesky_kernel
1212
from .utils.validation import check_is_fitted, _check_sample_weight
13+
from .utils.validation import _deprecate_positional_args
1314

1415

1516
class KernelRidge(MultiOutputMixin, RegressorMixin, BaseEstimator):
@@ -113,8 +114,9 @@ class KernelRidge(MultiOutputMixin, RegressorMixin, BaseEstimator):
113114
>>> clf.fit(X, y)
114115
KernelRidge(alpha=1.0)
115116
"""
116-
def __init__(self, alpha=1, kernel="linear", gamma=None, degree=3, coef0=1,
117-
kernel_params=None):
117+
@_deprecate_positional_args
118+
def __init__(self, alpha=1, *, kernel="linear", gamma=None, degree=3,
119+
coef0=1, kernel_params=None):
118120
self.alpha = alpha
119121
self.kernel = kernel
120122
self.gamma = gamma

sklearn/linear_model/_base.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
MultiOutputMixin)
2929
from ..utils import check_array
3030
from ..utils.validation import FLOAT_DTYPES
31+
from ..utils.validation import _deprecate_positional_args
3132
from ..utils import check_random_state
3233
from ..utils.extmath import safe_sparse_dot
3334
from ..utils.sparsefuncs import mean_variance_axis, inplace_column_scale
@@ -466,8 +467,8 @@ class LinearRegression(MultiOutputMixin, RegressorMixin, LinearModel):
466467
>>> reg.predict(np.array([[3, 5]]))
467468
array([16.])
468469
"""
469-
470-
def __init__(self, fit_intercept=True, normalize=False, copy_X=True,
470+
@_deprecate_positional_args
471+
def __init__(self, *, fit_intercept=True, normalize=False, copy_X=True,
471472
n_jobs=None):
472473
self.fit_intercept = fit_intercept
473474
self.normalize = normalize

sklearn/linear_model/_bayes.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from ..utils.extmath import fast_logdet
1515
from ..utils.fixes import pinvh
1616
from ..utils.validation import _check_sample_weight
17+
from ..utils.validation import _deprecate_positional_args
1718

1819

1920
###############################################################################
@@ -145,8 +146,8 @@ class BayesianRidge(RegressorMixin, LinearModel):
145146
M. E. Tipping, Sparse Bayesian Learning and the Relevance Vector Machine,
146147
Journal of Machine Learning Research, Vol. 1, 2001.
147148
"""
148-
149-
def __init__(self, n_iter=300, tol=1.e-3, alpha_1=1.e-6, alpha_2=1.e-6,
149+
@_deprecate_positional_args
150+
def __init__(self, *, n_iter=300, tol=1.e-3, alpha_1=1.e-6, alpha_2=1.e-6,
150151
lambda_1=1.e-6, lambda_2=1.e-6, alpha_init=None,
151152
lambda_init=None, compute_score=False, fit_intercept=True,
152153
normalize=False, copy_X=True, verbose=False):
@@ -489,8 +490,8 @@ class ARDRegression(RegressorMixin, LinearModel):
489490
which ``self.lambda_ < self.threshold_lambda`` are kept and the rest are
490491
discarded.
491492
"""
492-
493-
def __init__(self, n_iter=300, tol=1.e-3, alpha_1=1.e-6, alpha_2=1.e-6,
493+
@_deprecate_positional_args
494+
def __init__(self, *, n_iter=300, tol=1.e-3, alpha_1=1.e-6, alpha_2=1.e-6,
494495
lambda_1=1.e-6, lambda_2=1.e-6, compute_score=False,
495496
threshold_lambda=1.e+4, fit_intercept=True, normalize=False,
496497
copy_X=True, verbose=False):

sklearn/linear_model/_coordinate_descent.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from ..utils.fixes import _astype_copy_false, _joblib_parallel_args
2525
from ..utils.validation import check_is_fitted, _check_sample_weight
2626
from ..utils.validation import column_or_1d
27+
from ..utils.validation import _deprecate_positional_args
2728

2829
# mypy error: Module 'sklearn.linear_model' has no attribute '_cd_fast'
2930
from . import _cd_fast as cd_fast # type: ignore
@@ -690,7 +691,8 @@ class ElasticNet(MultiOutputMixin, RegressorMixin, LinearModel):
690691
"""
691692
path = staticmethod(enet_path)
692693

693-
def __init__(self, alpha=1.0, l1_ratio=0.5, fit_intercept=True,
694+
@_deprecate_positional_args
695+
def __init__(self, alpha=1.0, *, l1_ratio=0.5, fit_intercept=True,
694696
normalize=False, precompute=False, max_iter=1000,
695697
copy_X=True, tol=1e-4, warm_start=False, positive=False,
696698
random_state=None, selection='cyclic'):
@@ -1003,7 +1005,8 @@ class Lasso(ElasticNet):
10031005
"""
10041006
path = staticmethod(enet_path)
10051007

1006-
def __init__(self, alpha=1.0, fit_intercept=True, normalize=False,
1008+
@_deprecate_positional_args
1009+
def __init__(self, alpha=1.0, *, fit_intercept=True, normalize=False,
10071010
precompute=False, copy_X=True, max_iter=1000,
10081011
tol=1e-4, warm_start=False, positive=False,
10091012
random_state=None, selection='cyclic'):
@@ -1466,7 +1469,9 @@ class LassoCV(RegressorMixin, LinearModelCV):
14661469
"""
14671470
path = staticmethod(lasso_path)
14681471

1469-
def __init__(self, eps=1e-3, n_alphas=100, alphas=None, fit_intercept=True,
1472+
@_deprecate_positional_args
1473+
def __init__(self, *, eps=1e-3, n_alphas=100, alphas=None,
1474+
fit_intercept=True,
14701475
normalize=False, precompute='auto', max_iter=1000, tol=1e-4,
14711476
copy_X=True, cv=None, verbose=False, n_jobs=None,
14721477
positive=False, random_state=None, selection='cyclic'):
@@ -1662,7 +1667,8 @@ class ElasticNetCV(RegressorMixin, LinearModelCV):
16621667
"""
16631668
path = staticmethod(enet_path)
16641669

1665-
def __init__(self, l1_ratio=0.5, eps=1e-3, n_alphas=100, alphas=None,
1670+
@_deprecate_positional_args
1671+
def __init__(self, *, l1_ratio=0.5, eps=1e-3, n_alphas=100, alphas=None,
16661672
fit_intercept=True, normalize=False, precompute='auto',
16671673
max_iter=1000, tol=1e-4, cv=None, copy_X=True,
16681674
verbose=0, n_jobs=None, positive=False, random_state=None,
@@ -1801,7 +1807,8 @@ class MultiTaskElasticNet(Lasso):
18011807
To avoid unnecessary memory duplication the X argument of the fit method
18021808
should be directly passed as a Fortran-contiguous numpy array.
18031809
"""
1804-
def __init__(self, alpha=1.0, l1_ratio=0.5, fit_intercept=True,
1810+
@_deprecate_positional_args
1811+
def __init__(self, alpha=1.0, *, l1_ratio=0.5, fit_intercept=True,
18051812
normalize=False, copy_X=True, max_iter=1000, tol=1e-4,
18061813
warm_start=False, random_state=None, selection='cyclic'):
18071814
self.l1_ratio = l1_ratio
@@ -1983,7 +1990,8 @@ class MultiTaskLasso(MultiTaskElasticNet):
19831990
To avoid unnecessary memory duplication the X argument of the fit method
19841991
should be directly passed as a Fortran-contiguous numpy array.
19851992
"""
1986-
def __init__(self, alpha=1.0, fit_intercept=True, normalize=False,
1993+
@_deprecate_positional_args
1994+
def __init__(self, alpha=1.0, *, fit_intercept=True, normalize=False,
19871995
copy_X=True, max_iter=1000, tol=1e-4, warm_start=False,
19881996
random_state=None, selection='cyclic'):
19891997
self.alpha = alpha
@@ -2162,7 +2170,8 @@ class MultiTaskElasticNetCV(RegressorMixin, LinearModelCV):
21622170
"""
21632171
path = staticmethod(enet_path)
21642172

2165-
def __init__(self, l1_ratio=0.5, eps=1e-3, n_alphas=100, alphas=None,
2173+
@_deprecate_positional_args
2174+
def __init__(self, *, l1_ratio=0.5, eps=1e-3, n_alphas=100, alphas=None,
21662175
fit_intercept=True, normalize=False,
21672176
max_iter=1000, tol=1e-4, cv=None, copy_X=True,
21682177
verbose=0, n_jobs=None, random_state=None,
@@ -2333,7 +2342,9 @@ class MultiTaskLassoCV(RegressorMixin, LinearModelCV):
23332342
"""
23342343
path = staticmethod(lasso_path)
23352344

2336-
def __init__(self, eps=1e-3, n_alphas=100, alphas=None, fit_intercept=True,
2345+
@_deprecate_positional_args
2346+
def __init__(self, *, eps=1e-3, n_alphas=100, alphas=None,
2347+
fit_intercept=True,
23372348
normalize=False, max_iter=1000, tol=1e-4, copy_X=True,
23382349
cv=None, verbose=False, n_jobs=None, random_state=None,
23392350
selection='cyclic'):

sklearn/linear_model/_huber.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from ._base import LinearModel
1010
from ..utils import axis0_safe_slice
1111
from ..utils.validation import _check_sample_weight
12+
from ..utils.validation import _deprecate_positional_args
1213
from ..utils.extmath import safe_sparse_dot
1314
from ..utils.optimize import _check_optimize_result
1415

@@ -222,8 +223,8 @@ class HuberRegressor(LinearModel, RegressorMixin, BaseEstimator):
222223
.. [2] Art B. Owen (2006), A robust hybrid of lasso and ridge regression.
223224
https://statweb.stanford.edu/~owen/reports/hhu.pdf
224225
"""
225-
226-
def __init__(self, epsilon=1.35, max_iter=100, alpha=0.0001,
226+
@_deprecate_positional_args
227+
def __init__(self, *, epsilon=1.35, max_iter=100, alpha=0.0001,
227228
warm_start=False, fit_intercept=True, tol=1e-05):
228229
self.epsilon = epsilon
229230
self.max_iter = max_iter

0 commit comments

Comments
 (0)
0