【发布时间】:2019-08-06 13:08:36
【问题描述】:
我有一个带有标签的不平衡张量流窗口数据集(超过 90% 的负面示例),我试图通过过滤来平衡它。我在过滤时遇到问题,因为带有标签的窗口数据集不属于我在搜索或 tensorflow 文档中遇到的情况。
我正在研究基于时间序列数据预测二元分类的模型。我从一个时间序列数据框开始,其中包含许多列(价格、数量等),其中每行为一分钟。
目前我仍然坚持过滤不同的标签。过滤后的下一步是获取两个过滤数据集的大小,找到较小的大小 (n),然后在对较大的数据集进行洗牌后,将较小的数据集与较大数据集的 (n) 个元素连接起来。这样,我将拥有一个具有相同数量的 1 和 0 标签的平衡数据集。如果您有更好的想法,我会很高兴听到。
解释我的代码: DFrame 是一个 pandas 数据框,包含价格、数量等列,每一行是不同的分钟,第一行是最早/最旧的时间段。 DFrame的最后一列是分类器0或1。
然后我从切片创建一个 tensorflow 数据集,第一个输入是除最后一列中的标签之外的所有 DFrame 列,第二个输入(标签)是作为分类器的最后一列。
然后我使用窗口函数创建当前为 512 大小的窗口(后见之明),这意味着(如果我没记错的话)它需要前 511 分钟和当前分钟,并将其用作滚动窗口与当前分钟的标签相关联。所以我的理解是x是512个数组的数组,从当前分钟的行到511分钟前的行,y是当前分钟的标签。所以 x 是一个由 512 个数组组成的数组(每分钟的行,来自数据帧),而 y 只是一个整数,1 或 0。
理想情况下,我希望能够将相同的平衡逻辑应用于多类分类问题,我基本上为额外的价格变动范围添加额外的标签。
错误来自过滤器。该模型似乎没有它就可以运行,甚至可以训练我的 keras 模型。正如解释的那样,一旦我开始平衡数据集,我实际上想在过滤器之后添加更多代码,但我需要先过滤它。
tensor= tf.data.Dataset.from_tensor_slices((tf.constant(DFrame[DFrame.columns.values[:-1]].values), tf.constant(DFrame[DFrame.columns.values[-1]].values)))
tensor = tensor.window(hindsight,1,1,True)
tensor = tensor.shuffle(1000)
tensor = tensor.filter(lambda x,y: tf.equal(y, 0))
tensor = tensor.flat_map(lambda x,y:tf.data.Dataset.zip((x.batch(hindsight), y.batch(1))))
tensor = tensor.batch(Batch_size).prefetch(1)
TypeError: Failed to convert object of type <class 'tensorflow.python.data.ops.dataset_ops._VariantDataset'> to Tensor. Contents: <_VariantDataset shapes: (), types: tf.int64>. Consider casting elements to a supported type.
【问题讨论】:
标签: tensorflow tensorflow-datasets