欢迎光临
我们一直在努力

线性回归评估函数score()的本质是什么呢?

逐段拆解这个 score 源码,讲清楚底层逻辑

一、整体作用

这是 sklearn 所有回归模型(LinearRegression/SGDRegressor 等)内置的 .score() 方法,专门用来计算 R2R^2R2 决定系数,衡量模型拟合效果好坏。
调用格式:模型.score(X测试特征, y真实标签)

二、函数头部定义

def score(self, X, y, sample_weight=None):

  • self:指代当前训练好的模型实例(比如你代码里的 linear_model、sgd_model)
  • X:测试集特征(就是你代码里的 x_test)
  • y:测试集真实标签(你代码里的 y_test,不是预测值 y_pred)
  • sample_weight:样本权重,默认不用传

三、文档字符串(“”" “”"里的注释,核心数学原理)

1. R2R^2R2 公式定义

R2=1−uvR^2 = 1 – \\frac{u}{v}R2=1vu

  • uuu:残差平方和 ((y真实−y预测)2).sum()((y_{真实}-y_{预测})^2).sum()((y真实y预测)2).sum(),模型预测误差总和
  • vvv:总平方和 ((y真实−y真实均值)2).sum()((y_{真实}-y_{真实均值})^2).sum()((y真实y真实均值)2).sum(),只用平均值预测的基准误差

2. 分数解读(重点)

  • 最优分数 = 1.0:模型完美预测,误差 u=0u=0u=0
  • 分数 = 0:模型效果等价于“永远预测y的平均值”,特征完全没用
  • 分数 < 0:模型比直接猜平均值还差,拟合完全失效
  • 3. 参数说明

    • X:测试样本特征集,形状 [样本数, 特征数]
    • y:对应X的真实标签,必须和X样本数量一一对应
    • sample_weight:给不同样本加权重(业务里少数重要样本加大权重时使用)

    四、核心执行代码(最关键3行)

    from .metrics import r2_score # 导入官方R²计算函数
    y_pred = self.predict(X) # 第一步:用传入的X自动生成预测值
    return r2_score(y, y_pred, sample_weight=sample_weight) # 第二步:计算R²并返回

    流程拆解

  • 拿到你传入的特征 X=x_test,调用模型自带的 predict() 算出预测值 y_pred;
  • 把真实标签y、刚算出的预测值y_pred 传给 r2_score 函数;
  • 把计算得到的 R2R^2R2 分数返回给你。
  • 五、结合你之前的代码答疑

    1. 为什么 linear_model.score(x_test,y_test) 参数没错?

    源码内部自动执行了预测,你只需要给它特征X和真实y,不用手动传y_pred。
    如果写成 score(x_test, y_pred1) 会完全算错:
    此时函数会把 y_pred1 当成「真实标签y」,把内部 predict(x_test) 的结果当成预测值,对比两组预测值,结果毫无意义。

    2. 和 mean_squared_error 的区别对照

    • mean_squared_error(y_test, y_pred1):需要你手动算出预测值,传「真实值、预测值」两个参数;
    • .score(x_test,y_test):内部自动预测,只需要传「特征、真实值」。

    3. 等价手动写法

    你下面两段代码输出结果完全一模一样:

    # 写法1:调用模型内置score(简洁)
    score1 = linear_model.score(x_test, y_test)

    # 写法2:手动复现源码逻辑(看懂底层)
    from sklearn.metrics import r2_score
    y_pred1 = linear_model.predict(x_test)
    score1 = r2_score(y_test, y_pred1)

    六、总结这段源码告诉我们3个关键结论

  • 回归模型 .score() 的本质就是计算 R2R^2R2,不是MSE、不是准确率;
  • 入参固定是 (测试特征X, 真实标签y),不能传入预测值y_pred;
  • 内部流程:接收X → 自动predict得到预测值 → 拿真实y和预测值计算R²并返回。
  • 赞(0)
    未经允许不得转载:171主机测评 » 线性回归评估函数score()的本质是什么呢?
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址