python-3.x - LSTM 为任何输入生成相同的预测
问题描述
因此,我目前正在研究与汽车速度和角度有关的机器学习算法问题,并且我正在尝试改进我的一些工作。我最近完成了一个 XGBRegressor,它对我的交叉验证数据产生了 88 - 95% 的准确率。但是,我正在尝试改进它,所以我一直在研究 LSTM 算法,因为我的数据是时间序列相关的。本质上,每个环节都包括一个转向角,前一次的转向角(x-1),之前的时间(x-2),以及当前值与前一值的差值(x - (x-1)) . 目标是预测一个值是否“异常”。例如,如果一个角度从 0.1 跳到 0.5(在 0-1 的范围内),这是不正常的。我之前的算法在分类角度是否异常方面做得很好。不幸的是,我的算法为每个输入值预测相同的值。例如,这就是给我的。
test_X = array([[[ 5.86925570e-01, 5.86426251e-01, 5.85832947e-01,
3.19300000e+03, -5.93304274e-04, -1.09262314e-03]],
[[ 5.86426251e-01, 5.85832947e-01, 5.85263908e-01,
3.19400000e+03, -5.69038950e-04, -1.16234322e-03]],
[[ 5.85832947e-01, 5.85263908e-01, 5.84801158e-01,
3.19500000e+03, -4.62749993e-04, -1.03178894e-03]],
...,
[[ 4.58070203e-01, 4.57902738e-01, 4.64613980e-01,
6.38100000e+03, 6.71124195e-03, 6.54377704e-03]],
[[ 4.57902738e-01, 4.64613980e-01, 7.31314846e-01,
6.38200000e+03, 2.66700866e-01, 2.73412108e-01]],
[[ 4.64613980e-01, 7.31314846e-01, 4.68819741e-01,
6.38300000e+03, -2.62495104e-01, 4.20576175e-03]]])
test_y = array([0, 0, 0, ..., 0, 1, 0], dtype=int64)
yhat = array([[-0.00068355],
[-0.00068355],
[-0.00068355],
...,
[-0.00068355],
[-0.00068355],
[-0.00068355]], dtype=float32)
到目前为止,我已经尝试根据我在网上阅读的一些内容更改时代和批量大小。此外,我还尝试绘制一些特征,看看算法是否出于某种原因根本不喜欢它们,但我找不到任何东西。我对机器学习并不陌生,但我对深度学习并不陌生,如果这是一个愚蠢的问题或问题,我很抱歉。如果代码如下。
data = pd.read_csv('final_angles.csv')
data.dropna(axis=0, subset=['steering_angle'], inplace=True)
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
data['steering_angle'] = scaler.fit_transform(data[['steering_angle']])
y = data.flag #Set y to the value we want to predict, the 'flag' value.
X = data.drop(['flag', 'frame_id'], axis=1)
X = concat([X.shift(2), X.shift(1), X], axis=1)
X.columns = ['angle-2', 'id2', 'angle-1', 'id1', 'steering_angle', 'id']
X = X.drop(['id2', 'id1'], axis=1)
X['diff'] = 0;
X['diff2'] = 0;
for index, row in X.iterrows():
if(index <= 1):
pass;
else:
X.loc[index, "diff"] = row['steering_angle'] - X['steering_angle'][index-1]
X.loc[index, "diff2"] = row['steering_angle'] - X['steering_angle'][index-2]
X = X.iloc[2:,];
y = y.iloc[2:,];
train_X, test_X, train_y, test_y = train_test_split(X.as_matrix(), y.as_matrix(), test_size=0.5, shuffle=False)
# reshape input to be 3D [samples, timesteps, features]
train_X = train_X.reshape((train_X.shape[0], 1, train_X.shape[1]))
test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1]))
print(train_X.shape, train_y.shape, test_X.shape, test_y.shape)
model = Sequential()
model.add(LSTM(50, input_shape=(train_X.shape[1], train_X.shape[2])))
model.add(Dense(1))
model.compile(loss='mae', optimizer='adam')
# fit network
history = model.fit(train_X, train_y, epochs=50, batch_size=150, validation_data=(test_X, test_y), verbose=2, shuffle=False)
yhat = model.predict(test_X)
而不是预测值
array([[-0.00068355],
[-0.00068355],
[-0.00068355],
...,
[-0.00068355],
[-0.00068355],
[-0.00068355]], dtype=float32)
我期待更多类似的东西
array([-0.00065207, -0.00065207, -0.00065207, 1.0082773 , 0.01269123,
0.01873571, -0.00065207, -0.00065207, 0.99916965, 0.002684 ,
-0.00018287, -0.00065207, -0.00065207, -0.00065207, -0.00065207,
1.0021645 , 0.00654274, 0.01044858, -0.0002622 , -0.0002622 ],
dtype=float32)
它来自前面提到的 XGBRegressor 测试。
任何帮助表示赞赏,如果需要更多代码/信息,请告诉我。
编辑:打印声明的结果
Train on 3190 samples, validate on 3191 samples
Epoch 1/50
- 5s - loss: 0.4268 - val_loss: 0.2820
Epoch 2/50
- 0s - loss: 0.2053 - val_loss: 0.1256
Epoch 3/50
- 0s - loss: 0.1442 - val_loss: 0.1256
Epoch 4/50
- 0s - loss: 0.1276 - val_loss: 0.1198
Epoch 5/50
- 0s - loss: 0.1256 - val_loss: 0.1179
Epoch 6/50
- 0s - loss: 0.1250 - val_loss: 0.1188
Epoch 7/50
- 0s - loss: 0.1258 - val_loss: 0.1183
Epoch 8/50
- 1s - loss: 0.1258 - val_loss: 0.1199
Epoch 9/50
- 0s - loss: 0.1256 - val_loss: 0.1179
Epoch 10/50
- 0s - loss: 0.1255 - val_loss: 0.1192
Epoch 11/50
- 0s - loss: 0.1247 - val_loss: 0.1180
Epoch 12/50
- 0s - loss: 0.1254 - val_loss: 0.1185
Epoch 13/50
- 0s - loss: 0.1252 - val_loss: 0.1176
Epoch 14/50
- 0s - loss: 0.1258 - val_loss: 0.1197
Epoch 15/50
- 0s - loss: 0.1251 - val_loss: 0.1175
Epoch 16/50
- 0s - loss: 0.1253 - val_loss: 0.1176
Epoch 17/50
- 0s - loss: 0.1247 - val_loss: 0.1183
Epoch 18/50
- 0s - loss: 0.1249 - val_loss: 0.1178
Epoch 19/50
- 0s - loss: 0.1253 - val_loss: 0.1178
Epoch 20/50
- 0s - loss: 0.1253 - val_loss: 0.1181
Epoch 21/50
- 0s - loss: 0.1245 - val_loss: 0.1192
Epoch 22/50
- 0s - loss: 0.1250 - val_loss: 0.1187
Epoch 23/50
- 0s - loss: 0.1244 - val_loss: 0.1184
Epoch 24/50
- 0s - loss: 0.1252 - val_loss: 0.1188
Epoch 25/50
- 0s - loss: 0.1253 - val_loss: 0.1197
Epoch 26/50
- 0s - loss: 0.1253 - val_loss: 0.1192
Epoch 27/50
- 0s - loss: 0.1267 - val_loss: 0.1177
Epoch 28/50
- 0s - loss: 0.1256 - val_loss: 0.1182
Epoch 29/50
- 0s - loss: 0.1247 - val_loss: 0.1178
Epoch 30/50
- 0s - loss: 0.1249 - val_loss: 0.1183
Epoch 31/50
- 0s - loss: 0.1259 - val_loss: 0.1189
Epoch 32/50
- 0s - loss: 0.1258 - val_loss: 0.1187
Epoch 33/50
- 0s - loss: 0.1248 - val_loss: 0.1179
Epoch 34/50
- 0s - loss: 0.1259 - val_loss: 0.1203
Epoch 35/50
- 0s - loss: 0.1252 - val_loss: 0.1190
Epoch 36/50
- 0s - loss: 0.1260 - val_loss: 0.1192
Epoch 37/50
- 0s - loss: 0.1249 - val_loss: 0.1183
Epoch 38/50
- 0s - loss: 0.1249 - val_loss: 0.1187
Epoch 39/50
- 0s - loss: 0.1252 - val_loss: 0.1185
Epoch 40/50
- 0s - loss: 0.1246 - val_loss: 0.1183
Epoch 41/50
- 0s - loss: 0.1247 - val_loss: 0.1179
Epoch 42/50
- 0s - loss: 0.1242 - val_loss: 0.1194
Epoch 43/50
- 0s - loss: 0.1255 - val_loss: 0.1187
Epoch 44/50
- 0s - loss: 0.1244 - val_loss: 0.1176
Epoch 45/50
- 0s - loss: 0.1248 - val_loss: 0.1183
Epoch 46/50
- 0s - loss: 0.1257 - val_loss: 0.1179
Epoch 47/50
- 0s - loss: 0.1248 - val_loss: 0.1177
Epoch 48/50
- 0s - loss: 0.1247 - val_loss: 0.1194
Epoch 49/50
- 0s - loss: 0.1248 - val_loss: 0.1181
Epoch 50/50
- 0s - loss: 0.1245 - val_loss: 0.1182
解决方案
推荐阅读
- java - 如果 2 TextView 在 ConstraintLayout 中有长文本,如何缩小第一个 TextView 而不是第二个?
- actions-on-google - 如何将 Google Assistant Action 迁移到 SDK 和平台的 V3?
- javascript - 如何在 vue.js 中导入 ipcRenderer?__dirname 未定义
- javascript - 即使在冒泡阶段,Mousedown 事件也会改变子元素的颜色
- python - 日志模块无法加载好的配置
- azure - 用于 blobstorage 帐户的操作 Azure CDN 配置
- c++ - 使用工厂函数创建 std::shared_ptr
- python - 如何在每个带有类名的标签之后插入新元素?
- python - 将图像保存到 csv 文件,然后从 csv 文件中读取
- snowflake-schema - 我需要查找上个月开票金额大于 0 且当月未开票的用户数