Skip to content

Commit b65e4c8

Browse files
gatagatlarsmans
authored andcommitted
FIX MinMaxScaler behavior on 1D inputs.
1 parent e90e4c9 commit b65e4c8

2 files changed

Lines changed: 36 additions & 1 deletion

File tree

sklearn/preprocessing/data.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,10 @@ def fit(self, X, y=None):
204204
data_min = np.min(X, axis=0)
205205
data_range = np.max(X, axis=0) - data_min
206206
# Do not scale constant features
207-
data_range[data_range == 0.0] = 1.0
207+
if isinstance(data_range, np.ndarray):
208+
data_range[data_range == 0.0] = 1.0
209+
elif data_range == 0.:
210+
data_range = 1.
208211
self.scale_ = (feature_range[1] - feature_range[0]) / data_range
209212
self.min_ = feature_range[0] - data_min * self.scale_
210213
self.data_range = data_range

sklearn/preprocessing/tests/test_data.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
from sklearn.utils.testing import assert_array_almost_equal
88
from sklearn.utils.testing import assert_array_equal
99
from sklearn.utils.testing import assert_equal
10+
from sklearn.utils.testing import assert_greater_equal
11+
from sklearn.utils.testing import assert_less_equal
1012
from sklearn.utils.testing import assert_raises
1113
from sklearn.utils.testing import assert_true
1214
from sklearn.utils.testing import assert_false
@@ -214,6 +216,36 @@ def test_min_max_scaler_zero_variance_features():
214216
assert_array_almost_equal(X_trans, X_expected_1_2)
215217

216218

219+
def test_min_max_scaler_1d():
220+
"""Test scaling of dataset along single axis"""
221+
rng = np.random.RandomState(0)
222+
X = rng.randn(5)
223+
X_orig_copy = X.copy()
224+
225+
scaler = MinMaxScaler()
226+
X_scaled = scaler.fit(X).transform(X)
227+
assert_array_almost_equal(X_scaled.min(axis=0), 0.0)
228+
assert_array_almost_equal(X_scaled.max(axis=0), 1.0)
229+
230+
# check inverse transform
231+
X_scaled_back = scaler.inverse_transform(X_scaled)
232+
assert_array_almost_equal(X_scaled_back, X_orig_copy)
233+
234+
# Test with 1D list
235+
X = [0., 1., 2, 0.4, 1.]
236+
scaler = MinMaxScaler()
237+
X_scaled = scaler.fit(X).transform(X)
238+
assert_array_almost_equal(X_scaled.min(axis=0), 0.0)
239+
assert_array_almost_equal(X_scaled.max(axis=0), 1.0)
240+
241+
# Constant feature.
242+
X = np.zeros(5)
243+
scaler = MinMaxScaler()
244+
X_scaled = scaler.fit(X).transform(X)
245+
assert_greater_equal(X_scaled.min(), 0.)
246+
assert_less_equal(X_scaled.max(), 1.)
247+
248+
217249
def test_scaler_without_centering():
218250
rng = np.random.RandomState(42)
219251
X = rng.randn(4, 5)

0 commit comments

Comments
 (0)