当前位置: 首页 > article >正文

线性回归 (Linear Regression)基础知识4

本章节主要介绍回归任务的模型性能评价

  • 回归模型的评价指标
    • 开方均方误差(Rooted Mean Squared Error,RMSE)
    • 平均绝对误差(Mean Absolute Error,MAE)
    • 绝对误差中值(Median Absolute Error,MedAE)
    • 平均平方log误差(Mean Squared Logarithmic Error,MSLE)
    • R²分数
    • 已解释的方差分数(Explained variance score)
  • sklearn中的评价模型性能的方式
    • estimator的score方法
    • Metric
    • Scoring参数
  • sklearn.metrics中的评估函数
  • Scikit-Learn中的Scoring参数
  • 线性回归模型的超参数调优
    • 超参数调优方法:
    • 特殊的交叉验证:留一交叉验证
  • BIC/AIC
  • RidgeCV
  • LassoCV

回归模型的评价指标

  以下是几种常用的误差评估指标,它们用于衡量预测值与真实值之间的差异:

开方均方误差(Rooted Mean Squared Error,RMSE)

RMSE ( y ^ , y ) = 1 N ∑ i = 1 N ( y ^ i − y i ) 2 \text{RMSE}(\hat{y}, y) = \sqrt{\frac{1}{N} \sum_{i=1}^{N} (\hat{y}_i - y_i)^2} RMSE(y^,y)=N1i=1N(y^iyi)2
  RMSE 是均方误差(MSE)的平方根,它能够衡量预测误差的标准偏差,适用于需要强调较大误差的场景。

平均绝对误差(Mean Absolute Error,MAE)

MAE ( y ^ , y ) = 1 N ∑ i = 1 N ∣ y ^ i − y i ∣ \text{MAE}(\hat{y}, y) = \frac{1}{N} \sum_{i=1}^{N} |\hat{y}_i - y_i| MAE(y^,y)=N1i=1Ny^iyi
  MAE 是预测误差绝对值的平均,它对异常值不敏感,适用于需要考虑所有误差的场景。

绝对误差中值(Median Absolute Error,MedAE)

MedAE ( y ^ , y ) = median ( ∣ y ^ 1 − y 1 ∣ , . . . , ∣ y ^ N − y N ∣ ) \text{MedAE}(\hat{y}, y) = \text{median}(|\hat{y}_1 - y_1|, ..., |\hat{y}_N - y_N|) MedAE(y^,y)=median(y^1y1,...,y^NyN)
  MedAE 是预测误差绝对值的中位数,它对异常值不敏感,适用于需要减少异常值影响的场景。

平均平方log误差(Mean Squared Logarithmic Error,MSLE)

MSLE ( y ^ , y ) = 1 N ∑ i = 1 N ( log ⁡ ( 1 + y ^ i ) − log ⁡ ( 1 + y i ) ) 2 \text{MSLE}(\hat{y}, y) = \frac{1}{N} \sum_{i=1}^{N} (\log(1 + \hat{y}_i) - \log(1 + y_i))^2 MSLE(y^,y)=N1i=1N(log(1+y^i)log(1+yi))2
  当 y y y 呈指数增长时可以使用 MSLE(如计数、一年的平均销量等),它对相对误差的惩罚更大,适用于需要强调相对误差的场景。

R²分数

  既考虑了预测值与真实值之间的差异,也考虑了问题本身真实值之间的差异(Scikit-Learn 回归模型的默认评价准则)。

  模型预测的均方误差(MSE):
S S r e s ( y ^ , y ) = 1 N ∑ i = 1 N ( y ^ i − y i ) 2 SS_{res}(\hat{y}, y) = \frac{1}{N} \sum_{i=1}^{N} (\hat{y}_i - y_i)^2 SSres(y^,y)=N1i=1N(y^iyi)2
  总平方和(Total Sum of Squares, SST):
S S t o t ( y ) = 1 N ∑ i = 1 N ( y ˉ − y i ) 2 SS_{tot}(y) = \frac{1}{N} \sum_{i=1}^{N} (\bar{y} - y_i)^2 SStot(y)=N1i=1N(yˉyi)2
  其中, y ˉ \bar{y} yˉ 是样本均值,用来做预测的MSE(不考虑输入特征的影响,最简单粗暴的预测)。

  R²分数计算公式:
R 2 ( y ^ , y ) = 1 − S S r e s ( y , y ^ ) S S t o t ( y ) R^2(\hat{y}, y) = 1 - \frac{SS_{res}(y, \hat{y})}{SS_{tot}(y)} R2(y^,y)=1SStot(y)SSres(y,y^)
  误差减少比例,R²分数越接近1,模型的预测效果越好。

已解释的方差分数(Explained variance score)

  最佳分数为1,计算公式为:
explained_variance ( y ^ , y ) = 1 − Var ( y ^ − y ) Var { y } \text{explained\_variance}(\hat{y}, y) = 1 - \frac{\text{Var}(\hat{y} - y)}{\text{Var}\{y\}} explained_variance(y^,y)=1Var{y}Var(y^y)
  当残差的均值为0时,R²分数与已解释方差分数相同。

sklearn中的评价模型性能的方式

estimator的score方法

  每个学习器都有score方法,提供一个缺省的评估方法(对于回归问题,默认使用 R 2 R^2 R2分数)。

Metric

  metrics模块实现了一些函数,用来评估预测误差。

Scoring参数

  使用交叉验证评估模型的工具有Scoring参数,它允许用户指定评估模型性能的特定指标。

sklearn.metrics中的评估函数

  以下是一些常用的评估函数,用于衡量模型预测值与真实值之间的差异:

函数名称描述
metrics.explained_variance_score(y_true, y_pred)解释方差回归评分函数,用于评估模型对数据方差的解释能力。
metrics.mean_absolute_error(y_true, y_pred)平均绝对误差回归损失,计算预测值与真实值之间绝对误差的平均值。
metrics.mean_squared_error(y_true, y_pred[, ...])均方误差回归损失,计算预测值与真实值之间误差的平方的平均值。
metrics.mean_squared_log_error(y_true, y_pred)均方对数误差回归损失,计算预测值与真实值之间对数误差的平方的平均值。
metrics.median_absolute_error(y_true, y_pred)中位数绝对误差回归损失,计算预测值与真实值之间绝对误差的中位数。

Scikit-Learn中的Scoring参数

在Scikit-Learn中,Scoring参数允许用户指定用于模型评估的指标。以下是回归任务中常用的Scoring参数及其对应的metrics函数:

回归任务中的Scoring参数对应的metrics函数
'explained_variance'metrics.explained_variance_score
'neg_mean_absolute_error'metrics.mean_absolute_error
'neg_mean_squared_error'metrics.mean_squared_error
'neg_mean_squared_log_error'metrics.mean_squared_log_error
'neg_median_absolute_error'metrics.median_absolute_error
'r2'metrics.r2_score

这些参数与metrics模块中的函数一一对应,方便用户在模型评估时选择合适的指标。

线性回归模型的超参数调优

  在线性回归模型中,超参数主要指的是正则化系数 λ \lambda λ,它控制模型的复杂度,防止过拟合。在Scikit-Learn中,不同的线性回归模型有对应的超参数调优方法:

  - 岭回归:在Scikit-Learn中的实现为RidgeCV,它通过交叉验证自动选择最佳的正则化系数。

  - Lasso:在Scikit-Learn中的实现为LassoCV,它同样通过交叉验证来确定最佳的 λ \lambda λ值。

  - 弹性网络:在Scikit-Learn中的实现为ElasticNetCV,它结合了岭回归和Lasso的优点,通过交叉验证来选择最佳的正则化参数。

超参数调优方法:

  - 交叉验证:一种评估模型泛化能力的方法,通过将数据集分成多个子集,轮流作为训练集和验证集。

  - 岭回归(RidgeCV):使用广义留一交叉验证(Leave-One-Out Cross-Validation, LOOCV)来选择最佳的正则化参数。

  - 信息准则:如贝叶斯信息准则(BIC)和赤池信息准则(AIC),这些准则可以在不需要留出验证集的情况下,通过模型选择来确定最佳的正则化参数。这种方法计算速度快,无需重复进行 K K K次交叉验证。

特殊的交叉验证:留一交叉验证

  当交叉验证的折数 K = N K = N K=N时,因为每次留出一个样本做验证集,我们称之为留一交叉验证。

  • 折数更多,计算代价越高,通常当样本数非常少时使用。

  对线性模型,可采用广义交叉验证(Generalized Cross Validation, GCV)近似留一交叉验证,极大降低交叉验证的计算量。

  • Scikit-Learn中岭回归(RidgeCV)采用GCV确定正则超参数。

   G C V ( λ ) = 1 N ∑ i = 1 N ( f ( x i ) − y i 1 − d f ( λ ) N ) 2 , d f ( λ ) = ∑ j = 1 D σ j 2 σ j 2 + λ GCV(\lambda) = \frac{1}{N} \sum_{i=1}^{N} \left(\frac{f(x_i) - y_i}{1 - \frac{df(\lambda)}{N}}\right)^2, \quad df(\lambda) = \sum_{j=1}^{D} \frac{\sigma_j^2}{\sigma_j^2 + \lambda} GCV(λ)=N1i=1N(1Ndf(λ)f(xi)yi)2,df(λ)=j=1Dσj2+λσj2

  其中 σ j 2 \sigma_j^2 σj2为矩阵 X T X X^TX XTX的特征值。

BIC/AIC

  AIC(赤池信息准则)和BIC(贝叶斯信息准则)是两种常用的模型选择准则,它们依赖于对模型自由度的正确估计:

  - AIC: A I C ( λ ) = N ln ⁡ ( R S S ( w , λ ) ) + 2 d f ( λ ) AIC(\lambda) = N \ln(RSS(w, \lambda)) + 2df(\lambda) AIC(λ)=Nln(RSS(w,λ))+2df(λ)
  - BIC: B I C ( λ ) = N ln ⁡ ( R S S ( w , λ ) ) + ln ⁡ ( N ) d f ( λ ) BIC(\lambda) = N \ln(RSS(w, \lambda)) + \ln(N)df(\lambda) BIC(λ)=Nln(RSS(w,λ))+ln(N)df(λ)

  其中, R S S ( w , λ ) RSS(w, \lambda) RSS(w,λ)是残差平方和, d f ( λ ) df(\lambda) df(λ)是模型的自由度,即参数的数量。

&# AIC/BIC的适用条件

  - 假设模型必须是正确的,并且这些准则是对大样本(渐近结果)进行推导的。
  - 当问题是欠定时(特征数大于样本数),AIC和BIC可能会失效。
在这里插入图片描述
  图中展示了使用AIC和BIC准则进行模型选择的过程,其中横轴是正则化参数 α \alpha α,纵轴是准则值。图中可以看到,随着 α \alpha α的增加,准则值先减小后增大,表明存在一个最优的 α \alpha α值,使得模型既不过拟合也不欠拟合。

RidgeCV

  RidgeCV是一种用于岭回归模型的超参数调优方法,它在一组正则参数 α \alpha α中寻找最佳的 α \alpha α值。

class sklearn.linear_model.RidgeCV(alphas=(0.1, 1.0, 10.0), fit_intercept=True, normalize=False, scoring=None, cv=None, gcv_mode=None, store_cv_values=False)

  与交叉验证(CV)有关的参数:

  • scoring:评价指标。
  • cv:交叉校验划分策略。默认是None,采用高效的留一交叉验证。
  • gcv_mode:广义留一交叉验证的模式,可选:None, 'auto', 'svd', 'eigen'
模式描述
'auto' / None n f e a t u r e s > n s a m p l e s n_{features} > n_{samples} nfeatures>nsamples X X X为稀疏矩阵时,使用'eigen';否则使用'svd'。自动选择更经济的计算方式。
'svd' X X X的SVD分解(对稀疏矩阵不适用)
'eigen' X T X X^TX XTX的特征值分解

  - store_cv_values:是否将每个 α \alpha α对应的交叉验证的值存储在属性cv_values_中。

LassoCV

  LassoCV是用于Lasso回归模型的超参数调优类,它通过交叉验证来选择最佳的正则化参数 α \alpha α

class sklearn.linear_model.LassoCV(eps=0.001, n_alphas=100, alphas=None, fit_intercept=True,
                                 normalize=False, precompute='auto', max_iter=1000, tol=0.0001,
                                 copy_X=True, cv=None, verbose=False, n_jobs=1, positive=False,
                                 random_state=None, selection='cyclic')

  与交叉验证(CV)有关的参数:

  • Lasso的alphas可以通过两种方式设置

    1. 设置参数epsn_alphas,参数alphasNone α \alpha α超过一定值后,所有回归系数为0。所以算法可以自动确定 α \alpha α的最大值 α m a x \alpha_{max} αmax,再根据参数eps的值和 α m i n / α m a x = e p s \alpha_{min} / \alpha_{max} = eps αmin/αmax=eps,确定 α \alpha α的最小值 α m i n \alpha_{min} αmin;最后在 α m i n \alpha_{min} αmin α m a x \alpha_{max} αmax区间的 log ⁡ 10 \log_{10} log10均匀取n_alphas α \alpha α
      logspace ( log ⁡ 10 ( α m a x ∗ e p s ) , log ⁡ 10 ( α m a x ) ) \text{logspace}(\log_{10}(\alpha_{max} * eps), \log_{10}(\alpha_{max})) logspace(log10(αmaxeps),log10(αmax))
    2. 同RidgeCV一样,可以人为设定alphas
  • cv:交叉校验划分策略。默认是None,表示采用3折交叉验证。


http://www.kler.cn/a/560711.html

相关文章:

  • Rust 中的 `Drop` 特性:自动化资源清理的魔法
  • Docker轻量级可视化工具Portainer
  • Qt /MFC线程同步机制之互斥锁、 信号量
  • SpringBoot之自定义简单的注解和AOP
  • Ubuntu22.04 - etcd的安装和使用
  • [Android]APP自启动
  • Linux-Ansible基础模块
  • 监控与告警系统Prometheus
  • 一.Vue中的条件渲染
  • ELK之elasticsearch基本使用教程
  • 鸿蒙NEXT开发-文件服务上传下载
  • GitHub免密操作与跨服务器通行:SSH密钥一站式配置指南
  • 从零开始玩转TensorFlow:小明的机器学习故事 5
  • 再论Spring MVC中Filter和HandlerInterceptor的优先级
  • 工具方法 - 合规性矩阵
  • 登录-10.Filter-登录校验过滤器
  • 【Python爬虫(64)】从“听”开始:Python音频爬虫与语音数据处理全解析
  • 微信小程序——访问服务器媒体文件的实现步骤
  • 考研/保研复试英语问答题库(华工建院)
  • 网络安全-Mysql注入知识点