详解 Scikit-learn 的 metrics.r2_score函数:R2 得分

  • Post category:Python

sklearn.metrics.r2_score 函数是 Scikit-learn 中的一个评估回归模型性能的指标。该指标表示模型对目标变量的解释程度,可用于衡量模型的拟合度。

使用方法如下:

首先导入相关库:

from sklearn.metrics import r2_score

接着,计算模型的拟合度:

r2_score(y_true, y_pred, sample_weight=None, multioutput='uniform_average')

其中,y_true 是目标变量的真实值,y_pred 是回归器预测的值。sample_weight 是可选参数,用于给每个样本赋予特定的权重,这在非均等样本问题中很有用。multioutput 参数指定了对多输出问题的处理方式。

下面给出两个例子来说明如何使用该函数:

  1. 我们首先使用随机生成的数据,训练一个线性回归模型,并计算 R2 分数:
from sklearn.linear_model import LinearRegression
import numpy as np

# 创建随机数据
X = np.random.random((100, 1))
y = 2 * X.squeeze() + np.random.random(100)

# 训练线性回归模型
lr = LinearRegression().fit(X, y)

# 预测结果
y_pred = lr.predict(X)

# 计算 R2 分数
r2 = r2_score(y, y_pred)
print("R^2 分数为:", r2)

输出:

R^2 分数为: 0.7958570342845481

这里用 numpy 库中的 random 方法生成了 $100$ 个浮点数,然后对这些数进行一定的变换得到了目标变量 y,最终使用 LinearRegression 类训练了一个线性回归模型,然后计算了 R2 分数。

  1. 我们现在考虑多输出问题,即预测多个目标变量的情况。使用相同的方式创建数据,然后训练一个多元回归模型:
from sklearn.linear_model import LinearRegression

# 创建随机数据
X = np.random.random((100, 3))
y = np.dot(X, np.array([1, -2, 3])) + np.random.random((100,))

# 训练多元回归模型
lr = LinearRegression().fit(X, y)

# 预测多个目标变量
y_pred = lr.predict(X)

# 计算 R2 分数
r2 = r2_score(y, y_pred, multioutput='variance_weighted')
print("R^2 分数为:", r2)

multioutput 参数被设置为 variance_weighted,这是多元回归模型的一种常见做法。输出:

R^2 分数为: 0.8229666556983244

在这个例子中,我们使用三个随机数作为特征,然后生成一个实数,作为回归目标变量。使用 LinearRegression 类训练多元回归模型,然后计算 R2 分数。在这个例子中,由于我们有多个目标变量,因此需要将 multioutput 参数设置为 'variance_weighted'