回答編集履歴
4
ファイルを指定してテストする方法
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
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
|
-
|
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
|
-
|
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
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(
|
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
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
|