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



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

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

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

没有任何关于数据重塑的进一步知识是你能做的最好的事情。 特征工程是一门非常手工的艺术,在很大程度上依赖于领域知识。

根据经验:如果您对数据一无所知,请输入原始数据,看看它是否有效。如果您知道数据的哪些属性可能对分类有益,请尝试在要素中使用它。

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

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

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

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

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

最新更新