DtwDist
DtwDist
- class DtwDist(weighted: bool = False, derivative: bool = False, window: int | None = None, itakura_max_slope: float | None = None, bounding_matrix: ndarray = None, g: float = 0.0)[source]
Interface to sktime native dtw distances, with derivative or weighting.
Interface to simple dynamic time warping (DTW) distance, and the following weighted/derivative versions:
WDTW - weighted dynamic time warping - ``weighted=True, derivative=False`
DDTW - derivative dynamic time warping -
weighted=False, derivative=TrueWDDTW - weighted derivative dynamic time warping -
weighted=True, derivative=True
sktimeinterface to the efficientnumbaimplementations provided bypairwise_distanceinsktime.dists_kernels._numba_distances.This estimator provides performant implementation of time warping distances for: * time series of equal length * the Euclidean pairwise distance
For unequal length time series, use
sktime.dists_kernels.DistFromAlignerwith a time warping aligner such assktime.aligners.AlignerDTW. To use arbitrary pairwise distances, usesktime.aligners.AlignerDTWfromDist. (for derivative DTW, pipeline an alignment distance withDifferencer)Note that the more flexible options above may be less performant.
The algorithms are also available as alignment estimators
sktime.alignment.dtw_numba, producing alignments aka alignment paths.DTW was originally proposed in [1], DTW computes the distance between two time series by considering their alignments during the calculation. This is done by measuring the pointwise distance (normally using Euclidean) between all elements of the two time series and then using dynamic programming to find the warping path that minimises the total pointwise distance between realigned series.
DDTW is an adaptation of DTW originally proposed in [2]. DDTW attempts to improve on dtw by better account for the ‘shape’ of the time series. This is done by considering y axis data points as higher level features of ‘shape’. To do this the first derivative of the sequence is taken, and then using this derived sequence a dtw computation is done.
WDTW was first proposed in [3], it adds a multiplicative weight penalty based on the warping distance. This means that time series with lower phase difference have a smaller weight imposed (i.e less penalty imposed) and time series with larger phase difference have a larger weight imposed (i.e. larger penalty imposed).
WDDTW was first proposed in [3] as an extension of DDTW. By adding a weight to the derivative it means the alignment isn’t only considering the shape of the time series, but also the phase.
- Parameters:
- weightedbool, optional, default=False
whether a weighted version of the distance is computed False = unmodified distance, i.e., dtw distance or derivative dtw distance True = weighted distance, i.e., weighted dtw or derivative weighted dtw
- derivativebool, optional, default=False
whether the distance or the derivative distance is computed False = unmodified distance, i.e., dtw distance or weighted dtw distance True = derivative distance, i.e., derivative dtw distance or derivative wdtw
- window: int, defaults = None
Sakoe-Chiba window radius one of three mutually exclusive ways to specify bounding matrix if
None, does not use Sakoe-Chiba window ifint, uses Sakoe-Chiba lower bounding window with radiuswindow. Ifwindowis passed,itakura_max_slopewill be ignored.- itakura_max_slope: float, between 0. and 1., default = None
Itakura parallelogram slope one of three mutually exclusive ways to specify bounding matrix if
None, does not use Itakura parallelogram lower bounding iffloat, uses Itakura parallelogram lower bounding, with slope gradientitakura_max_slope- bounding_matrix: optional, 2D np.ndarray, default=None
one of three mutually exclusive ways to specify bounding matrix must be of shape
(len(X), len(X2)),lenmeaning number time points, whereX,X2are the two time series passed in transform Custom bounding matrix to use. If provided, thenwindowanditakura_max_slopeare ignored. The matrix should be structured so that indexes considered in bound should be the value 0. and indexes outside the bounding matrix should be infinity.- g: float, optional, default = 0. Used only if ``weighted=True``.
Constant that controls the curvature (slope) of the function; that is,
gcontrols the level of penalisation for the points with larger phase difference.
- Attributes:
is_fittedWhether
fithas been called.
References
[1]H. Sakoe, S. Chiba, “Dynamic programming algorithm optimization for spoken word recognition,” IEEE Transactions on Acoustics, Speech and Signal Processing, vol. 26(1), pp. 43–49, 1978.
[2]Keogh, Eamonn & Pazzani, Michael. (2002). Derivative Dynamic Time Warping. First SIAM International Conference on Data Mining. 1. 10.1137/1.9781611972719.1.
warping for time series classification, Pattern Recognition, Volume 44, Issue 9, 2011, Pages 2231-2240, ISSN 0031-3203, https://doi.org/10.1016/j.patcog.2010.09.022.
Examples
>>> from sktime.datasets import load_unit_test >>> from sktime.dists_kernels.dtw import DtwDist >>> >>> X, _ = load_unit_test(return_type="pd-multiindex") >>> d = DtwDist(weighted=True, derivative=True) >>> distmat = d.transform(X)
distances are also callable, this does the same:
>>> distmat = d(X)
Methods
__call__(X[, X2])Compute distance/kernel matrix, call shorthand.
check_is_fitted([method_name])Check if the estimator has been fitted.
clone()Obtain a clone of the object with same hyper-parameters and config.
clone_tags(estimator[, tag_names])Clone tags from another object as dynamic override.
create_test_instance([parameter_set])Construct an instance of the class, using first test parameter set.
create_test_instances_and_names([parameter_set])Create list of all test instances and a list of names for them.
fit([X, X2])Fit method for interface compatibility (no logic inside).
get_class_tag(tag_name[, tag_value_default])Get class tag value from class, with tag level inheritance from parents.
get_class_tags()Get class tags from class, with tag level inheritance from parent classes.
get_config()Get config flags for self.
get_fitted_params([deep])Get fitted parameters.
get_param_defaults()Get object's parameter defaults.
get_param_names([sort])Get object's parameter names.
get_params([deep])Get a dict of parameters values for this object.
get_tag(tag_name[, tag_value_default, ...])Get tag value from instance, with tag level inheritance and overrides.
get_tags()Get tags from instance, with tag level inheritance and overrides.
get_test_params([parameter_set])Return testing parameter settings for the estimator.
is_composite()Check if the object is composed of other BaseObjects.
load_from_path(serial)Load object from file location.
load_from_serial(serial)Load object from serialized memory container.
reset()Reset the object to a clean post-init state.
save([path, serialization_format])Save serialized self to bytes-like object or to (.zip) file.
set_config(**config_dict)Set config flags to given values.
set_params(**params)Set the parameters of this object.
set_random_state([random_state, deep, ...])Set random_state pseudo-random seed parameters for self.
set_tags(**tag_dict)Set instance level tag overrides to given values.
transform(X[, X2])Compute distance/kernel matrix.
transform_diag(X)Compute diagonal of distance/kernel matrix.

