我【机器学习】衡量线性回归算法最好的指标:R Squared

2025-11-01 03:17:30

衡量线性回归算法最好的指标:R Squared

一、摘要

[二、回归算法评价指标与R Squared指标介绍](#二、回归算法评价指标与R Squared指标介绍)

[三、R Squared的编程实践](#三、R Squared的编程实践)

一、摘要

本文主要介绍了线性回归算法中用于衡量模型优劣的重要指标------R Squared(R方)。R方用于比较模型预测结果与实际结果的拟合程度,其值范围在0到1之间,越接近1表示模型预测效果越好。R方的计算涉及预测误差与总误差的比较,其中分子 为预测误差的平方和,分母 为总误差的平方和。当R方等于1时,表示模型预测无误差;小于零则表明模型效果不佳,可能不适合线性回归。 此外,还介绍了如何通过编程实践计算R方值,并在不同的机器学习库中实现该指标的计算。最后,强调了R方作为衡量线性回归模型性能的关键指标的重要性。

二、回归算法评价指标与R Squared指标介绍

之前的博文中介绍了评价回归算法优劣的三个指标:MSE(均方误差)、RMSE(均方根误差)和MAE(平均绝对误差)。这些指标存在的问题 :无法直接比较不同问题的预测误差。分类问题的评价指标简单明了,取值在0到1之间,而回归算法的指标没有这样的性质。

R Squared(R方) 是一个解决上述问题的新指标。

计算方法 :1减去两个量的比值,分子是残差平方和,分母是总平方和。

R方计算步骤:计算残差平方和与总平方和,代入公式计算R方值。

残差平方和:预测结果减去 真实值的平方和。

总平方和:真实值与均值差 的平方和。

R Squared的优势:

R方将回归问题的衡量结果归约到0到1之间,便于比较不同模型的性能。

R方越大越好,越接近1表示模型预测越准确。

R方小于零表示模型预测效果不如基准模型。

可能意味着数据间不存在线性关系,需要考虑其他回归方法。

R Squared的统计意义:

R方可以表示为1减去均方误差(MSE)与方差的比值。

均方误差:预测结果与真实值的平方差均值。

方差:真实值的方差。

R方衡量模型与基准模型的差异,值越大表示模型预测越准确。

最后这张图将公式的含义是 :1 - (MSE(均方误差)/ Var(方差)

三、R Squared的编程实践

计算R方的编程实践:使用NumPy、SciPy或sklearn等库进行计算。

示例代码:计算简单线性回归模型的R方值。

python

复制代码

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'

)

# 这里只用RM这个特征来计算,提取RM列特征数据

boston_datas = X.iloc[:,5]

# 分布在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)

# 预测结果

y_predict = reg1.predict(X_test)

# scikit-learn来计算均方误差和绝对值误差

from sklearn.metrics import mean_squared_error

from sklearn.metrics import mean_absolute_error

# 根据公式先计算分子: MSE 均方误差

n_mse = mean_squared_error(y_pred=y_predict,y_true=y_test)

# 根据公式先计算分母: 测试集的方差

d_var = np.var(y_test)

# 带入公式,得到R Squared值

ret_pred = 1 - n_mse / d_var

ret_pred

执行结果:0.6129316803937324