tslearn.shapelets.LearningShapelets

class tslearn.shapelets.LearningShapelets(n_shapelets_per_size=None, max_iter=10000, batch_size=256, verbose=0, optimizer='sgd', weight_regularizer=0.0, shapelet_length=0.15, total_lengths=3, max_size=None, scale=False, random_state=None)[source]

学习时间序列Shapelets模型。

学习时间序列形状特征最初在[1]中提出。

从一个(可能是多维的)时间序列 \(x\) 和一组形状片段 \(\{s_i\}_i\) 中,Shapelet 变换的第 \(i\) 个坐标计算如下:

\[ST(x, s_i) = \min_t \sum_{\delta_t} \left\|x(t+\delta_t) - s_i(\delta_t)\right\|_2^2\]

Shapelet模型由这个变换之上的逻辑回归层组成。Shapelet系数以及逻辑回归权重通过L2惩罚的交叉熵损失的梯度下降进行优化。

Parameters:
n_shapelets_per_size: dict (default: None)

字典给出,对于每个shapelet大小(键),要训练的此类shapelets的数量(值)。如果为None,则使用grabocka_params_to_shapelet_size_dict,并且用于计算的大小是在拟合时传递的最短时间序列的大小。

max_iter: int (default: 10,000)

训练轮数。

在版本0.3中更改:max_iter的默认值设置为10,000,而不是100

batch_size: int (default: 256)

要使用的批量大小。

verbose: {0, 1, 2} (default: 0)

keras 详细级别。

optimizer: str or keras.optimizers.Optimizer (default: “sgd”)

keras 用于训练的优化器。

weight_regularizer: float or None (default: 0.)

用于训练分类(softmax)层的L2正则化器的强度。如果为0,则不执行正则化。

shapelet_length: float (default: 0.15)

shapelets的长度,表示为时间序列长度的一部分。 仅在n_shapelets_per_size为None时使用。

total_lengths: int (default: 3)

不同shapelet长度的数量。将提取长度为i * shapelet_length的shapelets,其中i在[1, total_lengths]范围内。仅在n_shapelets_per_size为None时使用。

max_size: int or None (default: None)

输入模型的时间序列的最大大小。如果为None,则设置为训练时间序列的大小(时间戳数量)。

scale: bool (default: False)

是否应该对每个时间序列的每个特征进行缩放,使其位于[0-1]区间内。 在0.4版本中,此参数的默认值设置为False以确保向后兼容性,但在未来版本中可能会更改。

random_stateint or None, optional (default: None)

用于打乱数据时使用的伪随机数生成器的种子。如果是整数,random_state 是随机数生成器使用的种子;如果是 None,随机数生成器是 np.random 使用的 RandomState 实例。

Attributes:
shapelets_numpy.ndarray of objects, each object being a time series

时间序列形状的集合。

shapelets_as_time_series_numpy.ndarray of shape (n_shapelets, sz_shp, d) where sz_shp is the maximum of all shapelet sizes

一组时间序列形状,格式化为tslearn时间序列数据集。

transformer_model_keras.Model

将时间序列的输入数据集转换为与学习到的形状之间的距离。

locator_model_keras.Model

返回在输入数据集的每个时间序列中可以找到每个shapelet的索引(最小距离)。

model_keras.Model

直接预测输入时间序列的类别概率。

history_dict

在拟合过程中记录的损失和指标的字典。

参考文献

[1]
  1. Grabocka 等人。学习时间序列形状。SIGKDD 2014。

示例

>>> from tslearn.generators import random_walk_blobs
>>> X, y = random_walk_blobs(n_ts_per_blob=10, sz=16, d=2, n_blobs=3)
>>> clf = LearningShapelets(n_shapelets_per_size={4: 5}, 
...                         max_iter=1, verbose=0)
>>> clf.fit(X, y).shapelets_.shape
(5,)
>>> clf.shapelets_[0].shape
(4, 2)
>>> clf.predict(X).shape
(30,)
>>> clf.predict_proba(X).shape
(30, 3)
>>> clf.transform(X).shape
(30, 5)

方法

fit(X, y)

学习时间序列的形状。

fit_transform(X[, y])

拟合数据,然后转换它。

from_hdf5(path)

从HDF5文件加载模型。

from_json(path)

从JSON文件加载模型。

from_pickle(path)

从pickle文件加载模型。

get_metadata_routing()

获取此对象的元数据路由。

get_params([deep])

获取此估计器的参数。

get_weights([layer_name])

返回模型权重(如果提供了layer_name,则返回给定层的权重)。

locate(X)

计算一组时间序列的形状匹配位置。

predict(X)

预测给定时间序列的类别。

predict_proba(X)

预测给定时间序列集的类别概率。

score(X, y[, sample_weight])

返回给定测试数据和标签的平均准确率。

set_output(*[, transform])

设置输出容器。

set_params(**params)

设置此估计器的参数。

set_score_request(*[, sample_weight])

传递给score方法的请求元数据。

set_weights(weights[, layer_name])

设置模型权重(如果提供了layer_name,则设置给定层的权重)。

to_hdf5(path)

将模型保存到HDF5文件。

to_json(path)

将模型保存为JSON文件。

to_pickle(path)

将模型保存到pickle文件中。

transform(X)

为一组时间序列生成形状变换。

fit(X, y)[source]

学习时间序列形状。

Parameters:
Xarray-like of shape=(n_ts, sz, d)

时间序列数据集。

yarray-like of shape=(n_ts, )

时间序列标签。

fit_transform(X, y=None, **fit_params)[source]

拟合数据,然后进行转换。

将转换器拟合到Xy,并使用可选参数fit_params,返回X的转换版本。

Parameters:
Xarray-like of shape (n_samples, n_features)

输入样本。

yarray-like of shape (n_samples,) or (n_samples, n_outputs), default=None

目标值(无监督转换时为None)。

**fit_paramsdict

额外的拟合参数。

Returns:
X_newndarray array of shape (n_samples, n_features_new)

转换后的数组。

classmethod from_hdf5(path)[source]

从HDF5文件加载模型。 需要 h5py http://docs.h5py.org/

Parameters:
pathstr

文件的完整路径。

Returns:
Model instance
classmethod from_json(path)[source]

从JSON文件加载模型。

Parameters:
pathstr

文件的完整路径。

Returns:
Model instance
classmethod from_pickle(path)[source]

从pickle文件加载模型。

Parameters:
pathstr

文件的完整路径。

Returns:
Model instance
get_metadata_routing()[source]

获取此对象的元数据路由。

请查看用户指南了解路由机制的工作原理。

Returns:
routingMetadataRequest

一个封装了路由信息的MetadataRequest

get_params(deep=True)[source]

获取此估计器的参数。

Parameters:
deepbool, default=True

如果为True,将返回此估计器及其包含的子对象(如果也是估计器)的参数。

Returns:
paramsdict

参数名称映射到它们的值。

get_weights(layer_name=None)[source]

返回模型权重(如果提供了layer_name,则返回给定层的权重)。

Parameters:
layer_name: str or None (default: None)

应返回权重的层的名称。 如果为None,则返回所有模型的权重。 具有权重的可用层名称有:

  • “shapelets_i_j” 其中 i 是 shapelet 的 id 的整数,j 是维度的整数

  • “classification” 用于最终的分类层

Returns:
list

模型(或层)权重列表

示例

>>> from tslearn.generators import random_walk_blobs
>>> X, y = random_walk_blobs(n_ts_per_blob=100, sz=256, d=1, n_blobs=3)
>>> clf = LearningShapelets(n_shapelets_per_size={10: 5}, max_iter=0,
...                     verbose=0)
>>> clf.fit(X, y).get_weights("classification")[0].shape
(5, 3)
>>> clf.get_weights("shapelets_0_0")[0].shape
(5, 10)
>>> len(clf.get_weights("shapelets_0_0"))
1
locate(X)[source]

计算一组时间序列的形状匹配位置。

Parameters:
Xarray-like of shape=(n_ts, sz, d)

时间序列数据集。

Returns:
array of shape=(n_ts, n_shapelets)

提供的时间序列中形状匹配的位置。

示例

>>> from tslearn.generators import random_walk_blobs
>>> X = numpy.zeros((3, 10, 1))
>>> X[0, 4:7, 0] = numpy.array([1, 2, 3])
>>> y = [1, 0, 0]
>>> # Data is all zeros except a motif 1-2-3 in the first time series
>>> clf = LearningShapelets(n_shapelets_per_size={3: 1}, max_iter=0,
...                     verbose=0)
>>> _ = clf.fit(X, y)
>>> weights_shapelet = [
...     numpy.array([[1, 2, 3]])
... ]
>>> clf.set_weights(weights_shapelet, layer_name="shapelets_0_0")
>>> clf.locate(X)
array([[4],
       [0],
       [0]])
predict(X)[source]

预测给定时间序列集合的类别。

Parameters:
Xarray-like of shape=(n_ts, sz, d)

时间序列数据集。

Returns:
array of shape=(n_ts, ) or (n_ts, n_classes), depending on the shape
of the label vector provided at training time.

每个样本所属的集群索引或类概率矩阵,取决于训练时提供的内容。

predict_proba(X)[source]

预测给定时间序列集合的类别概率。

Parameters:
Xarray-like of shape=(n_ts, sz, d)

时间序列数据集。

Returns:
array of shape=(n_ts, n_classes),

类别概率矩阵。

score(X, y, sample_weight=None)[source]

返回给定测试数据和标签的平均准确率。

在多标签分类中,这是子集准确率,这是一个严格的指标,因为您要求每个样本的每个标签集都被正确预测。

Parameters:
Xarray-like of shape (n_samples, n_features)

测试样本。

yarray-like of shape (n_samples,) or (n_samples, n_outputs)

X的真实标签。

sample_weightarray-like of shape (n_samples,), default=None

样本权重。

Returns:
scorefloat

self.predict(X) 相对于 y 的平均准确率。

set_output(*, transform=None)[source]

设置输出容器。

请参阅Introducing the set_output API 以了解如何使用API的示例。

Parameters:
transform{“default”, “pandas”}, default=None

配置transformfit_transform的输出。

  • “default”: 转换器的默认输出格式

  • “pandas”: DataFrame 输出

  • None: 转换配置未更改

Returns:
selfestimator instance

估计器实例。

set_params(**params)[source]

设置此估计器的参数。

该方法适用于简单的估计器以及嵌套对象(如Pipeline)。后者具有形式为<component>__<parameter>的参数,以便可以更新嵌套对象的每个组件。

Parameters:
**paramsdict

估计器参数。

Returns:
selfestimator instance

估计器实例。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') 学习形状[source]

传递给score方法的请求元数据。

请注意,此方法仅在 enable_metadata_routing=True 时相关(参见 sklearn.set_config())。 请参阅 用户指南 了解路由机制的工作原理。

每个参数的选项是:

  • True: 请求元数据,并在提供时传递给 score。如果未提供元数据,则忽略该请求。

  • False: 不请求元数据,元估计器不会将其传递给 score

  • None: 不请求元数据,如果用户提供了元数据,元估计器将引发错误。

  • str: 元数据应该使用这个给定的别名传递给元估计器,而不是原始名称。

默认值(sklearn.utils.metadata_routing.UNCHANGED)保留现有的请求。这允许您更改某些参数的请求,而不更改其他参数。

版本1.3中的新功能。

注意

此方法仅在此估计器用作元估计器的子估计器时相关,例如在Pipeline内部使用。否则它没有效果。

Parameters:
sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

元数据路由用于score中的sample_weight参数。

Returns:
selfobject

更新后的对象。

set_weights(weights, layer_name=None)[source]

设置模型权重(如果提供了layer_name,则设置给定层的权重)。

Parameters:
weights: list of ndarrays

为模型/目标层设置的权重

layer_name: str or None (default: None)

应设置权重的层的名称。 如果为None,则设置所有模型的权重。 具有权重的可用层名称如下:

  • “shapelets_i_j” 其中 i 是 shapelet 的 id 的整数,j 是维度的整数

  • “classification” 用于最终的分类层

示例

>>> from tslearn.generators import random_walk_blobs
>>> X, y = random_walk_blobs(n_ts_per_blob=10, sz=16, d=1, n_blobs=3)
>>> clf = LearningShapelets(n_shapelets_per_size={3: 1}, max_iter=0,
...                     verbose=0)
>>> _ = clf.fit(X, y)
>>> weights_shapelet = [
...     numpy.array([[1, 2, 3]])
... ]
>>> clf.set_weights(weights_shapelet, layer_name="shapelets_0_0")
>>> clf.shapelets_as_time_series_
array([[[1.],
        [2.],
        [3.]]])
property shapelets_as_time_series_[source]

将时间序列形状集格式化为tslearn时间序列数据集。

示例

>>> from tslearn.generators import random_walk_blobs
>>> X, y = random_walk_blobs(n_ts_per_blob=10, sz=256, d=1, n_blobs=3)
>>> model = LearningShapelets(n_shapelets_per_size={3: 2, 4: 1},
...                       max_iter=1)
>>> _ = model.fit(X, y)
>>> model.shapelets_as_time_series_.shape
(3, 4, 1)
to_hdf5(path)[source]

将模型保存到HDF5文件。 需要 h5py http://docs.h5py.org/

Parameters:
pathstr

完整文件路径。文件必须不存在。

Raises:
FileExistsError

如果已经存在具有相同路径的文件。

to_json(path)[source]

将模型保存到JSON文件。

Parameters:
pathstr

完整文件路径。

to_pickle(path)[source]

将模型保存到pickle文件中。

Parameters:
pathstr

完整文件路径。

transform(X)[source]

为一组时间序列生成shapelet转换。

Parameters:
Xarray-like of shape=(n_ts, sz, d)

时间序列数据集。

Returns:
array of shape=(n_ts, n_shapelets)

提供的时间序列的Shapelet变换。

使用 tslearn.shapelets.LearningShapelets 的示例

学习形状片段

Learning Shapelets

将发现的shapelets与时间序列对齐

Aligning discovered shapelets with timeseries

学习形状:二维距离空间中的决策边界

Learning Shapelets: decision boundaries in 2D distance space