1
1
import warnings
2
2
3
3
from ..base import BaseEstimator , TransformerMixin
4
- from ..utils .validation import _allclose_dense_sparse
4
+ from ..utils .validation import _allclose_dense_sparse , check_array
5
5
6
6
7
7
def _identity (X ):
@@ -71,6 +71,20 @@ class FunctionTransformer(TransformerMixin, BaseEstimator):
71
71
72
72
.. versionadded:: 0.18
73
73
74
+ Attributes
75
+ ----------
76
+ n_features_in_ : int
77
+ Number of features seen during :term:`fit`. Defined only when
78
+ `validate=True`.
79
+
80
+ .. versionadded:: 0.24
81
+
82
+ feature_names_in_ : ndarray of shape (`n_features_in_`,)
83
+ Names of features seen during :term:`fit`. Defined only when `validate=True`
84
+ and `X` has feature names that are all strings.
85
+
86
+ .. versionadded:: 1.0
87
+
74
88
See Also
75
89
--------
76
90
MaxAbsScaler : Scale each feature by its maximum absolute value.
@@ -110,9 +124,9 @@ def __init__(
110
124
self .kw_args = kw_args
111
125
self .inv_kw_args = inv_kw_args
112
126
113
- def _check_input (self , X ):
127
+ def _check_input (self , X , * , reset ):
114
128
if self .validate :
115
- return self ._validate_data (X , accept_sparse = self .accept_sparse )
129
+ return self ._validate_data (X , accept_sparse = self .accept_sparse , reset = reset )
116
130
return X
117
131
118
132
def _check_inverse_transform (self , X ):
@@ -146,7 +160,7 @@ def fit(self, X, y=None):
146
160
self : object
147
161
FunctionTransformer class instance.
148
162
"""
149
- X = self ._check_input (X )
163
+ X = self ._check_input (X , reset = True )
150
164
if self .check_inverse and not (self .func is None or self .inverse_func is None ):
151
165
self ._check_inverse_transform (X )
152
166
return self
@@ -164,6 +178,7 @@ def transform(self, X):
164
178
X_out : array-like, shape (n_samples, n_features)
165
179
Transformed input.
166
180
"""
181
+ X = self ._check_input (X , reset = False )
167
182
return self ._transform (X , func = self .func , kw_args = self .kw_args )
168
183
169
184
def inverse_transform (self , X ):
@@ -179,11 +194,11 @@ def inverse_transform(self, X):
179
194
X_out : array-like, shape (n_samples, n_features)
180
195
Transformed input.
181
196
"""
197
+ if self .validate :
198
+ X = check_array (X , accept_sparse = self .accept_sparse )
182
199
return self ._transform (X , func = self .inverse_func , kw_args = self .inv_kw_args )
183
200
184
201
def _transform (self , X , func = None , kw_args = None ):
185
- X = self ._check_input (X )
186
-
187
202
if func is None :
188
203
func = _identity
189
204
0 commit comments