如何使用RMSE和MAE性能指标比较随机森林(无缩放)和LSTM(有缩放)

时间:2019-09-16 09:25:25

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

我是机器学习的新手,并尝试使用多种模型(例如随机森林,简单线性回归和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)

1 个答案:

答案 0 :(得分: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数据计算错误。