核方法

在下面,我们将讨论使用核来比较时间序列。 一个核\(k(\cdot, \cdot)\)是这样的,存在一个未知的映射 \(\Phi\)使得:

\[k(\mathbf{x}, \mathbf{y}) = \left\langle \Phi(\mathbf{x}), \Phi(\mathbf{y}) \right\rangle_{\mathcal{H}}\]

\(k(\cdot, \cdot)\)\(\mathbf{x}\)\(\mathbf{y}\) 在某个(未知)嵌入空间 \(\mathcal{H}\) 中的内积。实际上,当 \(\mathbf{x}\)\(\mathbf{y}\) 相似时,\(k(\mathbf{x}, \mathbf{y})\) 会很大,而当它们非常不相似时,\(k(\mathbf{x}, \mathbf{y})\) 会接近于 0。

大量来自机器学习文献的核方法依赖于所谓的核技巧,该技巧包括在嵌入空间\(\mathcal{H}\)中执行计算,而无需实际执行任何嵌入。 例如,可以通过以下方式计算\(\mathbf{x}\)\(\mathbf{y}\)\(\mathcal{H}\)中的距离:

\[\begin{split}\| \Phi(\mathbf{x}) - \Phi(\mathbf{y})\|_\mathcal{H}^2 &= \left\langle \Phi(\mathbf{x}) - \Phi(\mathbf{y}), \Phi(\mathbf{x}) - \Phi(\mathbf{y}) \right\rangle_{\mathcal{H}} \\ &= \left\langle \Phi(\mathbf{x}), \Phi(\mathbf{x}) \right\rangle_{\mathcal{H}} + \left\langle \Phi(\mathbf{y}), \Phi(\mathbf{y}) \right\rangle_{\mathcal{H}} - 2 \left\langle \Phi(\mathbf{x}), \Phi(\mathbf{y}) \right\rangle_{\mathcal{H}} \\ &= k(\mathbf{x}, \mathbf{x}) + k(\mathbf{y}, \mathbf{y}) - 2 k(\mathbf{x}, \mathbf{y})\end{split}\]

例如,这些计算用于核\(k\)-均值算法(见下文)。

全局对齐核

全局对齐核(GAK)是一种在时间序列上操作的核。

它被定义为,对于给定的带宽 \(\sigma\),如下:

\[k(\mathbf{x}, \mathbf{y}) = \sum_{\pi \in \mathcal{A}(\mathbf{x}, \mathbf{y})} \prod_{i=1}^{ | \pi | } \exp \left( - \frac{ \left\| x_{\pi_1(i)} - y_{\pi_2{j}} \right\|^2}{2 \sigma^2} \right)\]

其中 \(\mathcal{A}(\mathbf{x}, \mathbf{y})\) 是序列 \(\mathbf{x}\)\(\mathbf{y}\) 之间所有可能对齐的集合。

建议在[1]中将带宽\(\sigma\)设置为训练集中不同时间序列中观察到的不同点的中位数距离的简单估计值的倍数,并按集合中时间序列的中位数长度的平方根进行缩放。 此估计值可通过tslearn.metrics.sigma_gaktslearn中获得:

from tslearn.metrics import gak, sigma_gak

sigma = sigma_gak(X)
k_01 = gak(X[0], X[1], sigma=sigma)

但请注意,在长时间序列上,此估计可能会导致数值溢出,而较小的值可以避免这种情况。

最后,GAK 通过以下公式与 softDTW [3] 相关:

\[k(\mathbf{x}, \mathbf{y}) = \exp \left(- \frac{\text{softDTW}_\gamma(\mathbf{x}, \mathbf{y})}{\gamma} \right)\]

其中 \(\gamma\) 是控制 softDTw 平滑度的超参数, 它与 GAK 的带宽参数通过 \(\gamma = 2 \sigma^2\) 相关。

聚类和分类

\(k\)-均值[2]是一种使用核技巧在核相关的嵌入空间中隐式执行\(k\)-均值聚类的方法。 该方法在我们用户指南中专门讨论聚类的部分中进行了讨论。

核函数也可以用于分类设置。 tslearn.svm 提供了支持向量机(SVM)的实现, 这些实现接受GAK作为核函数。 此实现主要依赖于 scikit-learnlibsvm。 一个含义是 predict_probapredict_log_proba 方法 是基于交叉验证概率估计计算的,这有两个主要含义, 如 scikit-learn用户指南 中更详细讨论的:

1. 将构造函数选项 probability 设置为 True 会使 fit 步骤变长,因为它依赖于昂贵的五折交叉验证;

2. 通过predict_proba获得的概率估计可能与decision_function提供的分数以及predict输出的预测类别不一致。

使用核方法的示例

SVM和GAK

SVM and GAK

Kernel k-means

Kernel k-means

参考文献