线性回归——相关数学概念详解
1、前言定义
yiy_iyi  代表第i个真实值
yˉ\bar{y}yˉ  代表真实值的平均值
yi^\hat{y_i}yi^ 代表第i个预测值
2、总平方和(Total Sum of Squares, SST)
总平方和(Total Sum of Squares, SST): 这是最“朴素”的模型的误差。这个朴素模型不考虑任何特征,直接用目标变量的平均值 yˉ\bar{y}yˉ 作为所有样本的预测值。SST 衡量了目标变量自身整体的波动程度。
SST=∑i=1n(yi−yˉ)2{SST} = \sum_{i=1}^{n}(y_i - \bar{y})^2SST=i=1∑n(yi−yˉ)2
3、残差平方和(Residual Sum of Squares, SSR 或 RSS)
残差平方和(Residual Sum of Squares, SSR 或 RSS): 这是我们线性回归模型的误差。它是每个样本的真实值 yiy_iyi 与模型预测值 yi^\hat{y_i}yi^ 之差的平方和。SSR 衡量了模型未能解释的波动部分。
SSR=∑i=1n(yi−yi^)2{SSR} = \sum_{i=1}^{n}(y_i - \hat{y_i})^2SSR=i=1∑n(yi−yi^)2
(yi^\hat{y_i}yi^ -yˉ\bar{y}yˉ )代表残差
4、解释平方和(Explained Sum of Squares, SSE)
解释平方和(Explained Sum of Squares, SSE): 这是模型解释的波动部分,即预测值 yi^\hat{y_i}yi^ 与平均值 yˉ\bar{y}yˉ 之差的平方和。
SSE=∑i=1n(yi^−yˉ)2{SSE} = \sum_{i=1}^{n}(\hat{y_i} - \bar{y})^2SSE=i=1∑n(yi^−yˉ)2
5、MSE(均方误差,Mean Squared Error)
对残差平方和求取平均值就是均方误差,即可用于训练集也可以用于测试集,公式如下:
MSE=1m∑i=1m(yi−y^i)2MSE = \frac{1}{m}\sum_{i=1}^{m}(y_i - \hat{y}_i)^2MSE=m1i=1∑m(yi−y^i)2
- MSE用于训练集
 用于训练集,此时模型的权重集还未知,要找到一组参数 (β0,β1,...,βn)(\beta_0, \beta_1, ..., \beta_n)(β0,β1,...,βn),使得 MSE 损失函数的值最小,来得到一个模型。
 得到模型之后再对训练集的预测值和真实值做MSE计算,一定是最小的
- MSE用于测试集
 用于测试集,此时模型已经求解完成,可以获取测试集对应的预测值和准确值,进而求取测试集的均方误差。MSE用于测试集主要是用来判断模型的好坏,MSE越小,代表模型越好
6、决定系数(R-squared) R² 
R2=1−(SSR/SST)R² = 1 - (SSR / SST)R2=1−(SSR/SST)
R² 既可以用作训练集,也可以用作测试集,
- R² 用作训练集
 R² 用作训练集无意义,因为对于训练集SST是一个常数,而SSR本身就是用训练集的数据求取出来的最小值,所以R² 用作训练集无意义
- R² 用作测试集
 R²用作测试集,是用于评估回归模型性能的一个核心指标。
 它的核心思想是:与一个最简单的“基线模型”相比,我们的回归模型将误差降低了多少比例。
 这个“基线模型”是什么? 它是一个非常“笨”的模型,它永远用目标变量 y的平均值 y_mean来作为预测值,不考虑任何特征。
 R² 的含义: 我们的模型通过引入特征,将预测误差降低到了基线模型误差的百分之多少。
 因此,R² 衡量的是模型对目标变量波动的解释能力。
R² 的取值范围看起来是 (-∞, 1],但通常我们这样解读:
| R² 值 | 解释 | 
|---|---|
| R² = 1 | 完美模型。 模型完美拟合了所有数据点,残差为0(SSR=0)。这在实际中几乎不可能出现,如果出现,很可能是数据泄露或过拟合。 | 
| R² 接近 1 | 模型优秀。 例如 R²=0.9,意味着模型解释了目标变量90%的方差。说明模型拟合效果好。 | 
| R² > 0 | 模型优于基线模型。 即使 R²=0.3,也意味着你的模型比简单地使用平均值来预测要好,它解释了30%的方差。 | 
| R² = 0 | 模型等同于基线模型。 你的模型的预测效果和直接猜测 y_mean一样差。说明特征可能完全没有提供有用的信息。 | 
| R² < 0 | 模型比基线模型还差。 这是一个警告信号!意味着你的模型拟合得极其糟糕,甚至不如直接使用平均值来预测。 | 
重要提示: R² 为负通常发生在两种情况下:
- 你在测试集上评估模型,但模型在测试集上的表现非常差(模型没有泛化能力)。
- 你没有使用带截距项的线性回归模型(例如设置了 fit_intercept=False),而数据本身并不通过原点。此时,比较的基线就不再是y_mean,计算逻辑会出问题。
