使用SVM对多维时间序列数据集进行分类

时间:2017-08-07 12:49:49

标签: scikit-learn time-series svm

我想使用scikit-learn的svm.SVC()估算器来执行多维时间序列的分类任务 - 也就是说,系列中的点在R ^ d中取值的时间序列,其中d> 1。

执行此操作的问题是svm.SVC()只会将ndarray个维度的对象最多2个,而此类数据集的维度将为3.具体而言,给定数据集的形状会是(n_samples, n_features, d)

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

1 个答案:

答案 0 :(得分:1)

在没有任何关于数据重塑的进一步知识的情况下,您可以做到最好。 Feature engineering是一种非常手工的艺术,在很大程度上依赖于领域知识。

根据经验:如果您对原始数据中的数据没有任何了解,请查看它是否有效。如果您知道数据的哪些属性可能对分类有益,请尝试在功能中使用它。

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

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

让我们假设我们要区分锯齿形和波浪形。在这种情况下, smoothness (无论如何定义)可能是一个非常有用的功能,我们可以将其作为原始数据的另一列添加。

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

如果你有很多很多很多数据(比如一个充满好例子的互联网),深度学习神经网络可以在一定程度上自动学习功能,但是让我们说这是相当先进的。最后,大多数实际应用都归结为尝试和错误。了解您可以提出哪些功能并在实践中尝试使用它们。并注意overfitting gremlin。