深入剖析调整的R2

一、R2的概念

调整的R2是多元线性回归中的一个重要指标,它反映了通过添加自变量而得到的模型拟合程度的提高。R2越高,表示模型越能够解释响应变量的方差,从而更好地预测未知数据。

调整的R2则在R2的基础上,加入了自变量个数的惩罚项,防止模型过度拟合。因此,调整的R2可以更好地衡量模型的泛化能力。

二、R2和调整的R2的计算方法

在多元线性回归模型中,R2的计算方法为:

R2 = 1 - SSE/SST

其中,SSE为残差平方和,SST为总平方和。

而调整的R2的计算方法为:

调整的R2 = 1 - (1-R2)(n-1)/(n-p-1)

其中,n为样本量,p为自变量个数。

三、影响R2和调整的R2的因素

1.自变量个数

当自变量个数增加时,R2会随之增加,因为模型可以更好地拟合训练数据。然而,调整的R2则会惩罚多余的自变量,避免模型过度拟合。因此,当自变量个数过多时,调整的R2会下降。

2.样本量

样本量越大,模型可以更充分地学习数据的特征,从而提高拟合程度。因此,随着样本量的增加,R2会增加。然而,调整的R2会进行惩罚,因此样本量对其影响不太明显。

3.特征强度

特征强度指的是自变量与因变量之间的线性关系程度。如果自变量与因变量之间的关系比较强,那么模型可以更准确地拟合数据。因此,特征强度越高,R2和调整的R2也会越高。

四、R2和调整的R2的应用场景

R2和调整的R2可以用来评估多元线性回归模型的拟合程度和预测能力。

一般来说,R2越高,模型的拟合程度越好,但需要注意过度拟合的问题。而调整的R2则可以避免过度拟合,并且能够更好地衡量模型的泛化能力。

因此,当我们需要选择最适合的自变量子集或调整模型时,可以使用调整的R2作为评价指标。同时,当我们需要对未知数据进行预测时,也可以使用R2和调整的R2来评估模型的预测能力。

五、代码示例

import numpy as np 
from sklearn.linear_model import LinearRegression 
from sklearn.metrics import r2_score 

# 构造数据
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
y = np.array([10, 20, 30, 40])

# 创建模型并进行拟合
model = LinearRegression()
model.fit(X, y)

# 计算R2和调整的R2
y_pred = model.predict(X)
r2 = r2_score(y, y_pred)
n = X.shape[0]
p = X.shape[1]
adj_r2 = 1 - (1-r2)*(n-1)/(n-p-1)

print('R2:', r2)
print('Adjusted R2:', adj_r2)

六、总结

调整的R2是多元线性回归中重要的评估指标之一,可以用于衡量模型的拟合程度和泛化能力。同时,R2和调整的R2也可以用来选择最适合的自变量子集或评估模型的预测能力。在实际应用中,需要结合实际问题和数据特征,合理选择评价指标。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/309719.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝的头像小蓝
上一篇 2025-01-04 19:31
下一篇 2025-01-04 19:31

相关推荐

  • 深入解析Vue3 defineExpose

    Vue 3在开发过程中引入了新的API `defineExpose`。在以前的版本中,我们经常使用 `$attrs` 和` $listeners` 实现父组件与子组件之间的通信,但…

    编程 2025-04-25
  • 深入理解byte转int

    一、字节与比特 在讨论byte转int之前,我们需要了解字节和比特的概念。字节是计算机存储单位的一种,通常表示8个比特(bit),即1字节=8比特。比特是计算机中最小的数据单位,是…

    编程 2025-04-25
  • 深入理解Flutter StreamBuilder

    一、什么是Flutter StreamBuilder? Flutter StreamBuilder是Flutter框架中的一个内置小部件,它可以监测数据流(Stream)中数据的变…

    编程 2025-04-25
  • 深入探讨OpenCV版本

    OpenCV是一个用于计算机视觉应用程序的开源库。它是由英特尔公司创建的,现已由Willow Garage管理。OpenCV旨在提供一个易于使用的计算机视觉和机器学习基础架构,以实…

    编程 2025-04-25
  • 深入了解scala-maven-plugin

    一、简介 Scala-maven-plugin 是一个创造和管理 Scala 项目的maven插件,它可以自动生成基本项目结构、依赖配置、Scala文件等。使用它可以使我们专注于代…

    编程 2025-04-25
  • 深入了解LaTeX的脚注(latexfootnote)

    一、基本介绍 LaTeX作为一种排版软件,具有各种各样的功能,其中脚注(footnote)是一个十分重要的功能之一。在LaTeX中,脚注是用命令latexfootnote来实现的。…

    编程 2025-04-25
  • 深入理解Python字符串r

    一、r字符串的基本概念 r字符串(raw字符串)是指在Python中,以字母r为前缀的字符串。r字符串中的反斜杠(\)不会被转义,而是被当作普通字符处理,这使得r字符串可以非常方便…

    编程 2025-04-25
  • 深入探讨冯诺依曼原理

    一、原理概述 冯诺依曼原理,又称“存储程序控制原理”,是指计算机的程序和数据都存储在同一个存储器中,并且通过一个统一的总线来传输数据。这个原理的提出,是计算机科学发展中的重大进展,…

    编程 2025-04-25
  • 深入剖析MapStruct未生成实现类问题

    一、MapStruct简介 MapStruct是一个Java bean映射器,它通过注解和代码生成来在Java bean之间转换成本类代码,实现类型安全,简单而不失灵活。 作为一个…

    编程 2025-04-25
  • 深入了解Python包

    一、包的概念 Python中一个程序就是一个模块,而一个模块可以引入另一个模块,这样就形成了包。包就是有多个模块组成的一个大模块,也可以看做是一个文件夹。包可以有效地组织代码和数据…

    编程 2025-04-25

发表回复

登录后才能评论