pyts.classification.LearningShapelets

class pyts.classification.LearningShapelets(n_shapelets_per_size=0.2, min_shapelet_length=0.1, shapelet_scale=3, penalty='l2', tol=0.001, C=1000, learning_rate=1.0, max_iter=1000, multi_class='multinomial', alpha=-100, fit_intercept=True, intercept_scaling=1.0, class_weight=None, verbose=0, random_state=None, n_jobs=None)[来源]

学习Shapelets算法。

该估计器包含两个步骤:首先计算shapelets与时间序列之间的距离,然后利用这些距离作为特征进行逻辑回归。该算法同时学习shapelets和逻辑回归的系数。

Parameters:
n_shapelets_per_size : int or float (default = 0.2)

每种尺寸的shapelet数量。如果是浮点数,则表示时间戳数量的一个比例,每种尺寸的shapelet数量等于ceil(n_shapelets_per_size * n_timestamps)

min_shapelet_length : int or float (default = 0.1)

shapelets的最小长度。如果是浮点数,它表示时间戳数量的一个比例,每个尺寸的shapelets最小长度等于ceil(min_shapelet_length * n_timestamps)

shapelet_scale : int (default = 3)

不同尺度下shapelets的长度变化。 shapelets的长度等于 min_shapelet_length * np.arange(1, shapelet_scale + 1)。 shapelets(以及特征)的总数量等于 n_shapelets_per_size * shapelet_scale

penalty : ‘l1’ or ‘l2’ (default = ‘l2’)

用于指定惩罚中使用的范数。

tol : float (default = 1e-3)

停止准则的容忍度。

C : float (default = 1000)

正则化强度的倒数。必须是一个正浮点数。 数值越小表示正则化越强。

learning_rate : float (default = 1.)

梯度下降优化的学习率。必须为正浮点数。请注意,如果损失函数未下降,学习率将自动降低。

max_iter : int (default = 1000)

梯度下降算法的最大迭代次数。

multi_class : {‘multinomial’, ‘ovr’, ‘ovo’} (default = ‘multinomial’)

多类别分类策略。 'multinomial' 代表多项式交叉熵损失。 'ovr' 代表一对多策略。 'ovo' 代表一对一策略。 如果分类任务是二分类,则忽略此设置。

alpha : float (default = -100)

softmin函数中的缩放项。该值越低,soft最小值越精确。默认值适用于标准化时间序列。

fit_intercept : bool (default = True)

指定是否在决策函数中添加常数项(也称为偏置或截距)。

intercept_scaling : float (default = 1.)

截距的缩放比例。仅在fit_intercept=True时使用。

class_weight : dict, None or ‘balanced’ (default = None)

与类别关联的权重,格式为{class_label: weight}。 如果未指定,则假定所有类别的权重均为1。 "balanced"模式会根据输入数据中类别的频率自动调整权重, 权重与类别频率成反比,计算公式为n_samples / (n_classes * np.bincount(y))

verbose : int (default = 0)

控制输出信息的详细程度。必须是非负整数。 如果为正数,每次迭代的损失值都会被打印出来。

random_state : None, int or RandomState instance (default = None)

用于数据洗牌时的伪随机数生成器种子。如果为整数,random_state将作为随机数生成器的种子。如果是RandomState实例,random_state将直接作为随机数生成器。如果为None,则使用np.random模块中的RandomState实例作为随机数生成器。

n_jobs : None or int (default = None)

用于计算的作业数量。仅在multi_class为'ovr'或'ovo'时使用。

注意事项

任务数量(n_tasks)取决于multi_class的值和类别数量。如果有两个类别,任务数量等于1。如果超过两个类别,任务数量等于:

  • 1 如果 multi_class='multinomial'
  • 如果multi_class='ovr'则为n_classes
  • 如果 multi_class='ovo' 则为 n_classes * (n_classes - 1) / 2

参考文献

[1]J. Grabocka, N. Schilling, M. Wistuba 和 L. Schmidt-Thieme, "学习时间序列形状特征"。数据挖掘国际会议,14,392-401(2014)。

示例

>>> from pyts.classification import LearningShapelets
>>> X = [[1, 2, 2, 1, 2, 3, 2],
...      [0, 2, 0, 2, 0, 2, 3],
...      [0, 1, 2, 2, 1, 2, 2]]
>>> y = [0, 1, 0]
>>> clf = LearningShapelets(random_state=42, tol=0.01)
>>> clf.fit(X, y)
LearningShapelets(...)
>>> clf.coef_.shape
(1, 6)
Attributes:
classes_ : array, shape = (n_classes,)

分类器已知的类别标签数组。

shapelets_ : array shape = (n_tasks, n_shapelets)

学习到的shapelets。该数组的每个元素都是一个学习到的shapelet。

coef_ : array, shape = (n_tasks, n_shapelets) or (n_classes, n_shapelets)

决策函数中每个shapelet的系数。

intercept_ : array, shape = (n_tasks,) or (n_classes,)

向决策函数添加的截距(也称为偏置)。 如果 fit_intercept=False,则截距设置为零。

n_iter_ : array, shape = (n_tasks,)

实际迭代次数。

方法

__init__([n_shapelets_per_size, …]) Initialize self.
decision_function(X) Decision function scores.
fit(X, y[, sample_weight]) Fit the model according to the given training data.
get_params([deep]) Get parameters for this estimator.
predict(X) Predict the class labels for the provided data.
predict_proba(X) Probability estimates.
score(X, y[, sample_weight]) Return the mean accuracy on the given test data and labels.
set_params(**params) Set the parameters of this estimator.
__init__(n_shapelets_per_size=0.2, min_shapelet_length=0.1, shapelet_scale=3, penalty='l2', tol=0.001, C=1000, learning_rate=1.0, max_iter=1000, multi_class='multinomial', alpha=-100, fit_intercept=True, intercept_scaling=1.0, class_weight=None, verbose=0, random_state=None, n_jobs=None)[来源]

初始化自身。查看 help(type(self)) 获取准确的签名信息。

decision_function(X)[来源]

决策函数得分。

参数:
X : array-like, shape = (n_samples, n_timestamps)

测试样本。

Returns:
T : array, shape = (n_samples,) or (n_samples, n_classes)

决策函数为模型中的每个样本对每个类别进行评分,其中类别的顺序与self.classes_中的顺序一致。

fit(X, y, sample_weight=None)[来源]

根据给定的训练数据拟合模型。

参数:
X : array-like, shape = (n_samples, n_timestamps)

训练向量。

y : array-like, shape = (n_samples,)

每个数据样本的类别标签。

sample_weight : None or array-like, shape = (n_samples,) (default = None)

分配给单个样本的权重数组。 如果未提供,则每个样本将被赋予单位权重。

返回值:
self : object
get_params(deep=True)

获取此估计器的参数。

参数:
deep : bool, default=True

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

返回值:
params : dict

参数名称映射到对应的值。

predict(X)[来源]

预测所提供数据的类别标签。

参数:
X : array-like, shape = (n_samples, n_timestamps)

测试样本。

返回值:
y_pred : array-like, shape = (n_samples,)

每个数据样本的类别标签。

predict_proba(X)[来源]

概率估计。

参数:
X : array-like, shape = (n_samples, n_timestamps)

测试样本。

Returns:
T : array, shape = (n_samples, n_classes)

模型中每个类别的样本概率,类别顺序与self.classes_中的顺序一致。

score(X, y, sample_weight=None)

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

参数:
X : array-like, shape = (n_samples, n_timestamps)

单变量时间序列。

y : array-like, shape = (n_samples,)

X的真实标签。

sample_weight : None or array-like, shape = (n_samples,) (default = None)

样本权重。

Returns:
score : float

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

set_params(**params)

设置此估计器的参数。

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

参数:
**params : dict

估计器参数。

返回值:
self : 估计器实例

估计器实例。

使用pyts.classification.LearningShapelets的示例

Learning Time-Series Shapelets

学习时间序列形状特征

学习时间序列形状片段