【问题标题】:How to Compare Random Forest (without scaling) and LSTM (with scaling) using RMSE and MAE Performance metrices如何使用 RMSE 和 MAE 性能指标比较随机森林(无缩放)和 LSTM(有缩放)
【发布时间】:2019-09-16 09:25:25
【问题描述】:

我是机器学习的新手,并尝试使用多种模型(如随机森林、简单线性回归和 NN(LSTM))进行比特币价格预测。

据我所知,随机森林和线性回归不需要输入特征缩放,而 LSTM 确实需要缩放输入特征。

如果我们比较两种算法的 MAE 和 RMSE(有缩放和没有缩放),结果肯定会不同,我无法比较哪个模型的性能更好。

我现在应该如何比较这些模型的性能?


更新 - 添加我的代码

数据

bitcoinData = pd.DataFrame([[('2013-04-01 00:07:00'),93.25,93.30,93.30,93.25,93.300000], [('2013-04-01 00:08:00'),100.00,100.00,100.00,100.00,93.300000], [('2013-04-01 00:09:00'),93.30,93.30,93.30,93.30,33.676862]], columns=['time','open', 'close', 'high','low','volume'])
bitcoinData.time = pd.to_datetime(bitcoinData.time)
bitcoinData = bitcoinData.set_index(['time'])
x_train = train_data[['high','low','open','volume']]
y_train = train_data[['close']]
x_test = test_data[['high','low','open','volume']]
y_test = test_data[['close']]

最小-最大缩放器

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))
scaler1 = MinMaxScaler(feature_range=(0, 1))
x_train = scaler.fit_transform(x_train)
y_train = scaler1.fit_transform(y_train)
x_test = scaler.transform(x_test)
y_test = scaler1.transform(y_test)

MSE 计算

from math import sqrt
from sklearn.metrics import r2_score
from sklearn.metrics import mean_absolute_error
print("Root Mean Squared Error(RMSE) : ", sqrt(mean_squared_error(y_test,preds)))
print("Mean Absolute Error(MAE) : ", mean_absolute_error(y_test,preds))
r2 =  r2_score(y_test, preds)
print("R Squared (R2) : ",r2)

【问题讨论】:

标签: python machine-learning scikit-learn lstm random-forest


【解决方案1】:

您缩放输入数据,而不是输出。 输入数据与您的误差计算无关。

如果您真的想扩展您的 lstm 输出数据,只需对其他分类器进行相同的扩展即可。

编辑:

来自您的评论:

我只在 LSTM 中缩放了我的输入数据

不,你没有。您确实转换了输出数据。从我读到的内容,我假设你只为神经网络转换它。

所以你的 lstm 的 y 数据大约小 100 倍 --> squared_error 所以你得到 100*100 = 10.000,这大致是你的神经网络比随机森林表现“更好”的因素。

选项 1:

删除那些树线:

scaler1 = MinMaxScaler(feature_range=(0, 1))

y_train = scaler1.fit_transform(y_train)

y_test = scaler1.transform(y_test)

不要忘记使用可以将值输出到 + 无穷大的最后一层

选项 2:

也为其他分类器缩放数据并比较缩放值。

选项 3:

对您的预测使用 MinMaxScaler 的 inverse_transform(pred) 方法,并使用 inverse_transformed 预测和未转换的 y_test 数据计算您的误差。

【讨论】:

  • 我只在 LSTM 中缩放了我的输入数据(使用 sci-kit Min-Max scaler)当我应用 fit() 并计算 y_pred 值时,我使用 sqrt(mean_squared_error(y_test,preds)) 到计算 RMSE。 LSTM 给出的值为 0.000959,而随机森林(没有任何输入数据缩放)给出的 RMSE 为 3.7267。
  • 然后我说你的 lstm 比你的随机森林好大约 10.000 倍,直到你发布分类器的代码、如何计算 RMSE 和一些 x/y 数据示例。跨度>
  • 我编辑了我的答案,我是否认为您只为神经网络缩放数据?
  • 谢谢弗洛里安。我没有看到我对输出数据所做的缩放。
猜你喜欢
  • 2019-12-06
  • 2014-11-01
  • 2021-04-17
  • 2022-01-16
  • 2016-01-24
  • 2020-06-26
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多