【问题标题】:Using SVM to perform classification on multi-dimensional time series datasets使用SVM对多维时间序列数据集进行分类
【发布时间】:2018-01-14 18:50:21
【问题描述】:

我想使用 scikit-learn 的 svm.SVC() 估计器对多维时间序列执行分类任务——即在序列中的点取 R^d 值的时间序列上,其中 d > 1。

这样做的问题是svm.SVC() 最多只能采用维度为 2 的 ndarray 对象,而此类数据集的维度为 3。具体而言,给定数据集的形状将是 (n_samples, n_features, d) .

是否有可用的解决方法?一个简单的解决方案是重塑数据集,使其成为二维的,但是我想这会导致分类器无法正确地从数据集中学习。

【问题讨论】:

  • n_features 维度是什么?您在第一段中描述的时间序列的形状为(n_samples, d)。除此之外,重塑可能会奏效。你为什么不试试呢?
  • n_features 是及时记录的数量 - 例如,如果我每分钟记录屏幕上光标的位置 1 小时,那么 n_features 将是 60,@987654329 @ 将是 3。关于第二点:我想知道是否有更好的解决方案(我还没有看到任何地方讨论过这个问题)。
  • 我认为samples 是时间位置...那么n_samples 维度是什么?不同的路径实现?
  • n_samples 是不同系列的数量:如果我们对图像进行分类,它将是我们数据集中的图像数量。

标签: scikit-learn time-series svm


【解决方案1】:

没有任何关于数据重塑的进一步知识是你能做的最好的事情。 Feature engineering 是一门非常依赖领域知识的手工艺术。

根据经验:如果您对数据一无所知,请输入原始数据并查看它是否有效。如果您知道数据的哪些属性可能有利于分类,请尝试将其用于特征。

假设我们要对触摸屏上的滑动模式进行分类。这与您的数据非常相似:我们通过每隔几毫秒记录一次 2D 位置来获取此类模式的许多时间序列。

在原始数据中,每个时间序列都以n_timepoints * 2 特征为特征。我们可以直接使用它进行分类。如果我们有额外的知识,我们可以使用它来创建额外/替代功能。

假设我们想要区分锯齿形和波浪形。在这种情况下,平滑度(无论如何定义)可能是一个非常有用的特征,我们可以将其作为进一步的列添加到原始数据中。

另一方面,如果我们想区分慢速和快速模式,瞬时速度可能是一个很好的特征。但是,可以将速度计算为沿时间轴的简单差异。即使是线性分类器也可以很容易地对此进行建模,因此可能会证明这些特征虽然原则上很好,但并不能改善原始数据的分类。

如果你有很多很多很多很多的数据(比如说一个充满好例子的互联网)深度学习神经网络可以在一定程度上自动学习特征,但是假设这是相当先进的。最后,大多数实际应用都归结为尝试和错误。看看你能想出什么功能并在实践中尝试一下。并当心overfitting gremlin。

【讨论】:

    猜你喜欢
    • 2021-05-30
    • 2019-08-24
    • 2018-10-02
    • 2020-09-25
    • 2014-11-15
    • 2023-04-10
    • 2014-06-03
    • 1970-01-01
    • 2015-12-21
    相关资源
    最近更新 更多