回归评价指标MSE、RMSE、MAE、R-Squared

前言

分类问题的评价指标是准确率,那么回归算法的评价指标就是MSE,RMSE,MAE、R-Squared。下面一一介绍

均方误差(MSE)

MSE (Mean Squared Error)叫做均方误差。看公式
image.png
这里的y是测试集上的。

用 真实值-预测值 然后平方之后求和平均。

猛着看一下这个公式是不是觉得眼熟,这不就是线性回归的损失函数嘛!!! 对,在线性回归的时候我们的目的就是让这个损失函数最小。那么模型做出来了,我们把损失函数丢到测试集上去看看损失值不就好了嘛。简单直观暴力!

均方根误差(RMSE)

RMSE(Root Mean Squard Error)均方根误差。
image.png
这不就是MSE开个根号么。有意义么?其实实质是一样的。只不过用于数据更好的描述。
例如:要做房价预测,每平方是万元(真贵),我们预测结果也是万元。那么差值的平方单位应该是 千万级别的。那我们不太好描述自己做的模型效果。怎么说呢?我们的模型误差是 多少千万?。。。。。。于是干脆就开个根号就好了。我们误差的结果就跟我们数据是一个级别的可,在描述模型的时候就说,我们模型的误差是多少万元。

MAE

MAE(平均绝对误差)
image.png
不用解释了吧。

R Squared

上面的几种衡量标准针对不同的模型会有不同的值。比如说预测房价 那么误差单位就是万元。数子可能是3,4,5之类的。那么预测身高就可能是0.1,0.6之类的。没有什么可读性,到底多少才算好呢?不知道,那要根据模型的应用场景来。
看看分类算法的衡量标准就是正确率,而正确率又在0~1之间,最高百分之百。最低0。如果是负数,则考虑非线性相关。很直观,而且不同模型一样的。那么线性回归有没有这样的衡量标准呢?答案是有的。
那就是R Squared也就R方
image.png
光看这些东西很懵逼,其中分子是Residual Sum of Squares 分母是 Total Sum of Squares
那就看公式吧
image.png

懵逼(X2)

慢慢解释。其实这个很简单。
上面分子就是我们训练出的模型预测的所有误差。
下面分母就是不管什么我们猜的结果就是y的平均数。(瞎猜的误差)

那结果就来了。
如果结果是0,就说明我们的模型跟瞎猜差不多。
如果结果是1。就说明我们模型无错误。
如果结果是0-1之间的数,就是我们模型的好坏程度。
如果结果是负数。说明我们的模型还不如瞎猜。(其实导致这种情况说明我们的数据其实没有啥线性关系)

化简上面的公式
分子分母同时除以m
image.png
那么分子就变成了我们的均方误差MSE,下面分母就变成了方差。
image.png

代码部分

具体模型代码就不给了。只说这个几种衡量标准的原始代码。

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

1- mean_squared_error(y_test,y_preditc)/ np.var(y_test)

scikit-learn中的各种衡量指标

from sklearn.metrics import mean_squared_error #均方误差
from sklearn.metrics import mean_absolute_error #平方绝对误差
from sklearn.metrics import r2_score#R square
#调用
mean_squared_error(y_test,y_predict)
mean_absolute_error(y_test,y_predict)
r2_score(y_test,y_predict)
<think>嗯,我现在需要帮用户解决如何使用多元线性回归对Boston房价数据集进行预测,并计算MSERMSEMAE和R-Squared这些评估指标的问题。首先,我得回忆一下多元线性回归的基本步骤,以及如何用Python实现。然后,还需要了解这些评价指标的计算方法。 首先,多元线性回归应该是用多个特征来预测房价,所以可能需要用到像sklearn中的LinearRegression模型。用户提到的Boston房价数据集应该是sklearn内置的那个,可以直接导入。接下来,数据预处理部分可能需要分割数据集为训练集和测试集,可能还需要标准化,不过线性回归本身对特征的缩放敏感吗?其实,是否标准化可能不影响模型性能,但可能会影响梯度下降的收敛速度,不过如果是用普通的最小二乘法,可能不需要。但为了统一量纲,可能还是需要标准化处理。不过用户可能只需要基础的实现,所以可能先不做标准化,直接使用原始数据? 然后是模型训练,用训练集数据拟合模型。接着用测试集进行预测,得到预测值后,计算各个指标MSE是均方误差,就是预测值和真实值差的平方的均值。RMSE就是MSE的平方根。MAE是平均绝对误差,即差的绝对值的平均。R平方则是解释方差分数,表示模型对数据变动的解释程度。 接下来,我需要考虑如何用sklearn中的函数来计算这些指标。例如,MSE可以用mean_squared_error,MAE用mean_absolute_error,R平方用r2_score。这些函数都在sklearn.metrics里面。那用户可能需要在代码中导入这些函数,然后应用在测试集的真实值和预测值上。 可能还需要注意数据分割的比例,通常是70-30或者80-20,不过sklearn的train_test_split默认是75-25。用户可能只需要基本的分割,所以用默认参数即可。 然后,代码的结构大致是:导入数据集,分割数据,训练模型,预测,计算指标。可能需要展示完整的代码示例,包括导入库、加载数据、处理数据、建模、评估的步骤。 另外,用户可能对各个指标的解释和应用场景有疑问,比如为什么需要这些不同的指标,它们各自的意义是什么。例如,MSERMSE会放大较大误差的影响,而MAE对所有误差一视同仁。R平方则提供了一个相对性的指标,越接近1越好。 还需要注意,在Boston数据集中,特征可能有不同的量纲,是否需要标准化处理?比如,如果某些特征的数值范围很大,可能会影响线性回归的系数,但如果不使用正则化,普通线性回归可能不需要标准化,因为系数本身会调整。不过这个问题用户可能没有提到,所以暂时先按照不标准化处理。 检查一下引用的内容是否正确。引用中提到MSE常用于线性回归的损失函数,而R-Squared作为评价指标。这些都需要在回答中正确引用。例如,引用[2]说明MSE用于线性回归的损失函数,引用[4]和[5]说明R-Squared的作用。 最后,生成相关问题的时候,可能需要包括这些指标的区别、如何改进模型、特征选择的影响,以及正则化方法的应用等。比如,如何选择不同的评价指标,或者如何通过交叉验证来评估模型稳定性。 现在,整理这些思路,写出步骤清晰的回答,并确保代码正确,解释清楚每个步骤的作用,以及各个指标的计算方法和意义。同时,正确引用提供的参考文献,特别是在解释MSE和R-Squared的时候。</think>### 分步实现多元线性回归评价指标计算 #### 1. **数据准备与分割** 首先加载Boston房价数据集,将特征数据($X$)和目标变量($y$)分割为训练集和测试集。 ```python from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split # 加载数据集 boston = load_boston() X = boston.data # 特征矩阵 y = boston.target # 目标变量 # 分割数据集(默认训练集:测试集 = 75%:25%) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) ``` #### 2. **训练多元线性回归模型** 使用`sklearn`的`LinearRegression`拟合训练数据。 $$ \text{模型形式: } y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta_n x_n $$ ```python from sklearn.linear_model import LinearRegression # 创建模型并训练 model = LinearRegression() model.fit(X_train, y_train) ``` #### 3. **预测与指标计算** 对测试集进行预测,并计算MSERMSEMAE和R-Squared- **MSE**: $$ \text{MSE} = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2 $$ - **RMSE**: $$ \text{RMSE} = \sqrt{\text{MSE}} $$ - **MAE**: $$ \text{MAE} = \frac{1}{n} \sum_{i=1}^n |y_i - \hat{y}_i| $$ - **R-Squared**: $$ R^2 = 1 - \frac{\sum_{i=1}^n (y_i - \hat{y}_i)^2}{\sum_{i=1}^n (y_i - \bar{y})^2} $$ ```python from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score # 预测测试集 y_pred = model.predict(X_test) # 计算指标 mse = mean_squared_error(y_test, y_pred) rmse = mse ** 0.5 mae = mean_absolute_error(y_test, y_pred) r2 = r2_score(y_test, y_pred) print(f"MSE: {mse:.2f}") print(f"RMSE: {rmse:.2f}") print(f"MAE: {mae:.2f}") print(f"R-Squared: {r2:.2f}") ``` #### 4. **结果解释** - **MSE**和**RMSE**反映预测值与真实值的偏差,RMSE与目标变量量纲一致[^2][^3]。 - **MAE**对异常值不敏感,直接衡量平均误差- **R-Squared**表示模型对目标变量变动的解释能力,越接近1越好[^4][^5]。 --- ### 完整代码示例 ```python from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score # 加载数据 boston = load_boston() X, y = boston.data, boston.target # 分割数据集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 训练模型 model = LinearRegression() model.fit(X_train, y_train) # 预测与评估 y_pred = model.predict(X_test) print(f"MSE: {mean_squared_error(y_test, y_pred):.2f}") print(f"RMSE: {mean_squared_error(y_test, y_pred)**0.5:.2f}") print(f"MAE: {mean_absolute_error(y_test, y_pred):.2f}") print(f"R-Squared: {r2_score(y_test, y_pred):.2f}") ``` --- ###
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值