本次分享几个容易混淆的量,分别为: RMS:均方根值 RMSE: 均方根误差 Standard Deviation: 标准差 ---- 下面给出三个量的表达公式: 均方根值 X rms +X_{N}^{2}} {N}} ---- 均方根误差 RMSE=∑ n i=1 (X obs,i −X model,i ) 2 n − − − − − − − − − − − − − − − − − − − √ RMSE = \sqrt{\frac{\sum_{i=1}^{n} (X_{obs,i} - X_{model,i})^{2}}{n}} 公式理解: 它是观测值与真值偏差的平方和观测次数
print("MSE = ", sum(squaredError) / len(squaredError))#均方误差MSE from math import sqrt print("RMSE = ", sqrt(sum(squaredError) / len(squaredError)))#均方根误差RMSE print("MAE = ", sum(absError) / len(absError
分类问题的评价指标是准确率,那么回归算法的评价指标就是MSE,RMSE,MAE、R-Squared。 MSE和MAE适用于误差相对明显的时候,大的误差也有比较高的权重,RMSE则是针对误差不是很明显的时候;MAE是一个线性的指标,所有个体差异在平均值上均等加权,所以它更加凸显出异常值,相比MSE; RMSLE : 主要针对数据集中有一个特别大的异常值,这种情况下,data会被skew,RMSE会被明显拉大,这时候就需要先对数据log下,再求RMSE,这个过程就是RMSLE。 对低估值(under-predicted)的判罚明显多于估值过高(over-predicted)的情况(RMSE则相反) 1、MSE(Mean Squared Error)均方误差 用 真实值-预测值 如果预测结果为1400, 那么RMSE=400, RMSLE=0.336 可以看出来在均方根误差相同的情况下,预测值比真实值小这种情况的错误比较大,即对于预测值小这种情况惩罚较大。
均方根误差(RMSE) RMSE(Root Mean Squard Error)均方根误差。 ? 这不就是MSE开个根号么。有意义么?其实实质是一样的。只不过用于数据更好的描述。 y_preditc=reg.predict(x_test) #reg是训练好的模型 mse_test=np.sum((y_preditc-y_test)**2)/len(y_test) #跟数学公式一样的 RMSE rmse_test=mse_test ** 0.5 MAE mae_test=np.sum(np.absolute(y_preditc-y_test))/len(y_test) R Squared
因此针对此问题一个简单的改进方式就是使用RMSE均方根误差。 RMSE均方根误差 其实改进方法很简单,只需要将MSE均方误差开根号即可,这样得到的误差结果就和样本中y的量纲是一致的了。 ? 其实MSE和RMSE本质上是一样的,只是对于量纲敏感的任务上,使用RMSE得到的误差背后的意义更加的明显。 MAE平均绝对值误差 ? 在sklearn中调用同样非常简单,但是在sklearn中没有RMSE的衡量标准,当然了只需要对MSE开根号就能得到RMSE。 ? RMSE vs MAE ? 首先这两个衡量标准的量纲是一致的,前面我们看到在实验中,RMSE的结果要比MAE的结果大一些,这是因为RMSE是将错误值进行了平方,将这些平方累加后在进行开根号的运算。 ,哪个最大的错误值相应的比较小,我们在训练模型时候使用的目标函数就是使用RMSE中根号里面没有除以m的那一部分,这一部分其实和优化RMSE本质是一样的,当然在训练的时候使用的是训练集而不是测试集。
给出一套标准的流程,对于检验小白非常友好 以下内容会讲解 如何生成一个符合meteva格式的测试数据 如何合并观测与自行生成的测试数据 如何基于以上合并的数据绘制回归散点图 如何基于以上合并的数据绘制RMSE 分布 温馨提示 由于可视化代码过长隐藏,可点击以下链接运行Fork查看 【meteva】如何优雅使用观测与预报绘制散点回归和RMSE 若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏 title=None, **kwargs) In [58]: mpd.plot(sta_merge,mem.scatter_regress,show = True,dpi = 600) 绘制OB和EC的RMSE 分布 In [60]: help(mpd.rmse_scatter) Help on function rmse_scatter in module meteva.product.program.error_ana_scatter : rmse_scatter(sta_ob_and_fos, s=None, g=None, gll=None, group_name_list=None, save_dir=None, save_path
=mean((model$fitted-model$x)^2) 设置alpha参数为0.5 alpha <- 0.5 设置alpha参数为0.7 找出最小的RMSE值 min(RMSE1,RMSE2 ,RMSE3) [1] 0.2712489 因此 采用alpha为0.5 , 然后使用二次平滑指数预测的算法来预测短期之内,不受季节因素影响的空载率。 参看模型参数 预测数值 预测图像 地区:四牌楼 which.min(c(RMSE1,RMSE2,RMSE3)) ## [1] 3 ###从结果看出当alpaha为0.7的时候 渠道最小的RMSE 参看模型参数 地区:玄武湖公园 #############################找出最小的RMSE值 min(RMSE1,RMSE2,RMSE3) ## [1] 0.01964692 which.min(c(RMSE1,RMSE2,RMSE3)) ## [1] 1 ###从结果看出当alpaha为0.3的时候 渠道最小的RMSE值 参看模型参数
=mean((model$fitted-model$x)^2) 设置alpha参数为0.5 alpha <- 0.5 设置alpha参数为0.7 找出最小的RMSE值 min(RMSE1,RMSE2 参看模型参数 预测数值 预测图像 01 02 03 04 地区:四牌楼 which.min(c(RMSE1,RMSE2,RMSE3)) ## [1] 3 ###从结果看出当alpaha为0.7的时候 渠道最小的RMSE值 因此 采用alpha为0.7 ,然后使用二次平滑指数预测的算法来预测短期之内,不受季节因素影响的空载率。 参看模型参数 地区:玄武湖公园 #############################找出最小的RMSE值 min(RMSE1,RMSE2,RMSE3) ## [1] 0.01964692 which.min(c(RMSE1,RMSE2,RMSE3)) ## [1] 1 ###从结果看出当alpaha为0.3的时候 渠道最小的RMSE值 参看模型参数
Rmse: 0.782449675843 step: 1960 Rmse: 0.782449675842 step: 1961 Rmse: 0.782449675842 step: 1962 Rmse: 0.782449675842 step: 1963 Rmse: 0.782449675841 step: 1964 Rmse: 0.782449675841 step: 1965 Rmse: 0.78244967584 step: 1966 Rmse: 0.78244967584 step: 1967 Rmse: 0.78244967584 step: 1968 Rmse: 0.782449675839 step: 1969 Rmse: 0.782449675839 step: 1970 Rmse: 0.782449675839 step: 1998 Rmse: 0.78244967583 step: 1999 Rmse: 0.78244967583 step: 2000 Rmse: 0.78244967583
Train-rmse=11.1984634005885 [4] Train-rmse=10.2645236892904 [5] Train-rmse=9.49711005504284 [6] Train-rmse [10] Train-rmse=8.96870685004475 [11] Train-rmse=8.93113287361574 [12] Train-rmse=8.89937257821847 [ Train-rmse=8.71651926303267 [20] Train-rmse=8.69457600919277 [21] Train-rmse=8.67354928674563 [22] Train-rmse ] Train-rmse=8.52802114610432 [30] Train-rmse=8.5119504512622 [31] Train-rmse=8.49624261719241 [32] Train-rmse Train-rmse=8.30475363906755 [46] Train-rmse=8.29264031506106 [47] Train-rmse=8.28069372820073 [48] Train-rmse
rmse_val.append(error) #store rmse values print('RMSE value for k= ' , K , 'is:', error) 输出: RMSE value for k = 1 is: 1579.8352322344945 RMSE value for k = 2 is: 1362.7748806138618 RMSE value for RMSE value for k = 11 is: 1229.540283771085 RMSE value for k = 12 is: 1239.1504407152086 RMSE value RMSE value for k = 18 is: 1265.5133661294733 RMSE value for k = 19 is: 1269.619416217394 RMSE value 正如我们所讨论的,当k=1时,我们得到一个非常高的RMSE值。RMSE值随着k值的增加而减小。在k= 7时,RMSE约为1219.06,并进一步增加k值。
和 MAE 一样,RMSE 没有考虑到实际值的大小范围。我们同样可以定义一个 RMSE%,如下: ? 很明显,RMSE 把更大的注意力放在最大的误差值上,而 MAE 给每个误差值相同的权重。你可以自己尝试降低某个误差值,会发现对 RMSE 几乎不会产生影响。 接下来你会看到关于 RMSE 更有趣的特性。 RMSE 的预测实例 刚刚我们介绍了每个性能评估指标的定义(bias、MAPE、MAE、RMSE),但还不清楚它们使用在模型上的差异。 你可以略过这部分,直接跳到 RMSE 和 MAE 的结论部分。 1、RMSE 首先来看 RMSE: ? 实际上,我们可以用它的简化版,即 MSE: ? 你甚至可以同时选择 RMSE 和 MAE。 下面我们花点时间,来讨论选择 RMSE 或 MAE 对偏差值、异常值灵敏度以及无规律序列的影响。
以下是读取Excel数据并计算各种预测方法的MSE、RMSE和MAE的代码: ```python import pandas as pd import numpy as np # 读取Excel数据 }:") print(f" MSE: {metrics['MSE']}") print(f" RMSE: {metrics['RMSE']}") print(f" MAE: "]) print(f"最佳预测方法:{best_method}") ``` 这段代码首先读取Excel文件中的数据,然后计算每种预测方法的MSE、RMSE和MAE。 最后,它会输出每种方法的评估结果,并根据RMSE值找到最佳预测方法。你可以将Excel文件路径替换为你的文件路径,并运行此代码以查看结果。 ']]) print(f"{方法}:") print(f" MSE: {指标['MSE']}") print(f" RMSE: {指标['RMSE']}") print
(y_test, test_predictions)) # 输出训练集和测试集的 RMSE print(f"RMSE on Training Data: {train_rmse}") print(f"RMSE (y_test, test_predictions)) # 输出训练集和测试集的 RMSE print(f"RMSE on Training Data: {train_rmse}") print(f"RMSE (y_test, test_predictions)) # 输出训练集和测试集的 RMSE print(f"RMSE on Training Data: {train_rmse}") print(f"RMSE 模型性能(RMSE) 标签编码模型: 训练集 RMSE: 662.99 测试集 RMSE: 663.88 独热编码模型: 训练集 RMSE: 315.70 测试集 RMSE: 316.62 Training Data: 41.04 RMSE on Test Data: 112.49 观察: 从 RMSE(均方根误差)来看,训练数据的RMSE和测试数据的RMSE非常接近,几乎没有变化(分别为
初期使用Surprise库实现的基线模型在测试集上达到了0.92的RMSE,但我们相信通过精细的超参数调优可以进一步提升推荐质量。传统的手动网格搜索不仅耗时,而且容易错过最优参数组合。 '], cv=5, verbose=True)print(f"基线RMSE: {baseline_results['test_rmse'].mean():.4f}")3. = accuracy.rmse(predictions, verbose=False) return rmse# 创建Optuna研究study = optuna.create_study '], cv=3, verbose=False) current_rmse = cv_results['test_rmse'].mean() # 报告中间结果 评估指标选择:除了RMSE,后续实验考虑加入多样性、新颖性等推荐系统特有指标进行多目标优化。
rmse_val.append(error) #store rmse values print('RMSE value for k= ' , K , 'is:', error) 输出 : RMSE value for k = 1 is: 1579.8352322344945 RMSE value for k = 2 is: 1362.7748806138618 RMSE value RMSE value for k = 11 is: 1229.540283771085 RMSE value for k = 12 is: 1239.1504407152086 RMSE value RMSE value for k = 18 is: 1265.5133661294733 RMSE value for k = 19 is: 1269.619416217394 RMSE value 如我们所讨论的,当我们使k = 1时,我们得到非常高的RMSE值。 随着我们增加k值,RMSE值减小。 在k = 7时,RMSE约为1219.06,并且随着k值的进一步增加而增加。
RMSE: %.4f' % test_rmse) ? 'Test RMSE: %.4f' % test_rmse1) ? 'Test RMSE: %.4f' % test_rmse2) ? 'Test RMSE: %.4f' % test_rmse3) ? 'Test RMSE: %.4f' % test_rmse5)?
Years=1, RMSE: 1997.732 Years=2, RMSE: 1914.911 Years=3, RMSE: 1803.630 Years=4, RMSE: 2099.481 Years Years=1, RMSE: 606.089 Years=2, RMSE: 557.653 Years=3, RMSE: 555.777 Years=4, RMSE: 544.251 Years=5, RMSE: 540.317 Years=6, RMSE: 554.660 Years=7, RMSE: 569.032 Years=8, RMSE: 581.405 Years=9, RMSE: 602.279 Years=1, RMSE: 5.950 Years=2, RMSE: 5.083 Years=3, RMSE: 4.664 Years=4, RMSE: 4.539 Years=5, RMSE: 4.448 Years=6, RMSE: 4.358 Years=7, RMSE: 4.371 Years=8, RMSE: 4.271 表现在图像上,均方根误差与时间窗的曲线呈下降趋势。
%f, avg valid rmse %f'%(k, train_l, valid_l)) ? 在这里插入图片描述 flod 0, train rmse 0.239874, valid rmse 0.221404 flod 1, train rmse 0.229332, valid rmse 0.269407 flod 2, train rmse 0.232131, valid rmse 0.238519 flod 3, train rmse 0.238633, valid rmse 0.218897 flod 4, train rmse 0.231179, valid rmse 0.258849 5-fold validation: avg train rmse 0.234230, avg valid rmse 在这里插入图片描述 train rmse 0.229618 上述代码执⾏完之后会⽣成⼀个submission.csv⽂件。这个⽂件是符合Kaggle⽐赛要求的提交格式的。
hat{y}\mid MSE 1n∑ni=1⟮y−y^⟯21n∑i=1n⟮y−y^⟯2\frac{1}{n}\sum_{i=1}^n{\lgroup{y}-\hat{y}\rgroup}^2 MSE==RMSE2MSE ==RMSE2{MSE} == {RMSE}^2 RMSE 1n∑ni=1⟮y−y^⟯2−−−−−−−−−−−−−√1n∑i=1n⟮y−y^⟯2\sqrt{\frac{1}{n}\sum_{i=1}^n {\lgroup{y}-\hat{y}\rgroup}^2} RMSE==MSE−−−−−√RMSE==MSE{RMSE} == \sqrt{MSE}