【Sklearn驯化-回归指标】一文搞懂机器学习中回归算法评估指标:mae、rmse等
本次修炼方法请往下查看
🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地!
🎇 免费获取相关内容文档关注:微信公众号,发送 pandas 即可获取
🎇 相关内容视频讲解 B站
🎓 博主简介:AI算法驯化师,混迹多个大厂搜索、推荐、广告、数据分析、数据挖掘岗位 个人申请专利40+,熟练掌握机器、深度学习等各类应用算法原理和项目实战经验。
🔧 技术专长: 在机器学习、搜索、广告、推荐、CV、NLP、多模态、数据分析等算法相关领域有丰富的项目实战经验。已累计为求职、科研、学习等需求提供近千次有偿|无偿定制化服务,助力多位小伙伴在学习、求职、工作上少走弯路、提高效率,近一年好评率100% 。
📝 博客风采: 积极分享关于机器学习、深度学习、数据分析、NLP、PyTorch、Python、Linux、工作、项目总结相关的实用内容。
🌵文章目录🌵
- 🎯 1. 基本介绍
- 💡 2. 指标介绍
- 2.1 MAE:平均绝对误差
- 2.2 MSE:均方误差
- 2.2 RMSE:均方误差
- 2.3 MAPE:平均绝对百分比误差
- 2.4 SMAPE:平均绝对百分比误差
- 2.5 WMAPE:加权的百分比误差
- 2.6 决定系数(R-squared, R²)
- 🔍 3. 代码实践
- 3.1 导入库和准备数据
- 3.2 训练回归模型
- 3.2 指标计算
- 🔍 4. 注意事项
- 🔍 5. 总结
下滑查看解决方法
🎯 1. 基本介绍
回归分析是统计学中用于估计变量之间关系的一种方法。在机器学习中,回归模型用于预测连续的输出值。scikit-learn(简称sklearn)提供了多种回归指标来评估模型的预测性能。
💡 2. 指标介绍
2.1 MAE:平均绝对误差
mae是回归模型中常用的评估指标之一。它用于衡量模型预测结果与真实值之间的平均绝对差异程度,即平均预测误差的绝对值。计算MAE的公式如下:
L = 1 m ∑ i = 1 m ∣ y i − y ^ i ∣ L=\frac{1}{m}\sum_{i=1}^{m}|y_i - \hat{y}_i| L=m1i=1∑m∣yi−y^i∣
MAE的值越小,表示模型的预测能力越好。它具有对异常值不敏感的特点,适用于对预测结果的平均误差情况进行评估。在sklearn中,可以使用mean_absolute_error函数来计算MAE。
2.2 MSE:均方误差
它用于衡量模型预测结果与真实值之间的均方差,即平均预测误差的平方
L = 1 m ∑ i = 1 m ( y i − y ^ ) 2 L=\frac{1}{m}\sum_{i=1}^{m}(y_i - \hat{y})^2 L=m1i=1∑m(yi−y^)2
该方法会放大预测值偏大的,对异常值比较敏感,MSE的值越小,表示模型的预测能力越好。它在某些情况下比均绝对误差(MAE)更敏感,因为它对预测值与真实值之间的较大误差进行了平方处理。但是MSE的值的量纲是原始数据平方,可能不易于直观理解。
2.2 RMSE:均方误差
均方根误差是MSE的平方根,它与原始数据具有相同的单位。
L = 1 m ∑ i = 1 m ( y i − y ^ ) 2 L=\sqrt{\frac{1}{m}\sum_{i=1}^{m}(y_i - \hat{y})^2} L=m1i=1∑m(yi−y^)2
因为使用的是平均误差,而平均误差对异常点较敏感,如果回归器对某个点的回归值很不合理,那么它的误差则比较大,从而会对RMSE的值有较大影响,即平均值是非鲁棒的。
2.3 MAPE:平均绝对百分比误差
L = 1 n ∑ i = 1 m ∣ y i − y ^ i y i ∣ L=\frac{1}{n}\sum_{i=1}^{m}|\frac{y_i-\hat{y}_i}{y_i}| L=n1i=1∑m∣yiyi−y^i∣
评价的是相对于真实值的误差比例,但是有一个问题就是,如果真实值为0的话,该评价指标无效
如果预测值小于真实值(低估),如果大于(高估)
低估: 此时, 即上界为100;
高估: 此时, 即上界为无穷大.
由于高估会带来较大惩罚, 为了最小化MAPE值, 算法会倾向低估, 从而导致预测的销量偏低.
2.4 SMAPE:平均绝对百分比误差
该方法可以处理掉真实值为0的情况,但是如果预测值也为0的话就会有问题
L = 1 n ∑ i = 1 m ∣ y i − y ^ i ∣ ∣ y i ∣ + ∣ y i ^ ∣ L=\frac{1}{n}\sum_{i=1}^{m}\frac{|y_i-\hat{y}_i|}{|y_i|+|\hat{y_i}|} L=n1i=1∑m∣yi∣+∣yi^∣∣yi−y^i∣
在实际的销量预测中, 由于销量的上界通常是有限的(通过经验可以预估), 因而即使出现"高估"的情形, 预测销量一般不会超过实际销量的常数倍(例如不超过10倍). 从这个角度来看, 高估时误差的上界一般低于低估时对应的上界. 换句话说, 低估带来的惩罚比高估大. 因此如果使用SMAPE作为误差指标, 其预测销量一般会高于实际销量.
2.5 WMAPE:加权的百分比误差
该方法的好处就是可以处理mape这个问题:例如一件卖了10件的商品预测值在5-15之间和卖了5000件的商品预测在4955-5005的贡献的mape是一样的,但显然两个预测的准确度差异巨大。该方法给销量的商品更大的权重。
L = ∑ n ∣ y i − y ^ i ∣ ∑ n y i L=\frac{\sum_{n}|y_i - \hat{y}_i|}{\sum_{n}y_i} L=∑nyi∑n∣yi−y^i∣
2.6 决定系数(R-squared, R²)
决定系数衡量模型捕捉数据可变性的程度。具体的公式如下所示:
r 2 = ∑ i = 1 n ( y i − y i ′ ) 2 ∑ i = 1 n ( y i − y 平均 ) 2 r^2=\frac{\sum_{i=1}^{n}(y_i-y'_i)^2}{\sum_{i=1}^{n}(y_i-y平均)^2} r2=∑i=1n(yi−y平均)2∑i=1n(yi−yi′)2
🔍 3. 代码实践
3.1 导入库和准备数据
下面我们对相关的公式进行构造数据,并通过代码对其进行实践操作,具体的代码如下所示:
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_regression# 生成模拟回归数据
X, y = make_regression(n_samples=100, n_features=1, noise=0.4, random_state=42)# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
3.2 训练回归模型
为了能够更加清晰的看出来各个指标的效果,我们训练一个回归模型然后来看各个指标之间的差异性,具体的代码如下所示:
# 创建线性回归模型并训练
model = LinearRegression()
model.fit(X_train, y_train)# 在测试集上进行预测
y_pred = model.predict(X_test)
3.2 指标计算
下面我们根据预测和真实值之间的差异性来计算回归模型的指标,具体的代码如下所示:
# 计算MSE和RMSE
mse = mean_squared_error(y_test, y_pred)
rmse = mse ** 0.5print(f"均方误差: {mse:.2f}")
print(f"均方根误差: {rmse:.2f}")# 计算R-squared
r2 = r2_score(y_test, y_pred)
print(f"决定系数: {r2:.2f}")
🔍 4. 注意事项
- 回归指标的选择应基于模型的目标和数据的特性。
- MSE和RMSE对异常值敏感,如果数据中包含异常值,可能需要考虑使用其他指标。
- R-squared虽然直观,但增加变量时可能会产生误导,考虑使用调整R-squared。
🔍 5. 总结
回归指标是评估回归模型预测性能的重要工具。scikit-learn提供了多种指标,包括MSE、RMSE和R-squared,帮助我们量化模型的准确性和有效性。通过本博客的代码示例,我们学习了这些指标的计算方法和实际应用。希望这篇博客能够帮助你更好地理解sklearn中的回归指标,并将其应用于实际的回归分析中。