Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def fit(self, X):
self._X_fit = to_time_series_dataset(X)
self.weights = _set_weights(self.weights, self._X_fit.shape[0])
if self.barycenter_ is None:
if check_equal_size(self._X_fit):
self.barycenter_ = EuclideanBarycenter.fit(self,
self._X_fit)
else:
resampled_X = TimeSeriesResampler(
sz=self._X_fit.shape[1]).fit_transform(self._X_fit)
self.barycenter_ = EuclideanBarycenter.fit(self,
resampled_X)
if self.max_iter > 0:
# The function works with vectors so we need to vectorize
# barycenter_.
res = minimize(self._func, self.barycenter_.ravel(),
method=self.method, jac=True, tol=self.tol,
options=dict(maxiter=self.max_iter, disp=False))
return res.x.reshape(self.barycenter_.shape)
else:
... random_state=0) # doctest: +ELLIPSIS
2.0...
See Also
--------
gak : Compute Global Alignment kernel
cdist_gak : Compute cross-similarity matrix using Global Alignment kernel
References
----------
.. [1] M. Cuturi, "Fast global alignment kernels," ICML 2011.
"""
random_state = check_random_state(random_state)
dataset = to_time_series_dataset(dataset)
n_ts, sz, d = dataset.shape
if not check_equal_size(dataset):
sz = numpy.min([ts_size(ts) for ts in dataset])
if n_ts * sz < n_samples:
replace = True
else:
replace = False
sample_indices = random_state.choice(n_ts * sz,
size=n_samples,
replace=replace)
dists = pdist(dataset[:, :sz, :].reshape((-1, d))[sample_indices],
metric="euclidean")
return numpy.median(dists) * numpy.sqrt(sz)
datasets using a normalized version of Soft-DTW
References
----------
.. [1] M. Cuturi, M. Blondel "Soft-DTW: a Differentiable Loss Function for
Time-Series," ICML 2017.
"""
dataset1 = to_time_series_dataset(dataset1, dtype=numpy.float64)
self_similarity = False
if dataset2 is None:
dataset2 = dataset1
self_similarity = True
else:
dataset2 = to_time_series_dataset(dataset2, dtype=numpy.float64)
dists = numpy.empty((dataset1.shape[0], dataset2.shape[0]))
equal_size_ds1 = check_equal_size(dataset1)
equal_size_ds2 = check_equal_size(dataset2)
for i, ts1 in enumerate(dataset1):
if equal_size_ds1:
ts1_short = ts1
else:
ts1_short = ts1[:ts_size(ts1)]
for j, ts2 in enumerate(dataset2):
if equal_size_ds2:
ts2_short = ts2
else:
ts2_short = ts2[:ts_size(ts2)]
if self_similarity and j < i:
dists[i, j] = dists[j, i]
else:
dists[i, j] = soft_dtw(ts1_short, ts2_short, gamma=gamma)
References
----------
.. [1] M. Cuturi, M. Blondel "Soft-DTW: a Differentiable Loss Function for
Time-Series," ICML 2017.
"""
dataset1 = to_time_series_dataset(dataset1, dtype=numpy.float64)
self_similarity = False
if dataset2 is None:
dataset2 = dataset1
self_similarity = True
else:
dataset2 = to_time_series_dataset(dataset2, dtype=numpy.float64)
dists = numpy.empty((dataset1.shape[0], dataset2.shape[0]))
equal_size_ds1 = check_equal_size(dataset1)
equal_size_ds2 = check_equal_size(dataset2)
for i, ts1 in enumerate(dataset1):
if equal_size_ds1:
ts1_short = ts1
else:
ts1_short = ts1[:ts_size(ts1)]
for j, ts2 in enumerate(dataset2):
if equal_size_ds2:
ts2_short = ts2
else:
ts2_short = ts2[:ts_size(ts2)]
if self_similarity and j < i:
dists[i, j] = dists[j, i]
else:
dists[i, j] = soft_dtw(ts1_short, ts2_short, gamma=gamma)
return dists
def transform(self, X, **kwargs):
"""Fit to data, then transform it.
Parameters
----------
X : array-like
Time series dataset to be resampled.
Returns
-------
numpy.ndarray
Resampled time series dataset.
"""
X_ = to_time_series_dataset(X)
n_ts, sz, d = X_.shape
equal_size = check_equal_size(X_)
X_out = numpy.empty((n_ts, self.sz_, d))
for i in range(X_.shape[0]):
xnew = numpy.linspace(0, 1, self.sz_)
if not equal_size:
sz = ts_size(X_[i])
for di in range(d):
f = interp1d(numpy.linspace(0, 1, sz), X_[i, :sz, di],
kind="slinear")
X_out[i, :, di] = f(xnew)
return X_out
array([[1.25161574],
[2.03821705],
[3.5101956 ],
[4.36140605]])
>>> time_series = [[1, 2, 3, 4], [1, 2, 3, 4, 5]]
>>> softdtw_barycenter(time_series, max_iter=5)
array([[1.21349933],
[1.8932251 ],
[2.67573269],
[3.51057026],
[4.33645802]])
"""
X_ = to_time_series_dataset(X)
weights = _set_weights(weights, X_.shape[0])
if init is None:
if check_equal_size(X_):
barycenter = euclidean_barycenter(X_, weights)
else:
resampled_X = TimeSeriesResampler(sz=X_.shape[1]).fit_transform(X_)
barycenter = euclidean_barycenter(resampled_X, weights)
else:
barycenter = init
if max_iter > 0:
X_ = numpy.array([to_time_series(d, remove_nans=True) for d in X_])
def f(Z):
return _softdtw_func(Z, X_, weights, barycenter, gamma)
# The function works with vectors so we need to vectorize barycenter.
res = minimize(f, barycenter.ravel(), method=method, jac=True, tol=tol,
options=dict(maxiter=max_iter, disp=False))