回答編集履歴

4

ファイルを指定してテストする方法

2022/12/05 09:00

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -238,3 +238,36 @@
238
238
  は今回の手法で発見できる4つの条件ですね.`optuna`で予測の最適化を行う例を示しました.今回自作したLinearWaveClassifierと精度とRandomForestClassifierのような複雑なモデルの精度を比較してみると学術研究的で良いでしょう.
239
239
 
240
240
  とにかく,データセットの構築から道を誤っているようでしたので,そこら辺の勉強から始められると良いかと思います.
241
+
242
+ ### モデル評価について
243
+ 自分でテストデータ`x_test`, `y_test``を作成して与える方法
244
+
245
+ ```Python
246
+ model = LinearWaveClassifier()
247
+
248
+ # 学習モデルにテストデータを与えて学習させる
249
+ model.fit(x_train, y_train)
250
+
251
+ x_test = np.array([
252
+ pd.read_csv("02.csv").values[:, :3], # 任意のcsvファイルを与えまくる
253
+ pd.read_csv("03.csv").values[:, :3],
254
+ pd.read_csv("??.csv").values[:, :3],
255
+ pd.read_csv("??.csv").values[:, :3],
256
+ ])
257
+
258
+ y_test = np.array([
259
+ [1], # 02.csvはカーブデータを計測したものであるから1
260
+ [0], # 03.csvは直進データを計測したものであるから0
261
+ [1], # ??.csvはカーブデータを計測したものであるから1
262
+ [1], # ??.csvはカーブデータを計測したものであるから1
263
+ ])
264
+
265
+ # テストデータを与えて各データの種類を推測
266
+ y_pred = model.predict(x_test)
267
+
268
+ # テストデータのラベルを与えて答え合わせ
269
+ score = accuracy_score(y_test, y_pred)
270
+ print(f"正解率:{score * 100}%")
271
+ ```
272
+
273
+ ベタ書きでファイル指定しまくることはできます.全然スマートではないですが,応急的にこのようなことは可能です.

3

fix code

2022/11/21 20:02

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -67,7 +67,7 @@
67
67
 
68
68
  def data_augmentation(_x, _y, roll): # 最小データ長に合わせてデータを増やせるだけ増やす
69
69
  x, y = list(), list()
70
- for r in range(len(_x) - roll):
70
+ for r in range(0, len(_x) - roll, 3):
71
71
  x.append(_x[r: r + roll])
72
72
  y.append(_y)
73
73
  return np.array(x), np.array(y)
@@ -80,10 +80,7 @@
80
80
  data[name].append(pd.read_csv(file).values[:, :3].flatten()) # flattenすることで無理矢理1階のテンソルにする
81
81
 
82
82
  # 最小のデータ長min_rowを導出する.
83
- min_row = 1e9
84
- for k, v in data.items():
85
- for x in v:
86
- min_row = min(min_row, x.shape[0])
83
+ min_row = min([x.shape[0] for v in data.values() for x in v])
87
84
 
88
85
  split = 2 # 最初の2ファイルは検証用データにする
89
86
  x_train, y_train, x_valid, y_valid = list(), list(), list(), list()
@@ -133,7 +130,7 @@
133
130
 
134
131
  def data_augmentation(_x, _y, roll): # データを増やす.最小データ長に合わせて増やせるだけ増やす
135
132
  x, y = list(), list()
136
- for r in range(len(_x) - roll):
133
+ for r in range(len(_x) - roll): # 1つ目のコードとの相違点であることに注意
137
134
  x.append(_x[r: r + roll])
138
135
  y.append([_y]) # 1つ目のコードとの相違点であることに注意
139
136
  return np.array(x), np.array(y)
@@ -146,10 +143,7 @@
146
143
  data[name].append(pd.read_csv(file).values[:, :3]) # flattenしない
147
144
 
148
145
  # 最小のデータ長min_rowを導出する.
149
- min_row = 1e9
150
- for k, v in data.items():
151
- for x in v:
152
- min_row = min(min_row, x.shape[0])
146
+ min_row = min([x.shape[0] for v in data.values() for x in v])
153
147
 
154
148
  split = 2 # 最初の2ファイルは検証用データにする
155
149
  x_train, y_train, x_valid, y_valid = list(), list(), list(), list()

2

restore change

2022/11/21 08:00

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -77,7 +77,7 @@
77
77
  category = {"straight": 0, "curve": 1}
78
78
  for name in category.keys():
79
79
  for i, file in enumerate(glob(f"./data/{name}/*.csv")):
80
- data[name].append(pd.read_csv(file).values[:, :3].flatten("F")) # flattenすることで無理矢理1階のテンソルにする
80
+ data[name].append(pd.read_csv(file).values[:, :3].flatten()) # flattenすることで無理矢理1階のテンソルにする
81
81
 
82
82
  # 最小のデータ長min_rowを導出する.
83
83
  min_row = 1e9

1

flatten to feature wise

2022/11/21 07:50

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -77,7 +77,7 @@
77
77
  category = {"straight": 0, "curve": 1}
78
78
  for name in category.keys():
79
79
  for i, file in enumerate(glob(f"./data/{name}/*.csv")):
80
- data[name].append(pd.read_csv(file).values[:, :3].flatten()) # flattenすることで無理矢理1階のテンソルにする
80
+ data[name].append(pd.read_csv(file).values[:, :3].flatten("F")) # flattenすることで無理矢理1階のテンソルにする
81
81
 
82
82
  # 最小のデータ長min_rowを導出する.
83
83
  min_row = 1e9