本次分享几个容易混淆的量,分别为: 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
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值。
=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值 参看模型参数
=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值 参看模型参数
和 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 表现在图像上,均方根误差与时间窗的曲线呈下降趋势。
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}
np.arange(0, 1, 0.002) y = norm.rvs(0, size=500, scale=0.1) y = y + x**2 ''''' 均方误差根 ''' def rmse (y_test, y_true) / rmse(y_mean, y_true) plt.scatter(x, y, s=5) degree = [1,2,100] y_test = 做回归分析,常用的误差主要有均方误差根(RMSE)和R-平方(R2)。 RMSE是预测值与真实值的误差平方根的均值。这种度量方法很流行(Netflix机器学习比赛的评价方法),是一种定量的权衡方法。 而R22函数的实现来自Conway的著作《机器学习使用案例解析》,不同在于他用的是2个RMSE的比值来计算R2。 我们看到多项式次数为1的时候,虽然拟合的不太好,R2也能达到0.82。 ] rmse=0.10, R2=0.90, R22=0.69, clf.score=0.90 ... rmse=0.21, R2=0.57, R22=0.34, clf.score=0.57 仅仅只是缺少了最后