网站首页 > 技术文章 正文
本文中,我将描述用于衡量回归模型性能的不同统计回归指标。并且使用R语言,提供实际的例子-在社会经济指标的基础上预测生育率得分-用于比较两个模型的性能,以便为我们的数据选择最佳的模型。
常见评价指标概览
在回归模型中,最常见的评价指标包括。
R方 R-squared(R2),即预测变量所能解释的结果变化的比例。在多元回归模型中,R2对应于观察到的结果值和模型预测值之间的平方关系。R-squared越高,模型就越好。
均方根误差 Root Mean Squared Error(RMSE),衡量模型在预测一个观察结果时产生的平均误差。在数学上,RMSE是平均平方误差(MSE)的平方根,即观察到的实际结果值与模型预测值之间的平均平方差。因此,MSE=平均值((观察值-预测值)^2),RMSE=sqrt(MSE)。RMSE越低,模型就越好。
残差标准误差 Residual Standard Error(RSE),也被称为模型西格玛,是RMSE的一个变体,根据模型中的预测因子数量进行调整。RSE越低,模型就越好。在实践中,RMSE和RSE之间的差异非常小,特别是对于大型多变量数据。
平均绝对误差 Mean Absolute Error(MAE),与RMSE一样,MAE测量预测误差。在数学上,它是观察和预测结果之间的平均绝对差异,MAE = mean(abs(observeds - predicteds))。与RMSE相比,MAE对离群值不太敏感。
以上指标的问题在于,它们对于模型中包含额外变量的敏感性,即使这些变量在解释结果方面没有显著的贡献。换句话说,即使这些变量没有实际意义,将它们包含在模型中仍会增加 R方 并降低 RMSE。因此,我们需要更稳健的指标来指导模型选择。
关于R方,有一个经过调整的版本称为adjusted R方,它为模型中过多变量进行了调整。
此外,还有四个重要的指标 - AIC,AICc,BIC和Mallows Cp - 常用于模型评估和选择。这些指标是模型预测误差MSE的无偏估计。这些指标越低,模型越好。
AIC是(Akaike's Information Criteria)的缩写,是日本统计学家Hirotugu Akaike在1970年制定的一个指标。AIC的基本思想是惩罚将额外变量纳入模型的行为。它增加了一个惩罚,在包括额外条款时增加了误差。AIC越低,模型就越好。
AICc是AIC的另一个版本,针对小样本量进行修正。
BIC(Bayesian information criteria)是AIC的一个变种,对包括额外变量的模型有更强的惩罚。
Mallows Cp 是由Colin Mallows开发的AIC的一个变体。
加载所需的R包
tidyverse用于数据处理和可视化
modelr提供了用于计算回归模型性能指标的辅助函数
broom创建了一个包含模型统计指标的整洁的数据框架
library(tidyverse)
library(modelr)
library(broom)
实例数据
我们将使用R内置的 swiss数据集,该数据集在社会经济指标的基础上预测生育率得分。
# Load the data
data("swiss")
# Inspect the data
sample_n(swiss, 3)
建立回归模型
我们首先建立两个模型。
模型1,包括所有预测因素
模型2,包括除 "考试 "变量外的所有预测因素
model1 <- lm(Fertility ~., data = swiss)
model2 <- lm(Fertility ~. -Examination, data = swiss)
评估模型质量
有许多R函数和包用于评估模型质量,包括。
summary()函数,返回R平方、adjusted R-squared、RSE
AIC()和BIC()函数,分别计算AIC和BIC
summary(model1)
AIC(model1)
BIC(model1)
rsquare(), rmse()和mae()[函数],分别计算R2, RMSE和MAE。
library(modelr)
data.frame(
R2 = rsquare(model1, data = swiss),
RMSE = rmse(model1, data = swiss),
MAE = mae(model1, data = swiss)
)
R2(), RMSE()和MAE()[函数],分别计算R2, RMSE和MAE。
library(caret)
predictions <- model1 %>% predict(swiss)
data.frame(
R2 = R2(predictions, swiss$Fertility),
RMSE = RMSE(predictions, swiss$Fertility),
MAE = MAE(predictions, swiss$Fertility)
)
比较回归模型的性能
在这里,我们将使用函数glance()来简单比较我们两个模型的整体质量。
模型一
# Metrics for model 1
glance(model1) %>%
dplyr::select(adj.r.squared, sigma, AIC, BIC, p.value)
结果
## adj.r.squared sigma AIC BIC p.value
## 1 0.671 7.17 326 339 5.59e-10
模型2
# Metrics for model 2
glance(model2) %>%
dplyr::select(adj.r.squared, sigma, AIC, BIC, p.value)
结果
## adj.r.squared sigma AIC BIC p.value
## 1 0.671 7.17 325 336 1.72e-10
从上面的输出可以看出:
这两个模型有完全相同的调整后的R2(0.67),意味着它们在解释生育率得分结果的效果是相等的。此外,它们的残差标准误差(RSE或sigma=7.17)也相同。然而,模型2比模型1更简单,因为它包含的变量更少。在同等条件下,简单的模型在统计学上总是更好。
模型2的AIC和BIC都比模型1的低。在模型比较策略中,AIC和BIC得分最低的模型是首选。
最后,模型2的F统计量p.值低于模型1的。这意味着与模型1相比,模型2在统计上更有意义,这与上述结论一致。
请注意,RMSE和RSE的测量尺度与结果变量相同。用RSE除以结果变量的平均值就可以得到预测错误率,这个错误率应该尽可能的小。
sigma(model1)/mean(swiss$Fertility)
结果
## [1] 0.102
在我们的例子中,平均预测错误率为10%。
讨论
本章介绍了评估回归模型整体性能的几个指标。
最重要的指标是调整后的R-square、RMSE、AIC和BIC。这些指标也被用来作为模型比较和优化模型选择的基础。
请注意,这些回归指标都是内部衡量标准,即它们是在用于建立回归模型的相同数据上计算出来的。它们告诉你模型与手中的数据(称为训练数据集)的匹配程度。
一般来说,我们并不真正关心该方法在训练数据上的效果如何。相反,我们感兴趣的是,当我们将方法应用于以前未见过的测试数据时,我们获得的预测的准确性。
然而,测试数据并不总是可用的,这使得测试误差非常难以估计。在这种情况下,交叉验证(cross-validation)和自举法(bootstrap-resampling)等方法被应用于使用训练数据来估计测试误差(或预测错误率)。
猜你喜欢
- 2024-10-25 同学快来-评论区回复|构建预测模型 # #数据处理的公司
- 2024-10-25 回归or分类?线性or逻辑?它们到底有什么不同?
- 2024-10-25 慕课网Python入门学习教程价值¥499元10G教程免费分享
- 2024-10-25 最强总结,机器学习必会的评估指标
- 2024-10-25 用Python的Scikit-Learn库实现线性回归
- 2024-10-25 MLAP2-机器学习项目实战2-Python实现岭回归算法模型
- 2024-10-25 【Python机器学习系列】梯度提升集成:LGBM与XGB组合预测油耗
- 2024-10-25 机器学习常用损失函数总览——基本形式、原理及特点
- 2024-10-25 数据分析-多项式回归分析Python 多项式回归代码
- 2024-10-25 利用VAE和LSTM生成时间序列 var时间序列分析方法
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)