随机扩张形状变换

class RandomDilatedShapeletTransform(max_shapelets: int = 10000, shapelet_lengths: List[int] | ndarray | None = None, proba_normalization: float = 0.8, threshold_percentiles: List[float] | ndarray | None = None, alpha_similarity: float = 0.5, use_prime_dilations: bool = False, random_state: int | None = None, n_jobs: int = 1)[source]

随机扩张形状变换(RDST)如[1][2]所述。

概述:输入是长度为m的d通道的n个序列。第一步是从输入中提取候选形状。这是随机完成的,对于每个候选形状:

  • 长度是从shapelet_lengths参数中随机选择的

  • 扩张率是根据形状长度和时间序列长度的函数进行采样的

  • 归一化是根据作为参数给出的概率随机选择的

  • 起始值是从给定长度的输入时间序列中随机采样的

膨胀参数。 - 阈值是在形状与另一个时间序列之间的距离向量的分布的两个百分位数之间随机选择的。如果在拟合过程中给出了类别,则此时间序列来自同一类别。否则,将使用随机样本。如果每个类别只有一个样本,则将使用相同的样本。

然后,一旦shapelets集合被初始化,我们从每对shapelets和输入序列中提取shapelet特征。提取了三个特征:

  • min d(S,X): 形状S与X之间距离向量的最小值

一个时间序列X。 - argmin d(S,X): 最小值的位置。 - SO(d(S,X), threshold): 距离向量中低于shapelet的阈值参数的点数。

Parameters:
max_shapeletsint, default=10000

为最终转换保留的最大形状数。如果alpha相似度已丢弃整个数据集,则可以保留较少数量的形状。

shapelet_lengthsarray, default=None

shapelets 的可能长度集合。每个 shapelet 长度均从此集合中均匀抽取。如果为 None,则 shapelet 长度将等于 min(max(2,n_timepoints//2),11)。

proba_normalizationfloat, default=0.8

这个概率(介于0和1之间)表示每个shapelet被初始化的机会,使其将使用z归一化距离,从而引发尺度敏感性或不变性。值为1意味着所有shapelet都将使用z归一化距离。

threshold_percentilesarray, default=None

用于选择计算Shapelet Occurrence特征时使用的阈值的两个百分位数。如果为None,则将使用第5和第10百分位数(即[5,10])。

alpha_similarityfloat, default=0.5

alpha相似性剪枝的强度。值越高,当使用相同的扩张参数采样新候选时,允许与先前采样的shapelets共有的索引越少。如果整个搜索空间已被覆盖,可能会导致采样的shapelets数量低于max_shapelets。默认值为0.5,最大值为1。目前,超过该值的值没有效果。

use_prime_dilationsbool, default=False

如果为True,将限制shapelet dilation参数的值为质数。这可以大大加快长时间序列和/或短shapelet长度的算法速度,但可能会牺牲一些准确性。

n_jobsint, default=1

用于fittransform的线程数。

random_stateint or None, default=None

随机数生成的种子。

Attributes:
shapeletslist
The stored shapelets. Each item in the list is a tuple containing:
  • 形状值

  • 起始点值

  • 长度参数

  • 扩张参数

  • 阈值参数

  • 归一化参数

  • 均值参数

  • 标准差参数

  • 类值

max_shapelet_length_int

拟合训练数据的最大实际形状长度。

min_n_timepoints_int

训练数据中序列的最小长度。

注释

Capabilities

缺失值

多线程

逆变换

单变量

多变量

不等长

此实现使用了多元形状特征的所有特性,而不像原始实现那样为每个形状特征分配一个随机特征子集。参见`convst https://github.com/baraline/convst/blob/main/convst/transformers/rdst.py`_

参考文献

[1]

Antoine Guillaume 等人。 “随机扩张形状变换:时间序列形状的新方法”,模式识别与人工智能。 ICPRAI 2022。

[2]

Antoine Guillaume, “使用shapelets进行时间序列分类:应用于事件日志的预测性维护”, 博士论文, 奥尔良大学, 2023.

示例

>>> from aeon.transformations.collection.shapelet_based import (
...     RandomDilatedShapeletTransform
... )
>>> from aeon.datasets import load_unit_test
>>> X_train, y_train = load_unit_test(split="train")
>>> t = RandomDilatedShapeletTransform(
...     max_shapelets=10
... )
>>> t.fit(X_train, y_train)
RandomDilatedShapeletTransform(...)
>>> X_t = t.transform(X_train)

方法

clone([random_state])

获取具有相同超参数的对象的克隆。

fit(X[, y])

将转换器拟合到X,如果是有监督的,可以选择使用y。

fit_transform(X[, y])

拟合数据,然后转换它。

get_class_tag(tag_name[, raise_error, ...])

从估计器类获取标签值(仅限类标签)。

get_class_tags()

从估计器类及其所有父类中获取类标签。

get_fitted_params([deep])

获取拟合参数。

get_metadata_routing()

Sklearn 元数据路由。

get_params([deep])

获取此估计器的参数。

get_tag(tag_name[, raise_error, ...])

从估计器类中获取标签值。

get_tags()

从估计器中获取标签。

inverse_transform(X[, y])

反向转换X并返回一个反向转换后的版本。

reset([keep])

将对象重置为初始化后的干净状态。

set_params(**params)

设置此估计器的参数。

set_tags(**tag_dict)

将动态标签设置为给定值。

transform(X[, y])

转换X并返回转换后的版本。

clone(random_state=None)[source]

获取具有相同超参数的对象克隆。

克隆是一个没有共享引用的不同对象,处于初始化后的状态。 这个函数等同于返回自身的sklearn.clone。 在值上等同于type(self)(**self.get_params(deep=False))

Parameters:
random_stateint, RandomState instance, or None, default=None

设置克隆的随机状态。如果为None,则不设置随机状态。 如果为int,random_state是随机数生成器使用的种子。 如果为RandomState实例,random_state是随机数生成器。

Returns:
estimatorobject

type(self) 的实例,self 的克隆(见上文)

fit(X, y=None)[source]

将转换器拟合到X,如果是有监督的,可以选择使用y。

State change:

将状态更改为“已拟合”。

写入自身: _is_fitted : 标志设置为True。 模型属性(以“_”结尾) : 依赖于估计器

Parameters:
Xnp.ndarray or list

要拟合转换的数据,必须是有效的集合类型。输入数据,可以是任意数量的通道,形状为( n_cases, n_channels, n_timepoints)的等长序列,或者是形状为[n_cases]的numpy数组列表(任意数量的通道,不等长序列),2D np.array (n_channels, n_timepoints_i),其中n_timepoints_i是序列i的长度。允许其他类型的数据,并将其转换为上述类型之一。

不同的估计器具有处理不同类型输入的不同能力。如果self.get_tag("capability:multivariate")为False,它们无法处理多变量序列。如果self.get_tag( "capability:unequal_length")为False,它们无法处理不等长的输入。在这两种情况下,如果X具有估计器无法处理的特性,则会引发ValueError

ynp.ndarray, default=None

1D np.array 的浮点数或字符串,形状为 (n_cases) - 用于拟合的类标签(真实值),对应于 X 中的实例索引。如果为 None,则在拟合时不使用任何标签。

Returns:
selfa fitted instance of the estimator
fit_transform(X, y=None)[source]

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

将转换器适配到X和y,并返回X的转换版本。

State change:

将状态更改为“已拟合”。

写入自身: _is_fitted : 标志设置为 True。 模型属性(以“_”结尾) : 依赖于估计器。

Parameters:
Xnp.ndarray or list

要拟合转换的数据,必须是有效的集合类型。输入数据,可以是任意数量的通道,等长序列的形状为(n_cases, n_channels, n_timepoints)或形状为[n_cases]的numpy数组列表(任意数量的通道,不等长序列),2D np.array ( n_channels, n_timepoints_i),其中n_timepoints_i是序列i的长度。允许其他类型的数据,并将其转换为上述类型之一。

不同的估计器具有处理不同类型输入的不同能力。如果self.get_tag("capability:multivariate")为False,它们无法处理多变量序列。如果self.get_tag( "capability:unequal_length")为False,它们无法处理不等长的输入。在这两种情况下,如果X具有估计器无法处理的特性,则会引发ValueError

ynp.ndarray, default=None

1D np.array 的浮点数或字符串,形状为 (n_cases) - 用于拟合的类标签(真实值),对应于 X 中的实例索引。如果为 None,则在拟合时不使用任何标签。

Returns:
transformed version of X
classmethod get_class_tag(tag_name, raise_error=True, tag_value_default=None)[source]

从估计器类获取标签值(仅限类标签)。

Parameters:
tag_namestr

标签值的名称。

raise_errorbool, default=True

当未找到标签时是否引发ValueError。

tag_value_defaultany type, default=None

如果未找到标签且未引发错误,则使用默认/回退值。

Returns:
tag_value

cls中tag_name标签的值。 如果未找到,当raise_error为True时返回错误,否则返回tag_value_default

Raises:
ValueError

如果 raise_error 为 True 并且 tag_name 不在 self.get_tags().keys()

示例

>>> from aeon.classification import DummyClassifier
>>> DummyClassifier.get_class_tag("capability:multivariate")
True
classmethod get_class_tags()[source]

从估计器类及其所有父类获取类标签。

Returns:
collected_tagsdict

标签名称和标签值对的字典。 通过嵌套继承从_tags类属性中收集。 这些不会被set_tags或类__init__调用设置的动态标签覆盖。

get_fitted_params(deep=True)[source]

获取拟合参数。

State required:

需要状态为“已拟合”。

Parameters:
deepbool, default=True

如果为True,将返回此估计器的拟合参数以及包含的作为估计器的子对象。

Returns:
fitted_paramsdict

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

get_metadata_routing()[source]

Sklearn 元数据路由。

不支持 aeon 估计器。

get_params(deep=True)[source]

获取此估计器的参数。

Parameters:
deepbool, default=True

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

Returns:
paramsdict

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

get_tag(tag_name, raise_error=True, tag_value_default=None)[source]

从估计器类获取标签值。

包括动态和覆盖的标签。

Parameters:
tag_namestr

要检索的标签名称。

raise_errorbool, default=True

当未找到标签时是否引发ValueError。

tag_value_defaultany type, default=None

如果未找到标签且未引发错误,则使用默认/回退值。

Returns:
tag_value

自身中tag_name标签的值。 如果未找到,当raise_error为True时返回错误,否则返回tag_value_default

Raises:
ValueError

如果 raise_error 是 True 并且 tag_name 不在 self.get_tags().keys()

示例

>>> from aeon.classification import DummyClassifier
>>> d = DummyClassifier()
>>> d.get_tag("capability:multivariate")
True
get_tags()[source]

从估计器中获取标签。

包括动态和覆盖的标签。

Returns:
collected_tagsdict

标签名称和标签值对的字典。 通过嵌套继承从_tags类属性收集,然后从__init__set_tags中收集任何被覆盖和新添加的标签。

inverse_transform(X, y=None)[source]

对X进行逆变换并返回逆变换后的版本。

Currently it is assumed that only transformers with tags

“input_data_type”=”Series”, “output_data_type”=”Series”,

可以有一个逆变换。

State required:

需要状态为“已拟合”。

Accesses in self:

_is_fitted : 必须为 True 拟合模型属性(以“_”结尾): 通过 _inverse_transform 访问

Parameters:
Xnp.ndarray or list

要拟合转换的数据,必须是有效的集合类型。输入数据,可以是任意数量的通道,形状为( n_cases, n_channels, n_timepoints)的等长序列,或者是形状为[n_cases]的numpy数组列表(任意数量的通道,不等长序列),2D np.array (n_channels, n_timepoints_i),其中n_timepoints_i是序列i的长度。允许其他类型的数据,并将其转换为上述类型之一。

不同的估计器具有处理不同类型输入的不同能力。如果self.get_tag("capability:multivariate")为False,它们无法处理多变量序列。如果self.get_tag( "capability:unequal_length")为False,它们无法处理不等长的输入。在这两种情况下,如果X具有估计器无法处理的特性,则会引发ValueError

ynp.ndarray, default=None

1D np.array 的浮点数或字符串,形状为 (n_cases) - 用于拟合的类标签(真实值),对应于 X 中的实例索引。如果为 None,则在拟合时不使用任何标签。

Returns:
inverse transformed version of X

与X类型相同

reset(keep=None)[source]

将对象重置为初始化后的干净状态。

在调用self.reset()之后,self的值等于或类似于type(self)(**self.get_params(deep=False)),假设没有使用keep保留其他属性。

Detailed behaviour:
removes any object attributes, except:

超参数(__init__的参数) 包含双下划线的对象属性,即字符串“__”

使用当前超参数的值(get_params的结果)运行__init__

Not affected by the reset are:

包含双下划线的对象属性 类和对象方法,类属性 在keep参数中指定的任何属性

Parameters:
keepNone, str, or list of str, default=None

如果为None,则除了超参数外,所有属性都将被移除。 如果为str,则仅保留具有此名称的属性。 如果为str列表,则仅保留具有这些名称的属性。

Returns:
selfobject

自我引用。

set_params(**params)[source]

设置此估计器的参数。

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

Parameters:
**paramsdict

估计器参数。

Returns:
selfestimator instance

估计器实例。

set_tags(**tag_dict)[source]

将动态标签设置为给定值。

Parameters:
**tag_dictdict

标签名称和标签值对的字典。

Returns:
selfobject

自我引用。

transform(X, y=None)[source]

转换X并返回转换后的版本。

State required:

需要状态为“已拟合”。

访问自身: _is_fitted : 必须为 True 拟合模型属性(以“_”结尾) : 必须设置,通过 _transform 访问

Parameters:
Xnp.ndarray or list

要拟合转换的数据,必须是有效的集合类型。输入数据,可以是任意数量的通道,形状为( n_cases, n_channels, n_timepoints)的等长序列,或者是形状为[n_cases]的numpy数组列表(任意数量的通道,不等长序列),2D np.array (n_channels, n_timepoints_i),其中n_timepoints_i是序列i的长度。允许其他类型的数据,并将其转换为上述类型之一。

不同的估计器具有处理不同类型输入的不同能力。如果self.get_tag("capability:multivariate")为False,它们无法处理多变量序列。如果self.get_tag( "capability:unequal_length")为False,它们无法处理不等长的输入。在这两种情况下,如果X具有估计器无法处理的特性,则会引发ValueError

ynp.ndarray, default=None

1D np.array 的浮点数或字符串,形状为 (n_cases) - 用于拟合的类标签(真实值),对应于 X 中的实例索引。如果为 None,则在拟合时不使用任何标签。

Returns:
transformed version of X