【机器学习】衡量线性回归算法的指标:MSE、RMSE、MAE
衡量线性回归算法的指标:MSE、RMSE、MAE
- 一、摘要
- 二、回归算法的评价指标
- 三、以波士顿房价数据集为例进行测试
- 五、RMSE与MAE的比较
一、摘要
本文主要讲述了如何评价线性回归算法的模型质量。文中详细介绍了如何使用均方误差(MSE)和平均绝对误差(MAE)等指标来衡量模型的好坏,以及如何使用波士顿房价数据集进行实际应用。通过这些实际应用的例子,可以更好地理解如何评价线性回归算法的模型质量。此外,文中还介绍了如何将数据集分割为训练集和测试集,并使用训练集训练模型,然后使用测试集进行预测,以评估模型的预测准确性。
二、回归算法的评价指标
-
回归算法的评价指标包括均方误差(MSE)、均方根误差(RMSE)和平均绝对误差(MAE)。
-
均方误差(MSE)
是预测值
与真实值
之差的平方和除以样本数。 -
均方根误差(RMSE)
是均方误差的平方根,量纲与数据一致。 -
平均绝对误差(MAE)
是预测值与真实值之差的绝对值和除以样本数。
三、以波士顿房价数据集为例进行测试
- 波士顿房价数据集包含506个样本和13个特征,用于预测房产价格。
- 只取出其中的房间数量(RM)特征进行简单线性回归。
- 数据预处理包括删除最大值限制的点,确保数据的真实性。
- 在较新的 scikit - learn 版本中,波士顿房价数据集已被弃用(从 scikit - learn 1.2 版本开始),不再推荐使用,主要原因是该数据集存在种族歧视相关的属性,违反了道德和公平性原则。不过你仍然可以通过以下方式获取到该数据集:
-
安装pandas-datareader openml
pip install pandas-datareader openml
-
引入波士顿房价数据集
import openml import numpy as np # 从 openml 获取波士顿房价数据集 dataset = openml.datasets.get_dataset(531) X, y, categorical_indicator, attribute_names = dataset.get_data( target=dataset.default_target_attribute, dataset_format='dataframe' ) print(X.shape)
执行结果:(506, 13)
打印X的内容:
-
我们这里只用RM这个特征来计算,提取RM列数据:
boston_datas = X.iloc[:,5] boston_datas.shape
执行结果:(506,)
-
利用该数据集绘制出该数据集的散点图:
import matplotlib.pyplot as plt # 绘制图查看 plt.scatter(boston_datas,y) plt.show()
执行结果:
-
分布在50那里的一些点,可能不是真实的点,比如问卷调查中通过会设置一些上限点,而往往这些不是真实存在的额点,因此可以去除:
# 分布在50那里的一些点,可能不是真实的点,比如问卷调查中通过会设置一些上限点,而往往这些不是真实存在的额点,因此可以去除 y_normal = y[y < 50.0] x_normal = boston_datas[y < 50.0]
-
再重新绘制,查看效果:
-
对波士顿房价数据集进行拆分成训练集和测试集
import sys # 替换为你的 PyCharm 工程实际路径 project_path = 'D:/PycharmProjects/pythonProject/' if project_path not in sys.path: sys.path.append(project_path) from model_selection import train_test_split X_train,y_train,X_test,y_test = train_test_split(np.array(x_normal),np.array(y_normal),seed=666) # 引入我们自己的线性回归算法 from SimpleLinearRegressionDemo import SimpleLinearRegressionModel reg1 = SimpleLinearRegressionModel() reg1.fit(X_train,y_train) # 绘制出我们自己的模型折线图在散点图中的位置 # 绘制将模型绘制出来 plt.scatter(X_train,y_train) plt.plot(X_train,reg1.predict(X_train),color="r") plt.show()
执行结果:
-
计算出预测值:
y_predict = reg1.predict(X_test) # 预测结果
-
计算MSE值:
# 计算mse mse_test = np.sum((y_predict - y_test)**2) / len(y_test) mse_test
执行结果:24.156602134387427
-
计算RMSE值:
from math import sqrt rmse_test = sqrt(mse_test) rmse_test
执行结果:
-
计算MAE值:
# 计算mae mae_test = np.sum(np.absolute(y_predict - y_test)) / len(y_test) mae_test
执行结果:
-
五、RMSE与MAE的比较
- RMSE和MAE的量纲一致,但RMSE值较大,因为它放大了较大的差距。
- RMSE优化的是最大的误差值,使其尽可能小。