时间序列分类-非常差的结果


11

我正在研究时间序列分类问题,其中输入的是手机帐户前21天的时间序列语音使用数据(以秒为单位)。相应的目标变量是该帐户是否在35-45天范围内被取消。因此,这是一个二进制分类问题。

到目前为止,我尝试过的所有方法(在不同程度上)的效果都非常差。首先,我尝试了k-NN分类(进行了各种修改),但结果却非常糟糕。这使我从时间序列中提取特征-即均值,方差,最大值,最小值,总零天,总尾随零天,上半年平均值与下半年平均值之间的差等,而最具预测性的特征似乎是总计零天和总尾随零天(使用几种分类算法)。这表现最好,但是性能仍然不是很好。

我的下一个策略是对我的训练集中的负面实例进行过度采样,因为它们很少。这导致更正确的抵消预测,但以更多的假阳性为代价。

我开始认为,时间序列使用情况数据本身可能并不能很好地预测(尽管常识认为应该如此)。也许有些潜在的变量我没有考虑。查看数据还显示出一些奇怪的行为。即,一些示例显示很少使用或减少使用(有时甚至根本不使用)并且不取消,而一些示例显示使用取消的使用量增加。也许这种矛盾的行为不会为分类器产生非常清晰的决策边界。

另一个可能的错误来源是许多训练示例都很稀疏(即许多天使用0的事实)。我还没有尝试过的一个想法是将时间序列分成多个部分并以这种方式生成一些功能,但是我并不抱有很大希望。


1
对于初学者,我建议您尝试以下1。按小时/天汇总使用情况数据。2.从您的训练数据中,重叠这些时间序列的图,以查看两组中的模式。3.探索各种适合您数据的时间序列/回归模型。4.使用模型系数作为分类器的特征。
ramhiser

我喜欢您的特征提取技术。我会试试。我已经确信我的数据太稀疏,无法找到模式,但是谁知道。谢谢!
user1893354 2013年

Answers:


13

在将KNN与动态时间规整作为距离指标应用方面,我取得了很大的成功。

我的研究(pdf)表明,这种方法很难被击败。下面的示意图来自我在github上的KNN和DTW的python实现。或在IPython Notebook中查看

KNN和DTW

如果您要训练的数据集非常大,建议您对距离矩阵进行分层聚类。然后从所需的群集中采样以生成较小的训练数据集。在hclust将确保您的时间序列代表在您的数据广泛的时间序列特征。


4
您能否更新研究论文的链接?
tilaprimera


10

时间序列分类的两种方法

有两种方法可以处理分类任务的时间结构化输入:

  1. 专用时间序列模型:机器学习算法直接合并了时间序列。我将DTW模型归为KNN。
  2. 基于特征的方法:在这里,时间序列映射到另一个可能是较低维的表示形式。这意味着特征提取算法将计算特征,例如时间序列的平均值或最大值。然后将特征作为特征矩阵传递给“正常”机器学习,例如神经网络,随机森林或支持向量机。这种方法的优点是可以更好地解释结果。此外,它使我们能够使用发达的监督机器学习理论。

过去,我还成功地通过DTW成功部署了KNN。但是,我几乎总是能够通过使用精心设计的功能的模型来击败它的准确性。同样,用于二进制分类的带有DTW的KNN标度为O(n_t·m_ {train}·m_ {test}),其中n_t是时间序列的长度,mtrain和mtest分别是训练序列和测试集中的设备数。 。这意味着计算需要很长时间。

因此,我建议采用基于功能的方法。

tsfresh计算出大量功能

python包tsfresh从包含时间序列的pandas.DataFrame计算大量此类功能。您可以在http://tsfresh.readthedocs.io上找到其文档。

在此处输入图片说明

您可以尝试使用它来计算大量功能。稍后,您可以过滤功能的重要性,并确定有前途的候选对象。

免责声明:我是tsfresh的作者之一。


非常感谢您的精彩帖子。我的时间序列非常小(例如,每个时间序列10个数据点)。在这种情况下,您是否建议对我的数据集使用tsfresh?谢谢:)
EmJ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.