回答編集履歴

5

fix link

2023/01/01 00:56

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -144,7 +144,7 @@
144
144
 
145
145
  今回コードに含まれていませんが,CSVファイルを見る限り座標が0になっている箇所は欠損値かと存じます,これらを補間する手法も多岐にわたるので調べて実装なさった方が良いでしょう.
146
146
 
147
- [Google Search - 欠損値 補間](https://www.google.com/search?q=%E6%AC%A0%E6%90%8D%E5%80%A4+%E8%A3%9C%E9%96%93&oq=%E6%AC%A0%E6%90%8D%E5%80%A4%E3%80%80%E8%A3%9C%E9%96%93)
147
+ [Google Search - 欠損値 補間](https://www.google.com/search?q=%E6%AC%A0%E6%90%8D%E5%80%A4+%E8%A3%9C%E9%96%93)
148
148
 
149
149
  また,SIGNATEには[テニスの勝敗予測をする練習問題](https://signate.jp/competitions/118/data)があるので,初手で時系列データに取り組んでわけわからないまま進めるよりは,このような単純なテーブルデータから取り組んでみても良いでしょう.少なくとも勝敗予測できなければ,時系列データなんて予測できないと思います.
150
150
 

4

append answer

2023/01/01 00:47

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -146,8 +146,11 @@
146
146
 
147
147
  [Google Search - 欠損値 補間](https://www.google.com/search?q=%E6%AC%A0%E6%90%8D%E5%80%A4+%E8%A3%9C%E9%96%93&oq=%E6%AC%A0%E6%90%8D%E5%80%A4%E3%80%80%E8%A3%9C%E9%96%93)
148
148
 
149
- また,SIGNATEには[テニスの勝敗予測をする練習問題](https://signate.jp/competitions/118/data)があるので,初手で時系列データに取り組んでわけわからないまま進めるよりは,このよう単純なテーブルデータから取り組んでみても良いでしょう.少なくともこれが予測できなければ,時系列データなんて予測できないと思います.
149
+ また,SIGNATEには[テニスの勝敗予測をする練習問題](https://signate.jp/competitions/118/data)があるので,初手で時系列データに取り組んでわけわからないまま進めるよりは,このよう単純なテーブルデータから取り組んでみても良いでしょう.少なくとも勝敗予測できなければ,時系列データなんて予測できないと思います.
150
150
 
151
151
  ## まとめ
152
152
 
153
153
  * 出力データを記す位置は,入力データとの対応関係がとれるのであればどこでも良い
154
+ * フォルダごとにクラスで分ける,行末に記す,別ファイルに記す,データベースを利用する等
155
+ * Neural Networkの利用を前提としているなら,データの前処理の知識が必要不可欠であること.Garbage In, Garbage Outである.
156
+ * 初手で独自データの解析をすると痛い目を見る(見た)

3

fix answer

2023/01/01 00:26

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -21,12 +21,15 @@
21
21
 
22
22
  > データセットを作る際出力データをどこに記せば良いのか
23
23
 
24
- 出力データを記す位置は,入力データとの対応関係がとれるのであればどこでも良いです.どんな構造であれ,最終的にモデルに与える入力データ配列`x`の`i`番目にアクセスしたときの内容は,出力データ配列`y`の`i`番目の内容を意味するよう,プログラムを組むことになります.この対応関係が取り出せれば,上のようなディレクトリ構造であっても,質問のようなCSVファイルでも大丈夫です.自分がコードを書きやすいようにCSVファイルを作ったらいいんじゃないでしょうか.
24
+ **出力データを記す位置は,入力データとの対応関係がとれるのであればどこでも良い**です.どんな構造であれ,最終的にモデルに与える入力データ配列`x`の`i`番目にアクセスしたときの内容は,出力データ配列`y`の`i`番目の内容を意味するよう,プログラムを組むことになります.この対応関係が取り出せれば,上のようなディレクトリ構造であっても,質問のようなCSVファイルでも大丈夫です.自分がコードを書きやすいようにCSVファイルを作ったらいいんじゃないでしょうか.
25
25
 
26
26
  今回の目的に応じたデータ加工の最終目標は,入力データの形状が`(100, 20, 28)`,出力データの形状が`(100, 3)`になることです.特に入力のデータ形状はLSTMが扱える形式になっています.データの`i`番目だけの単一のデータをモデルに与えた場合,次のように入出力されることが期待されます.
27
27
 
28
28
  [![](https://mermaid.ink/img/pako:eNo1jsEKgzAMhl-l5KRQYbjLKMPTdtPL3M16yGw3y6xKV0ER333RzRxC-PN9JDNUndIg4OWwr1l6ky2jGgMJY2HK88MlQXzgLD6FEkIWRQnLSGiKra_rNL9n5c_aso2ZyJ92_8hXFzhY7SwaRdfmVZDga221BEGjQveWINuFuKFX6PVVGd85EE9sPpoDDr7Lp7YC4d2gd-hikD63f2r5Av-UQOI?type=png)](https://mermaid.live/edit#pako:eNo1jsEKgzAMhl-l5KRQYbjLKMPTdtPL3M16yGw3y6xKV0ER333RzRxC-PN9JDNUndIg4OWwr1l6ky2jGgMJY2HK88MlQXzgLD6FEkIWRQnLSGiKra_rNL9n5c_aso2ZyJ92_8hXFzhY7SwaRdfmVZDga221BEGjQveWINuFuKFX6PVVGd85EE9sPpoDDr7Lp7YC4d2gd-hikD63f2r5Av-UQOI)
29
29
 
30
+ この状態を目指せるデータセットを構築するまでのことです.
31
+
32
+ ## 以下余談
30
33
  以下にコードを例示します.画像で示しているdataset.csvを`pandas.read_csv("dataset.csv")`で読み込むことが可能です.ファイルパスは適宜環境に合わせてください.
31
34
 
32
35
  [前回の質問](https://teratail.com/questions/p1sb76plr3idfk)で得られた解答にあるような,`chunksize = 20`の指定と同等の動作を,スライスを利用して実現しています.念のため,各行に割り振ったstraight, leftcross, rightcrossが20行(1データ分)の間で一致しなかった場合assertion errorを吐くようにしてあります.
@@ -144,3 +147,7 @@
144
147
  [Google Search - 欠損値 補間](https://www.google.com/search?q=%E6%AC%A0%E6%90%8D%E5%80%A4+%E8%A3%9C%E9%96%93&oq=%E6%AC%A0%E6%90%8D%E5%80%A4%E3%80%80%E8%A3%9C%E9%96%93)
145
148
 
146
149
  また,SIGNATEには[テニスの勝敗予測をする練習問題](https://signate.jp/competitions/118/data)があるので,初手で時系列データに取り組んでわけわからないまま進めるよりは,このように単純なテーブルデータから取り組んでみても良いでしょう.少なくともこれが予測できなければ,時系列データなんて予測できないと思います.
150
+
151
+ ## まとめ
152
+
153
+ * 出力データを記す位置は,入力データとの対応関係がとれるのであればどこでも良い

2

fix answer

2023/01/01 00:20

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -19,11 +19,11 @@
19
19
  ```
20
20
  例えば,SIGNATEの練習問題[株価の推移予測](https://signate.jp/competitions/409)では,最後の行にのみ,出力したいデータが挿入されています.同様に,質問にあるように各行に出力したいデータを挿入したとしても,コードを記述して機械学習で扱えるデータに変換すればよいだけのことです.ちなみに,このような一般的でないデータの場合,学習可能な形式に変換するライブラリは存在しません.ひたすら自分でコードを書くしかないです.
21
21
 
22
- > データセットを作る際正解データをどこに記せば良いのか
22
+ > データセットを作る際出力データをどこに記せば良いのか
23
23
 
24
- 出力データをす位置は,入力データとの対応関係がとれるのであればどこでも良いです.最終的にモデルに与える入力データ配列`x`の`i`番目にアクセスしたときの内容は,出力データ配列`y`の`i`番目の内容を意味するよう,プログラムを組むことになります.この対応関係が取り出せれば,上のようなディレクトリ構造であっても,質問のようなCSVファイルでも大丈夫です.自分がコードを書きやすいようにCSVファイルを作ったらいいんじゃないでしょうか.
24
+ 出力データをす位置は,入力データとの対応関係がとれるのであればどこでも良いです.どんな構造であれ,最終的にモデルに与える入力データ配列`x`の`i`番目にアクセスしたときの内容は,出力データ配列`y`の`i`番目の内容を意味するよう,プログラムを組むことになります.この対応関係が取り出せれば,上のようなディレクトリ構造であっても,質問のようなCSVファイルでも大丈夫です.自分がコードを書きやすいようにCSVファイルを作ったらいいんじゃないでしょうか.
25
25
 
26
- どんなCSVの用意の仕方であろうが,今回の目的に応じたデータ加工の最終目標は,入力データの形状が`(100, 20, 28)`,出力データの形状が`(100, 3)`になることです.特に入力のデータ形状はLSTMが扱える形式になっています.データの`i`番目だけの単一のデータをモデルに与えた場合,次のように入出力されることが期待されます.
26
+ 今回の目的に応じたデータ加工の最終目標は,入力データの形状が`(100, 20, 28)`,出力データの形状が`(100, 3)`になることです.特に入力のデータ形状はLSTMが扱える形式になっています.データの`i`番目だけの単一のデータをモデルに与えた場合,次のように入出力されることが期待されます.
27
27
 
28
28
  [![](https://mermaid.ink/img/pako:eNo1jsEKgzAMhl-l5KRQYbjLKMPTdtPL3M16yGw3y6xKV0ER333RzRxC-PN9JDNUndIg4OWwr1l6ky2jGgMJY2HK88MlQXzgLD6FEkIWRQnLSGiKra_rNL9n5c_aso2ZyJ92_8hXFzhY7SwaRdfmVZDga221BEGjQveWINuFuKFX6PVVGd85EE9sPpoDDr7Lp7YC4d2gd-hikD63f2r5Av-UQOI?type=png)](https://mermaid.live/edit#pako:eNo1jsEKgzAMhl-l5KRQYbjLKMPTdtPL3M16yGw3y6xKV0ER333RzRxC-PN9JDNUndIg4OWwr1l6ky2jGgMJY2HK88MlQXzgLD6FEkIWRQnLSGiKra_rNL9n5c_aso2ZyJ92_8hXFzhY7SwaRdfmVZDga221BEGjQveWINuFuKFX6PVVGd85EE9sPpoDDr7Lp7YC4d2gd-hikD63f2r5Av-UQOI)
29
29
 

1

fix answer

2023/01/01 00:17

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -17,15 +17,13 @@
17
17
  ├── 02.csv
18
18
  └── ...
19
19
  ```
20
- かし,質問にあるようにデータセット構築したのであれば,コードを記述して機械学習で扱えるデータに変換すればよいだけのことです.
20
+ 例えば,SIGNATEの練習問題[株価の推移予測](https://signate.jp/competitions/409)では,最後の行にのみ,出力たいデータが挿入されています.同様に,質問にあるように各行に出力したいデータを挿入したとしても,コードを記述して機械学習で扱えるデータに変換すればよいだけのことです.ちなみに,このような一般的でないデータの場合,学習可能な形式に変換するライブラリは存在しません.ひたすら自分でコードを書くしかないです.
21
21
 
22
22
  > データセットを作る際正解データをどこに記せば良いのか
23
23
 
24
- データセットは,大きく分けて2つにわけることができます.「説明変数」「目的変数」す.質問者は後者を正解データと呼れてが,機械学習おけるモデルを考えたときこれらを「入力データデータ」とり広義んで扱います
24
+ 出力データを示す位置は,入力データの対応関係がとれるのあれどこでも良.最終的にモデルに与える入力データ配列`x`の`i`番目にアクセスしたときの内容は力データ配列`y`の`i`番目の内容を意味するよう,プログラムを組むこになります.この対応関係が取りせれば,上のようなィレクトリ構造であっても,質問のようなCSVファイルでも大丈夫です.自分がコドを書きやすいCSVファイルを作ったらいいじゃないしょうか
25
25
 
26
- データセット形式は,それぞれ入力データ出力データを記録する配列インデックス一致していれば良いです.したがって配列が2つ必要で,出力データはこの片方記すことにます.入力データ配列`x`の`i`番目にアクセスしたとき内容は,出力データ配列`y``i`番目の内容を意味するよう,プログラムを組むことになります.この対応関係取り出せば,上のようなディレクトリ構造であっても,質問のようなCSVファイルでも大丈夫です.
27
-
28
- どんなデータセットの用意の仕方であろうが,今回の目的に応じたデータ加工の最終目標は,入力データの形状が`(100, 20, 28)`,出力データの形状が`(100, 3)`になることです.特に入力のデータ形状はLSTMが扱える形式になっています.データの`i`番目だけの単一のデータをモデルに与えた場合,次のように入出力されることが期待されます.
26
+ どんなCSVの用意の仕方であろうが,今回の目的に応じたデータ加工最終目標は,入力データの形状が`(100, 20, 28)`,出力データの形状`(100, 3)`になることです.特に入データ形状LSTMが扱える形式になっています.データの`i`番目だけ単一のデータをモデルに与えた場合,次のように入出力されることが期待さす.
29
27
 
30
28
  [![](https://mermaid.ink/img/pako:eNo1jsEKgzAMhl-l5KRQYbjLKMPTdtPL3M16yGw3y6xKV0ER333RzRxC-PN9JDNUndIg4OWwr1l6ky2jGgMJY2HK88MlQXzgLD6FEkIWRQnLSGiKra_rNL9n5c_aso2ZyJ92_8hXFzhY7SwaRdfmVZDga221BEGjQveWINuFuKFX6PVVGd85EE9sPpoDDr7Lp7YC4d2gd-hikD63f2r5Av-UQOI?type=png)](https://mermaid.live/edit#pako:eNo1jsEKgzAMhl-l5KRQYbjLKMPTdtPL3M16yGw3y6xKV0ER333RzRxC-PN9JDNUndIg4OWwr1l6ky2jGgMJY2HK88MlQXzgLD6FEkIWRQnLSGiKra_rNL9n5c_aso2ZyJ92_8hXFzhY7SwaRdfmVZDga221BEGjQveWINuFuKFX6PVVGd85EE9sPpoDDr7Lp7YC4d2gd-hikD63f2r5Av-UQOI)
31
29
 
@@ -34,7 +32,6 @@
34
32
  [前回の質問](https://teratail.com/questions/p1sb76plr3idfk)で得られた解答にあるような,`chunksize = 20`の指定と同等の動作を,スライスを利用して実現しています.念のため,各行に割り振ったstraight, leftcross, rightcrossが20行(1データ分)の間で一致しなかった場合assertion errorを吐くようにしてあります.
35
33
 
36
34
  ```Python
37
- from keras.utils import to_categorical
38
35
  from sklearn.preprocessing import OneHotEncoder, StandardScaler
39
36
  from sklearn.model_selection import train_test_split
40
37
 
@@ -60,9 +57,9 @@
60
57
 
61
58
  x, y = list(), list() # 入力データxと出力データyに整形する.
62
59
  for i in range(0, len(raw_data), 20):
63
- x.append(raw_data[i: i + 20, :-1]) # 最後のインデックス(-1)を求めための入力データを取得
60
+ x.append(raw_data[i: i + 20, :-1]) # 入力データを取得
64
61
  assert len(np.unique(raw_data[i: i + 20, -1])) == 1, f"wrong data format at {i} to {i+20}, {raw_data[i: i + 20]}"
65
- y.append(raw_data[i, -1])
62
+ y.append(raw_data[i, -1]) # 出力データを取得
66
63
  x = np.array(x).astype(np.float32)
67
64
  print(x.shape) # (100, 20, 28) になっているはず.100件,タイムスタンプ20点,特徴量28個を意味する
68
65