Skip to content

[WIP] Fit method at preprocessing file #280 #285

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 33 additions & 17 deletions tslearn/preprocessing.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
"""
The :mod:`tslearn.preprocessing` module gathers time series scalers and
The :mod:`tslearn.preprocessing` module gathers time series scalers and
resamplers.
"""

Expand Down Expand Up @@ -137,21 +137,32 @@ def __init__(self, value_range=(0., 1.)):
self.value_range = value_range

def fit(self, X, y=None, **kwargs):
"""A dummy method such that it complies to the sklearn requirements.
Since this method is completely stateless, it just returns itself.
"""Calculate (min-max) of each timeseries.

Parameters
----------
X
Ignored
X : array-like of shape (n_ts, sz, d)
Time series dataset to be rescaled.

Returns
-------
self
"""

value_range = self.value_range

if value_range[0] >= value_range[1]:
raise ValueError("Minimum of desired range must be smaller"
" than maximum. Got %s." % str(value_range))

X = check_array(X, allow_nd=True, force_all_finite=False)
X = to_time_series_dataset(X)
self._X_fit_dims = X.shape
X_ = to_time_series_dataset(X)
self._X_fit_dims = X_.shape

X_ = check_dims(X_, X_fit_dims=self._X_fit_dims, extend=False)
self.min_t = numpy.nanmin(X_, axis=1)[:, numpy.newaxis, :]
self.max_t = numpy.nanmax(X_, axis=1)[:, numpy.newaxis, :]

return self

def fit_transform(self, X, y=None, **kwargs):
Expand Down Expand Up @@ -184,19 +195,24 @@ def transform(self, X, y=None, **kwargs):
numpy.ndarray
Rescaled time series dataset.
"""
value_range = self.value_range

if value_range[0] >= value_range[1]:
raise ValueError("Minimum of desired range must be smaller"
" than maximum. Got %s." % str(value_range))

check_is_fitted(self, '_X_fit_dims')

X = check_array(X, allow_nd=True, force_all_finite=False)
X_ = to_time_series_dataset(X)
X_ = check_dims(X_, X_fit_dims=self._X_fit_dims, extend=False)
min_t = numpy.nanmin(X_, axis=1)[:, numpy.newaxis, :]
max_t = numpy.nanmax(X_, axis=1)[:, numpy.newaxis, :]
range_t = max_t - min_t

_X_transf_fit_dims = X_.shape
if self._X_fit_dims[0] != _X_transf_fit_dims[0]:
raise ValueError("Number of fitted timeseries must be equal "
"to number of transformed timeseries. "
"Expected {} timeseries"
"got {} timeseries.".format(
str(self._X_fit_dims[0]),
str(_X_transf_fit_dims[0])
))
value_range = self.value_range
range_t = self.max_t - self.min_t
min_t = self.min_t

nomin = (X_ - min_t) * (value_range[1] - value_range[0])
X_ = nomin / range_t + value_range[0]
return X_
Expand Down