Python实现一元线性回归模型

本文将从多个方面详细阐述Python实现一元线性回归模型的代码。如果你对线性回归模型有一些了解,对Python语言也有所掌握,那么本文将对你有所帮助。在开始介绍具体代码前,让我们先来理解一下线性回归模型的基本概念。

一、线性回归模型基本原理

线性回归是一种利用一个或多个自变量和因变量之间的线性关系进行预测的方法。在一元线性回归中,仅利用单个自变量进行预测。

一元线性回归模型可以用一条直线来表示,即:$y=\beta_{0}+\beta_{1}x+\varepsilon$,其中$y$为因变量,$x$为自变量,$\beta_{0}$和$\beta_{1}$分别为截距和斜率,$\varepsilon$为误差项。

线性回归的目标是找到最佳的模型参数$\beta_{0}$和$\beta_{1}$,使其能够最精确地拟合给定的数据。拟合过程通常使用最小二乘法,即求使残差平方和最小的模型参数。残差为预测值和真实值的差,残差平方和为所有残差平方的和。

二、数据预处理

在Python中实现一元线性回归模型之前,需要进行数据的预处理。预处理过程包括数据的读取、数据清洗、数据切分和数据标准化。

数据读取可以使用Python的pandas库中的read_csv()函数,读取csv格式的数据文件。读取后我们可以对数据进行简单的统计分析,包括数据的描述统计学、数据缺失值的处理和异常值的处理等。

import pandas as pd
data = pd.read_csv('data.csv')
print(data.describe())  # 输出数据的描述统计学

数据清洗是指对数据中存在的空值、错误值、重复值或冗余值进行删除或替换等操作。这个过程需要结合具体数据的特点进行处理。

数据切分是把原始数据随机划分为训练集和测试集,通常训练集和测试集的比例为7:3或8:2。训练集用于训练模型参数,测试集用于评估模型的预测能力。在Python中可以使用sklearn库中的train_test_split()函数进行划分。

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=0)  # 划分数据集

数据标准化是指对数据进行归一化处理,使得数据在整个数据集中的数值大小范围都相同,并且数据的均值为0,标准差为1。数据标准化可以使用sklearn库中的StandardScaler()类进行处理。

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
x_train = sc.fit_transform(x_train)
x_test = sc.transform(x_test)

三、构建模型

在数据预处理之后,接下来需要构建一元线性回归模型。

在Python中,可以使用sklearn库中的线性回归类LinearRegression()来构建模型。在构建模型之前,需要将自变量和因变量的数据集传入LinearRegression()中,并且调用fit()方法来训练模型。

from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(x_train, y_train)

四、模型评估

模型评估通常包括两个方面:模型精度和模型稳定性。

模型精度可以通过均方误差(MSE)和决定系数(R Squared)进行评估。均方误差是指模型预测值和真实值之间误差的平方和除以样本数量,值越小说明模型拟合效果越好。决定系数表示因变量变异中可以由自变量解释的部分所占的比例,值越接近1说明模型拟合效果越好。

from sklearn.metrics import mean_squared_error, r2_score
y_pred = model.predict(x_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print('均方误差:', mse)
print('决定系数:', r2)

模型稳定性可以通过交叉验证进行评估。交叉验证是指将原始数据随机划分为若干个子集,将其中一部分子集用于训练模型,另外一部分子集用于测试模型。这个过程会重复进行多次,并且每次使用不同的子集划分方式。最终计算所有模型验证结果的平均值,得到模型的稳定性评估结果。

from sklearn.model_selection import cross_val_score
scores = cross_val_score(model, x, y, cv=10)
print('交叉验证得分:', scores.mean())

五、模型可视化

利用可视化工具可以更直观地查看模型的拟合效果。在Python中可以使用matplotlib库进行可视化。

绘制散点图和回归直线:

import matplotlib.pyplot as plt
plt.scatter(x_test, y_test, color='red')
plt.plot(x_test, model.predict(x_test), color='blue')
plt.title('线性回归')
plt.xlabel('自变量')
plt.ylabel('因变量')
plt.show()

绘制残差图:

residuals = y_test - y_pred
plt.scatter(y_pred, residuals, color='blue')
plt.title('残差图')
plt.xlabel('预测值')
plt.ylabel('残差')
plt.axhline(y=0, color='red')
plt.show()

六、完整代码

# 导入相关库
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.model_selection import cross_val_score
import matplotlib.pyplot as plt

# 读取数据
data = pd.read_csv('data.csv')

# 划分自变量和因变量
x = data.iloc[:, :-1].values
y = data.iloc[:, -1].values

# 划分数据集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=0)

# 数据标准化
sc = StandardScaler()
x_train = sc.fit_transform(x_train)
x_test = sc.transform(x_test)

# 构建模型
model = LinearRegression()
model.fit(x_train, y_train)

# 模型评估
y_pred = model.predict(x_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print('均方误差:', mse)
print('决定系数:', r2)

# 交叉验证评估模型稳定性
scores = cross_val_score(model, x, y, cv=10)
print('交叉验证得分:', scores.mean())

# 绘制散点图和回归直线
plt.scatter(x_test, y_test, color='red')
plt.plot(x_test, model.predict(x_test), color='blue')
plt.title('线性回归')
plt.xlabel('自变量')
plt.ylabel('因变量')
plt.show()

# 绘制残差图
residuals = y_test - y_pred
plt.scatter(y_pred, residuals, color='blue')
plt.title('残差图')
plt.xlabel('预测值')
plt.ylabel('残差')
plt.axhline(y=0, color='red')
plt.show()

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
HSQDDHSQDD
上一篇 2025-04-29 12:49
下一篇 2025-04-29 12:49

相关推荐

  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29

发表回复

登录后才能评论