Python 如何使用RMSE和MAE性能度量比较随机林(无缩放)和LSTM(有缩放)

Python 如何使用RMSE和MAE性能度量比较随机林(无缩放)和LSTM(有缩放),python,machine-learning,scikit-learn,lstm,random-forest,Python,Machine Learning,Scikit Learn,Lstm,Random Forest,我不熟悉机器学习,并尝试使用随机森林、简单线性回归和NN(LSTM)等多种模型进行比特币价格预测 据我所知,随机林和线性回归不需要输入特征缩放,而LSTM需要输入特征缩放 如果我们比较两种算法的MAE和RMSE(有缩放和无缩放),结果肯定会不同,我无法比较哪个模型的性能更好 我现在应该如何比较这些模型的性能 更新-添加我的代码 资料 最小最大定标器 从sklearn.preprocessing导入MinMaxScaler scaler=MinMaxScaler(功能范围=(0,1)) scal

我不熟悉机器学习,并尝试使用随机森林、简单线性回归和NN(LSTM)等多种模型进行比特币价格预测

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

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

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


更新-添加我的代码

资料

最小最大定标器

从sklearn.preprocessing导入MinMaxScaler
scaler=MinMaxScaler(功能范围=(0,1))
scaler1=MinMaxScaler(特征值范围=(0,1))
x_序列=缩放器。拟合变换(x_序列)
y_列=缩放1.拟合变换(y_列)
x_测试=缩放变换(x_测试)
y_测试=缩放1.变换(y_测试)
均方误差计算

从数学导入sqrt
从sklearn.metrics导入r2_分数
从sklearn.metrics导入平均绝对误差
打印(“均方根误差(RMSE):”,sqrt(均方根误差(y检验,preds)))
打印(“平均绝对误差(MAE):”,平均绝对误差(y检验,preds))
r2=r2_分数(y_测试,preds)
打印(“R平方(R2):”,R2)

您可以缩放输入数据,而不是输出。 输入数据与错误计算无关

如果您确实想缩放lstm输出数据,只需对其他分类器使用相同的方式进行缩放即可

编辑:

根据您的意见:


我只在LSTM中缩放输入数据

不,你没有。您需要转换输出数据。从我读到的,我假设你只把它转换成神经网络

因此,lstm的y数据约为-->平方误差的100倍,因此得到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的逆变换(pred)方法,并使用逆变换预测和未转换的y_测试数据计算误差。

当我应用fit()时,我只在LSTM中缩放输入数据(使用sci工具包Min-Max scaler),并计算y_pred值,我使用sqrt(均方误差(y_测试,preds))计算RMSE。LSTM的值为0.000959,而Random Forest(无任何输入数据缩放)的RMSE为3.7267。那么我说你的LSTM大约是你的Random Forest的10.000倍,直到你发布分类器的代码、你如何计算RMSE以及一些数据的x/y示例。我编辑了我的答案,我的假设是正确的,你只为神经网络缩放数据吗?谢谢Florian。我没有看到我对输出数据进行的缩放。请将输入数据作为数据而不是图像共享@ItamarMushkin:我已经以数据帧的形式更新了输入数据
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']]
scaler1 = MinMaxScaler(feature_range=(0, 1))

y_train = scaler1.fit_transform(y_train)

y_test = scaler1.transform(y_test)