【Python・机器学习】多元回归模型(原理及代码)

前言

自学笔记,分享给语言学/语言教育学方向的,但对语言数据处理感兴趣但是尚未入门,却需要在论文中用到的小伙伴,欢迎大佬们补充或绕道。ps:本文最少限度涉及公式讲解(文科生小白友好体质)~(部分讲解会参考知乎等平台)

本文重点:多元回归模型的建立以及在实际语言学数据的处理

1.多元回归分析的基本原理

2.应用条件

3.数据实例以及Python代码

4.结果分析


1.多元回归分析的基本原理

  多元线性回归用于估计两个或多个自变量一个因变量之间的线性关系。

其基本思想是,因变量可以表示为自变量的线性组合,加上一个随机误差项。通过最小二乘法估计回归系数,建立回归方程,可以用于预测和解释变量间的关系。

  1. 左侧蓝色框代表多个自变量(X₁, X₂, X₃, ...)
  2. 右侧橙色框代表因变量(Y)
  3. 连接线上的β₁、β₂、β₃表示回归系数,表示各个自变量对因变量的影响程度
  4. 底部的回归方程:Y = β₀ + β₁X₁ + β₂X₂ + β₃X₃ + ... + ε
    • β₀ 是截距
    • β₁, β₂, β₃ 等是回归系数
    • ε 是误差项

这种关系表明:

  • 每个自变量都可能对因变量产生影响
  • 影响程度由回归系数β的大小决定
  • 所有自变量的影响是综合的、同时存在的
  • 模型中包含误差项(ε),表示存在其他未知或未计入的影响因素

2.应用条件

  • 线性关系:因变量与自变量之间存在线性关系。可通过【散点图】初步判断。
  • 误差项正态性:随机误差项服从均值为0的正态分布。
  • 误差项独立性:随机误差项之间相互独立。
  • 方差齐性:不同自变量水平下,因变量的方差相等。
  • 自变量间无多重共线性:自变量之间不存在精确的线性关系。 

3.数据实例以及Python代码

下面以一个语言教育学的数据为例,探讨多元回归分析的应用。

该数据包含了影响英语成绩的几个因素:学习时间词汇量语法能力阅读理解能力得分。希望建立一个回归模型预测英语成绩

数据实例如下(随机生成)
序号学习时间
(小时/周)
词汇量
(个)
语法能力
(分)
阅读理解
(分)
英语成绩
(分)
17.49188483.9466.2173.87
28.77227392.2272.7786.1
38.91173185.5167.3777.47
49.41215871.5373.8278.53
57.99202382.6669.1177.18
..................
1.导入必要的包和库
# 导入必要的库
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score, mean_squared_error
import matplotlib.pyplot as plt
2.数据准备(以下数据随机生成,自己有数据的情况下直接读取即可,读取方法在后面) 
# 生成模拟数据
np.random.seed(42)  # 设置随机种子,确保结果可重现
n_students = 100    # 生成100名学生的数据

# 生成自变量数据
study_time = np.random.normal(8, 2, n_students)  # 学习时间
vocabulary = np.random.normal(2000, 500, n_students)  # 词汇量
grammar_score = np.random.normal(75, 15, n_students)  # 语法能力
reading_score = np.random.normal(70, 10, n_students)  # 阅读理解

#创建因变量(英语成绩)
english_score = (0.3 * study_time + 
                0.25 * vocabulary/100 + 
                0.25 * grammar_score + 
                0.2 * reading_score + 
                np.random.normal(0, 5, n_students))

# 创建数据框
data = pd.DataFrame({
    '学习时间': study_time,
    '词汇量': vocabulary,
    '语法能力': grammar_score,
    '阅读理解': reading_score,
    '英语成绩': english_score
})

# 查看数据统计信息
print(data.describe())

 输出结果:

# 相关性分析
correlation_matrix = data.corr()
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', center=0)
plt.title('变量相关性热力图')
plt.tight_layout()
plt.show()
3.回归模型建立
# 准备建模数据(如果是从excel/csv文件读取的话需要替换相应的变量名,读取方法参考最后)
X = data[['学习时间', '词汇量', '语法能力', '阅读理解']]
y = data['英语成绩']

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 建立并训练模型
model = LinearRegression()
model.fit(X_train, y_train)

这部分将数据划分为训练集和测试集,并使用线性回归建立模型。 

4.模型评估
# 打印模型系数
print("\n回归系数:")
for feature, coef in zip(X.columns, model.coef_):
    print(f"{feature}: {coef:.4f}")
print(f"截距: {model.intercept_:.4f}")

# 模型评估
y_pred = model.predict(X_test)
r2 = r2_score(y_test, y_pred)
mse = mean_squared_error(y_test, y_pred)
print(f"\n模型评估:")
print(f"R² 分数: {r2:.4f}")
print(f"均方误差: {mse:.4f}")

这部分展示了每个变量的回归系数,以及模型的R²值和均方误差。  

 输出结果:

 

5.预测示例 
# 预测示例
example_student = pd.DataFrame({
    '学习时间': [10],
    '词汇量': [2500],
    '语法能力': [85],
    '阅读理解': [80]
})
predicted_score = model.predict(example_student)
print(f"\n示例预测:")
print(f"对于学习时间为10小时/周、词汇量2500词、语法85分、阅读理解80分的学生:")
print(f"预测英语成绩为: {predicted_score[0]:.2f}")

 

6.可视化预测结果
# 可视化预测结果
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred, alpha=0.5)
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'r--', lw=2)
plt.xlabel('Actual Score')
plt.ylabel('Predicted Score')
plt.title('Predicted vs Actual Scores')
plt.tight_layout()
plt.show()

 

▷从excel 或者csv文件中读取数据的情况
# 读取Excel文件(路径按需修改)
excel_data = read_excel_file("language_education.xlsx")

# 读取CSV文件(路径按需修改)
csv_data = read_csv_file("language_education.csv")


# 读取自变量/因变量(以excel文件为例)
X, y = read_variables_by_names(
    "language_education.xlsx",
    dependent_var='英语成绩',
    independent_vars=['词汇量', '语法能力', '阅读理解']
)


#之后代码相通,记得修改变量名即可


完整代码如下: 
# 导入必要的库
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score, mean_squared_error
import matplotlib.pyplot as plt


# 生成模拟数据
np.random.seed(42)  # 设置随机种子,确保结果可重现

# 生成100名学生的数据
n_students = 100

# 生成自变量数据
study_time = np.random.normal(8, 2, n_students)  # 平均8小时/周,标准差2
vocabulary = np.random.normal(2000, 500, n_students)  # 平均2000词,标准差500
grammar_score = np.random.normal(75, 15, n_students)  # 平均75分,标准差15
reading_score = np.random.normal(70, 10, n_students)  # 平均70分,标准差10

# 生成因变量(英语成绩)
# 设定一些权重来模拟各因素对成绩的影响
english_score = (0.3 * study_time + 
                0.25 * vocabulary/100 + 
                0.25 * grammar_score + 
                0.2 * reading_score + 
                np.random.normal(0, 5, n_students))  # 添加一些随机噪声

# 创建数据框
data = pd.DataFrame({
    '学习时间': study_time,
    '词汇量': vocabulary,
    '语法能力': grammar_score,
    '阅读理解': reading_score,
    '英语成绩': english_score
})

# 查看数据的基本统计信息
print("\n数据基本统计信息:")
print(data.describe())


# 准备建模数据
X = data[['学习时间', '词汇量', '语法能力', '阅读理解']]
y = data['英语成绩']

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 建立并训练模型
model = LinearRegression()
model.fit(X_train, y_train)

# 打印模型系数
print("\n回归系数:")
for feature, coef in zip(X.columns, model.coef_):
    print(f"{feature}: {coef:.4f}")
print(f"截距: {model.intercept_:.4f}")

# 模型评估
y_pred = model.predict(X_test)
r2 = r2_score(y_test, y_pred)
mse = mean_squared_error(y_test, y_pred)
print(f"\n模型评估:")
print(f"R² 分数: {r2:.4f}")
print(f"均方误差: {mse:.4f}")

# 预测示例
example_student = pd.DataFrame({
    '学习时间': [10],
    '词汇量': [2500],
    '语法能力': [85],
    '阅读理解': [80]
})
predicted_score = model.predict(example_student)
print(f"\n示例预测:")
print(f"对于学习时间为10小时/周、词汇量2500词、语法85分、阅读理解80分的学生:")
print(f"预测英语成绩为: {predicted_score[0]:.2f}")

# 可视化预测结果
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred, alpha=0.5)
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'r--', lw=2)
plt.xlabel('Actual Score')
plt.ylabel('Predicted Score')
plt.title('Predicted vs Actual Scores')
plt.tight_layout()
plt.show()

4.结果分析:

1.回归系数解释
  • 学习时间: 0.1710
    • 含义:每增加1小时的学习时间,预期英语成绩会增加0.171分
    • 影响程度相对较小
  • 词汇量: 0.0050
    • 含义:每增加1个词汇量,预期英语成绩会增加0.005分
    • 看似很小,但考虑到词汇量通常以百或千为单位增长,实际影响不小
    • 例如:增加100个词汇量,预期成绩增加0.5分
  • 语法能力: 0.2181
    • 含义:语法测试分数每提高1分,预期英语成绩会增加0.218分
    • 影响程度中等
  • 阅读理解: 0.3077
    • 含义:阅读理解分数每提高1分,预期英语成绩会增加0.308分
    • 在所有因素中影响最大
2.模型评估指标解释
  • R² (R平方) = 0.4948
    • 含义:模型可以解释约49.48%的英语成绩变异
    • 这个R²值表明模型的拟合程度一般,还有约50%的变异无法被当前自变量解释
    • 说明可能还有其他重要因素影响英语成绩未被纳入模型
  • MSE(均方误差)= 33.0542
    • 含义:预测值与实际值的平均偏差的平方
    • 开平方后约为5.75分,表示预测值平均偏离实际值约5.75分
    • 这个误差相对于英语成绩的总分范围来说中等偏大
3.结论和建议
  • 阅读理解能力对英语成绩的影响最大,应优先提升
  • 语法能力的影响次之
  • 学习时间的效果相对较小,可能需要关注学习效率而不仅是时间投入
  • 模型的预测能力一般,建议:
    • 考虑增加其他相关变量(如听力能力、口语水平等)
    • 可能存在非线性关系,考虑使用更复杂的模型
    • 增加样本量以提高模型稳定性
4.实践意义
  • 教学重点应放在提升阅读理解和语法能力上
  • 单纯增加学习时间的收益可能有限
  • 在预测学生成绩时,需要考虑较大的误差范围

本文展示了多元回归分析的基本实现流程。在实际应用中,还可以使用交叉检验评估模型稳定性。

按需更新!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/960223.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

unity免费资源2025-1-26

https://assetstore.unity.com/packages/tools/animation/motion-warping-climb-interact-270046 兑换码KINEMATION2025

Kitchen Racks 2

Kitchen Racks 2 吸盘置物架 Kitchen Racks-CSDN博客

ESMC-600M蛋白质语言模型本地部署攻略

前言 之前介绍了ESMC-6B模型的网络接口调用方法,但申请token比较慢,有网友问能不能出一个本地部署ESMC小模型的攻略,遂有本文。 其实本地部署并不复杂,官方github上面也比较清楚了。 操作过程 环境配置:CUDA 12.1、…

JAVA设计模式:依赖倒转原则(DIP)在Spring框架中的实践体现

文章目录 一、DIP原则深度解析1.1 核心定义1.2 现实比喻 二、Spring中的DIP实现机制2.1 传统实现 vs Spring实现对比 三、Spring中DIP的完整示例3.1 领域模型定义3.2 具体实现3.3 高层业务类3.4 配置类 四、Spring实现DIP的关键技术4.1 依赖注入方式对比4.2 自动装配注解 五、D…

JVM栈溢出线上环境排查

#查看当前Linux系统进程ID、线程ID、CPU占用率(-eo后面跟想要展示的列) ps H -eo pid,tid,%cpups H -eo pid,tid,%cpu |grep tid #使用java jstack 查看进程id下所有线程id的情况 jstack pid 案例2 通过jstack 排查死锁问题 #启动java代码 jstack 进…

Langchain+讯飞星火大模型Spark Max调用

1、安装langchain #安装langchain环境 pip install langchain0.3.3 openai -i https://mirrors.aliyun.com/pypi/simple #灵积模型服务 pip install dashscope -i https://mirrors.aliyun.com/pypi/simple #安装第三方集成,就是各种大语言模型 pip install langchain-comm…

Gradle配置指南:深入解析settings.gradle.kts(Kotlin DSL版)

文章目录 Gradle配置指南:深入解析settings.gradle.kts(Kotlin DSL版)settings.gradle.kts 基础配置选项单项目配置多项目配置 高级配置选项插件管理(Plugin Management)基础配置模板案例:Android项目标准配…

php twig模板引擎详细使用教程

php twig模板引擎 1. 什么是Twig模板引擎 Twig是一个强大且灵活的PHP模板引擎,它提供了一种更简洁和可扩展的方法来创建PHP应用程序的视图层。Twig模板引擎旨在将设计与业务逻辑分离,并为开发人员提供一种更加清晰和易于维护的方式来构建网页。Twig由S…

Java后端之AOP

AOP&#xff1a;面向切面编程&#xff0c;本质是面向特定方法编程 引入依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>示例&#xff1a;记录…

vim的多文件操作

[rootxxx ~]# vim aa.txt bb.txt cc.txt #多文件操作 next #下一个文件 prev #上一个文件 first #第一个文件 last #最后一个文件 快捷键: ctrlshift^ #当前和上个之间切换 说明&#xff1a;快捷键ctrlshift^&#xff0c…

DataSecOps的要点

2020年首次提出&#xff0c;DataSecOps是一种敏捷、全面、内置安全的 方法&#xff0c;用于协调不断变化的数据及其用户&#xff0c;旨在快速提供数据价值&#xff0c; 同时确保数据的私密性、安全性和良好的管理。 强调数据全生命周 期流转运营过程中的内嵌安全属性&#x…

实用工具推荐----wsl安装

一&#xff1a;Win设置修改 Win 搜索 ”启用或关闭windows 功能“ 将如下内容选中 点击升级 重启电脑 二&#xff1a;安装步骤 参考官方文档 适用于 Linux 的 Windows 子系统文档 | Microsoft Learn 下载wsl ubantu发行包 旧版 WSL 的手动安装步骤 | Microsoft Learn 将u…

如何建设一个企业级的数据湖

建设一个企业级的数据湖是一项复杂且系统化的工程&#xff0c;需要从需求分析、技术选型、架构设计到实施运维等多个方面进行综合规划和实施。以下是基于我搜索到的资料&#xff0c;详细阐述如何建设企业级数据湖的步骤和关键要点&#xff1a; 一、需求分析与规划 明确业务需…

如何在 macOS 上安装 PIP ?

PIP 是任何 Python 开发人员必备的工具&#xff0c;因为它简化了安装和管理 Python 包的过程。本教程是为 macOS 用户量身定制的&#xff0c;并假设对使用终端有基本的了解。 必备条件 在安装 PIP 之前&#xff0c;必须确保您的系统上已经安装了 Python。Python 3.4 及更高版…

Kotlin开发(六):Kotlin 数据类,密封类与枚举类

引言 想象一下&#xff0c;你是个 Kotlin 开发者&#xff0c;敲着代码忽然发现业务代码中需要一堆冗长的 POJO 类来传递数据。烦得很&#xff1f;别急&#xff0c;Kotlin 贴心的 数据类 能帮你自动生成 equals、hashCode&#xff0c;直接省时省力&#xff01;再想想需要多种状…

多版本并发控制:MVCC的作用和基本原理

多版本并发控制&#xff1a;MVCC的作用和基本原理 1、MVCC简介1.1 快照读与当前读的区别1.1.1 快照读1.1.2 当前读 1.2 数据库的读写问题1.3 MVCC的作用 2、MVCC实现原理之ReadView2.1 什么是ReadView2.2 ReadView的设计思路2.3 MVCC整体操作流程 1、MVCC简介 1.1 快照读与当前…

Docker—搭建Harbor和阿里云私有仓库

Harbor概述 Harbor是一个开源的企业级Docker Registry管理项目&#xff0c;由VMware公司开发。‌它的主要用途是帮助用户迅速搭建一个企业级的Docker Registry服务&#xff0c;提供比Docker官方公共镜像仓库更为丰富和安全的功能&#xff0c;特别适合企业环境使用。‌12 Harb…

HarmonyOS:创建应用静态快捷方式

一、前言 静态快捷方式是一种在系统中创建的可以快速访问应用程序或特定功能的链接。它通常可以在长按应用图标&#xff0c;以图标和相应的文字出现在应用图标的上方&#xff0c;用户可以迅速启动对应应用程序的组件。使用快捷方式&#xff0c;可以提高效率&#xff0c;节省了查…

从表人的相关单词聊起

英文单词是繁多的&#xff0c;甚至海量的&#xff0c;这和老外的思维方式有关&#xff0c;他们通常会为同一类事物的具体的东西或子类事物也专门创建一个单词来进行表达、表示或应对&#xff0c;这增加了表达的直接性和精确性&#xff0c;但是&#xff0c;也轻而易举地就创建出…

低代码系统-产品架构案例介绍、轻流(九)

轻流低代码产品定位为零代码产品&#xff0c;试图通过搭建来降低企业成本&#xff0c;提升业务上线效率。 依旧是从下至上&#xff0c;从左至右的顺序 名词概述运维层底层系统运维层&#xff0c;例如上线、部署等基础服务体系内置的系统能力&#xff0c;发消息、组织和权限是必…