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]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_params([deep])获取此估计器的参数。
get_weights([layer_name])返回模型权重(如果提供了layer_name,则返回给定层的权重)。
locate(X)计算一组时间序列的形状匹配位置。
predict(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]¶
拟合数据,然后进行转换。
将转换器拟合到X和y,并使用可选参数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文件加载模型。 需要
h5pyhttp://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
配置transform和fit_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文件。 需要
h5pyhttp://docs.h5py.org/- Parameters:
- pathstr
完整文件路径。文件必须不存在。
- Raises:
- FileExistsError
如果已经存在具有相同路径的文件。