ラベルに基づいて、ウィンドウ化されたTensorFlowデータセットをバイナリ分類ラベルでフィルタリングしてバランスする方法を教えてください。 -- tensorflow フィールド と tensorflow-datasets フィールド 関連 問題

How can I filter and balance a Windowed Tensorflow dataset with a binary classification label, based on the label?












0
vote

問題

日本語

私は、フィルタリングでバランスをとることを試みるラベルを持つ不均衡なテンサーフローウィンドウデータセットを持っています。ラベルを持つ私の窓付きデータセットが私の検索で終わった場合、またはTensorflowのドキュメントの下に該当しないように、フィルタリングに問題があります。

時系列データに基づいてバイナリ分類を予測するためのモデルに取り組んでいます。各行が1分の列(価格、ボリュームなど)の時系列データフレームから始めます。

現在私はまだ異なるラベルのフィルタリングに停めています。フィルタリング後の私の次のステップは、両方のフィルタデータセットのサイズを取得し、より小さいサイズ(n)を見つけてから、より大きなデータセットをシャッフリングした後に、より小さなデータセットを大きくデータセットから連結します。このようにして、同じ数の1と0ラベルを持つバランスのとれたデータセットがあります。あなたがより良い考えを持っているならば、私はそれを聞いてうれしいです。

コードを説明する: DFrameは、価格、ボリュームなどの列を持つPandas DataFrameで、各行は異なる分です。最初の行は最も早い/最も古い期間です。 DFrameの最後の列は分類子0または1です。

I B最後の列にあるラベルを除くすべてのDFrame列、および2番目の入力(ラベル)が分類子である最後の列であることを除いて、スライスからテンソルフローデータセットを作成します。ウィンドウ関数を使用して、現在512であるサイズの窓を作成します。つまり(間違っていない場合)現在の511分だけでなく、これをローリングウィンドウとして使用します。現在の分のラベルに関連付けるには。だから私の理解は、現在の分の行から511分前の行まで、xが512アレイの配列であり、Yは現在の分のラベルです。そのため、Xは512アレイの配列です(データフレームからの各分の行)、Yは1つの整数、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.
英語

I have an unbalanced tensorflow windowed dataset with labels (over 90% negative examples) which I am trying to balance by filtering. I am having trouble filtering as my windowed dataset with labels does not fall under the cases I have come across in my searches, or the tensorflow documentation.

I'm working on a model to predict a binary classification based on time series data. I start with a time series dataframe with a number of columns (price, volume, etc.) where each row is one minute.

Currently I am still stuck on filtering the different labels. My next step after filtering would be to get the size of both filtered datasets, find the smaller size (n), and then concatenate the smaller dataset with (n) elements from the bigger dataset, after shuffling the bigger dataset. This way I would have a balanced dataset with an equal number of 1 and 0 labels. If you have a better Idea I would be happy to hear it.

EXPLAINING MY CODE: DFrame is a pandas dataframe with columns such as price, volume, etc., and each row is a different minute, with the first row being the earliest/oldest time period. The last column of DFrame is the classifier 0 or 1.

I then create a tensorflow dataset from slices with the first input being all the DFrame columns except for the label which is in the last column, and the second input (the label) being the last column which is the classifier.

I then use the window function to create windows of size (hindsight) which is currently 512, meaning (If i'm not mistaken) it takes the previous 511 minutes as well as the current minute and uses this as a rolling window to associate with the label of the current minute. So my understanding is that x is then an array of 512 arrays, from the row of the current minute to the row of 511 minutes ago, and the y is the label of the current minute. So x is an array of 512 arrays (rows for each minute, from the dataframe), and y is just one integer, 1 or 0.

Ideally I would like to be able to apply the same balancing logic to a multiclass classification problem, where I essentially add additional labels for additional price movement ranges.

The error comes from the filter. The model seems to run without that, and even trains my keras model. as explained I would actually want to add more code after the filter once I get it working to balance the dataset but I need to filter it first.

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. 
</div
     

回答リスト

0
 
vote
vote
ベストアンサー
 

は、フラットマップの後にフィルタを実行し、述語

のためのyだけではなくy [0]を指定しなければならない。 <事前> <コード> def Tensify (dataframe, hindsight): tensor = tf.data.Dataset.from_tensor_slices((tf.constant(dataframe[dataframe.columns.values[:-1]].values), tf.constant(dataframe[dataframe.columns.values[-1]].values))) tensor = tensor.window(hindsight,1,1,True) tensor = tensor.flat_map(lambda x,y: tf.data.Dataset.zip((x.batch(hindsight), y.batch(1)))) return tensor def BalanceTensor(tensor, npos): positive = tensor.filter(lambda x,y: tf.math.equal(y[0],1)) negative = tensor.filter(lambda x,y: tf.math.equal(y[0],0)) negative = negative.shuffle(1000) negative = negative.take(npos) tensor = positive.concatenate(negative) return tensor tensor = Tensify(DFrame, hindsight) tensor = BalanceTensor(tensor, sum(DFrame["target"])) tensor = tensor.shuffle(1000) tensor = tensor.batch(Batch_size).prefetch(1)
 

Figured it out, had to perform the filter after the flat map, and specifying y[0] instead of just y for the predicate

def Tensify (dataframe, hindsight):     tensor = tf.data.Dataset.from_tensor_slices((tf.constant(dataframe[dataframe.columns.values[:-1]].values), tf.constant(dataframe[dataframe.columns.values[-1]].values)))     tensor = tensor.window(hindsight,1,1,True)     tensor = tensor.flat_map(lambda x,y: tf.data.Dataset.zip((x.batch(hindsight), y.batch(1))))     return tensor  def BalanceTensor(tensor, npos):     positive = tensor.filter(lambda x,y: tf.math.equal(y[0],1))     negative = tensor.filter(lambda x,y: tf.math.equal(y[0],0))     negative = negative.shuffle(1000)     negative = negative.take(npos)     tensor = positive.concatenate(negative)     return tensor  tensor = Tensify(DFrame, hindsight) tensor = BalanceTensor(tensor, sum(DFrame["target"]))  tensor = tensor.shuffle(1000) tensor = tensor.batch(Batch_size).prefetch(1) 
</div
 
 

関連する質問

10  JupyterノートブックでTensorFlow_DataSetsモジュールをインポートできません  ( Not able to import tensorflow datasets module in jupyter notebook ) 
私は、Google Colabを使用してコードを書き込む/実行するUDacityからTensorflowコースを試しています。しかし、私のローカルマシンでコードを実行したいので、コードを実行するための新しい環境を作成しましたが、TensorFlow_Da...

2  TensorFlowデータセットの関数cache()とprefetch()は何をしますか?  ( What do the tensorflow datasets functions cache and prefetch do ) 
Tensorflowのイメージセグメンテーションチュートリアル。そこには次の行があります: <事前> <コード> train_dataset = train.cache().shuffle(BUFFER_SIZE).batch(BATCH_SIZE).rep...

5  TF.DataSetで訓練されたモデルとの推論  ( Inference with a model trained with tf dataset ) 
<コード> myField2 APIを使用してモデルを訓練しているため、私のトレーニングコードはこのようなものに見えます <事前> <コード> myField3 モデルが訓練された後、データセットにない例について推測し、それを行う方法はわかりません。 た...

20  TensorFlow - TF.Data.DataSet Large HDF5ファイルを読む  ( Tensorflow tf data dataset reading large hdf5 files ) 
私の深い学習モデルの入力として大きなHDF5ファイルを読み取るためのテンショーフローパイプラインを設定しています。各HDF5ファイルには、圧縮されたJPG画像のコレクションとして格納されている可変サイズ長の100個のビデオが含まれています(ディスクの管理可能な...

1  TensorFlowデータセットでカスタム分割を定義する方法  ( How to define a custom split in tensorflow datasets ) 
新しいデータセットを追加しようとしている新しいTensorflowデータセットライブラリのドキュメントを歩いています。私は自分のデータセットのカスタムデータセット分割を指定し、それらが言うドキュメントで指定したいです。 データセットに事前定義された分割が付属...

2  TensorflowのDataSet APIイテレータを(再発)ニューラルネットワークの入力として使用する方法  ( How to use tensorflows dataset api iterator as an input of a recurrent neural ) 
TensorFlowのDataSet APIイテレータを使用する場合、私の目標は、Iteratorの<コード> get_next() テンソルで動作するRNNをその入力として定義することです(コード内の<コード> (1) を参照)。 しかし、 dynami...

0  データAPI:ValueError: `y`引数は、データセットを入力として使用するときにはサポートされていません  ( Data api valueerror y argument is not supported when using dataset as input ) 
サイズ224 * 224の45000のイメージを持っています。 source_arr と呼ばれるこの配列は、Shape 45000,224,224を持ち、メモリに収まります。 このアレイを列車、テスト、および検証、検証、検証、プレプロセス(GreyScale...

14  tfds.load()の後にTensorFlow 2.0でデータ強化を適用する方法  ( How to apply data augmentation in tensorflow 2 0 after tfds load ) 
続いていますこのガイド tfds.load() method:を使用して、新しいTensorFlowデータセットからデータセットをダウンロードする方法を示します。 <事前> <コード> import tensorflow_datasets as tfd...

0  Tensorflowエラー "ValueError:None値がサポートされていない値"を受けています。 TFデータセットに移入しようとしている間。誰かが私を助けますか?  ( I am receiving tensorflow error valueerror none values not supported while t ) 
私は私のデータをランク2(n x 3)テンソルに保管しており、このテンソルの特定の行を集めて、ケーストレーニングループに供給される単一の例のデータを生み出しています。基本的には、アイデアは単に次のようになります。インデックスIB(SATH、100)、すなわち、...

1  データAPIエラー:シンボリックテンソル(TRUEIV:0)をNUMPY配列に変換できません  ( Data api error cannot convert a symbolic tensor truediv0 to a numpy array ) 
サイズ224 * 224の45000のイメージを持っています。 source_arr と呼ばれるこの配列は、Shape 45000,224,224を持ち、メモリに収まります。 この配列を列車に分割し、ARREAS、PREARSおよびPRE-PROCES(GR...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有