質問編集履歴

1

題名の修正、コードの追記、試してみたことの追記、訓練データと検証データの分け方についての追記

2019/10/09 09:43

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 180個×6種類の説明変数から1つの目的変数を出力したいが、説明変数の入力範囲が大きく被ってしまう。
1
+ 説明変数複数行に対して目的変数を1行とて読み込ませたいが、説明変数の入力範囲が大きく被ってしまう。
test CHANGED
@@ -10,13 +10,15 @@
10
10
 
11
11
  のサンプルコードを元に作っています。
12
12
 
13
- 180個×6種類の説明変数から1つの目的変数を出力したいのですが、下のコードのように、説明変数の入力範囲が大きく被ってしまっています。
13
+ 180個×6種類の説明変数から1つの目的変数を出力したいのですが、下の出力のように、説明変数の入力範囲が大きく被ってしまっています。
14
14
 
15
15
  env_dataは説明変数が入っているデータ(54000,6)で、ea_dataは目的変数が入っているデータ(300,1)です。
16
16
 
17
+ 説明変数180行に対して目的変数が1行となっているため、行数が異なっています。
18
+
17
19
  env_dataはインデックス0~27000を訓練データ、27001~54000を検証データとして使っています。
18
20
 
19
-
21
+ 訓練データと検証データの分け方を1:1としてしまいましたが、後ほど7:3や8:2などに修正する予定です。
20
22
 
21
23
  ### 読み込んでいる範囲
22
24
 
@@ -336,6 +338,82 @@
336
338
 
337
339
 
338
340
 
341
+ ##### ③ ②のコードにwhileを追加
342
+
343
+ ②で起こった問題を解決するために、以下のようにwhileを追加しました。
344
+
345
+ ```Python3
346
+
347
+ for j, row in enumerate(rows):
348
+
349
+ k = j * 180
350
+
351
+ l = min_index + k
352
+
353
+ if l + lookback <= max_index + 1:
354
+
355
+ indices = range(l, l +lookback, step)
356
+
357
+ print(indices)
358
+
359
+ samples[j] = env_data[indices]
360
+
361
+ targets[j] = ea_data[j]
362
+
363
+ yield samples, targets
364
+
365
+ ```
366
+
367
+ すると、以下のような出力が出ました。
368
+
369
+ ```
370
+
371
+ range(27001, 27181, 6)
372
+
373
+ range(27181, 27361, 6)
374
+
375
+ range(27361, 27541, 6)
376
+
377
+ range(27541, 27721, 6)
378
+
379
+ range(27721, 27901, 6)
380
+
381
+ ...
382
+
383
+ range(37261, 37441, 6)
384
+
385
+ range(37441, 37621, 6)
386
+
387
+ range(37621, 37801, 6)
388
+
389
+ range(27001, 27181, 6)
390
+
391
+ range(27181, 27361, 6)
392
+
393
+ ...
394
+
395
+ range(37621, 37801, 6)
396
+
397
+ range(27001, 27181, 6)
398
+
399
+ range(27181, 27361, 6)
400
+
401
+ ...
402
+
403
+ ...
404
+
405
+ range(37261, 37441, 6)
406
+
407
+ range(37441, 37621, 6)
408
+
409
+ range(37621, 37801, 6)
410
+
411
+ ```
412
+
413
+ このように、range(37621, 37801, 6)まで読み込んだ後に再びrange(27001, 27181, 6)から読み込むというループになっていました。上記の出力結果では省略しましたが、数え切れないくらい繰り返していました。初めに回したときは、同じように繰り返していましたが、終わりがrange(53821, 54001, 6)となっていました。しかし、再び回すと終わりがrange(37621, 37801, 6)となってしまい、それ以降何度回し直しても終わりがrange(37621, 37801, 6)となります。コードは変えていません。
414
+
415
+
416
+
339
417
  また、初めのコードでもそうでしたが、出力されるrangeのスタートが検証データのスタートのインデックスとなっているのですが、これで正しいのでしょうか…。
340
418
 
341
419
  ### 補足情報(FW/ツールのバージョンなど)