首页 > 其他分享 >线性回归模型详解

线性回归模型详解

时间:2024-05-23 23:26:37浏览次数:10  
标签:plt 模型 reg beta 详解 线性 回归

目录

引言

线性回归模型概念

数学原理

最小二乘法

矩阵形式

代码实现

简单线性回归

多元线性回归

模型评估

残差分析

性能指标


引言

  • 线性回归模型是统计学和机器学习中一种基本且重要的模型。它用于描述因变量和一个或多个自变量之间的线性关系。线性回归模型广泛应用于各种领域,如经济学、金融学、医学和工程学等。
  • 本文将详细介绍线性回归模型,包括其基本概念、数学原理、模型拟合方法、代码实现、模型评估及图形解析。通过具体案例和代码示例,使读者能够深入理解线性回归模型并在实际问题中应用。

线性回归模型概念

线性回归模型是指因变量 $Y$ 与一个或多个自变量 $X$ 之间呈线性关系的统计模型。简单线性回归模型可以表示为:

Y=β0​+β1​X+ϵ

其中,$Y$ 是因变量,$X$ 是自变量,$\beta_0$ 是截距,$\beta_1$ 是回归系数,$\epsilon$ 是误差项。

对于多元线性回归模型,公式可以扩展为:

Y=β0​+β1​X1​+β2​X2​+⋯+βp​Xp​+ϵ

其中,$X_1, X_2, \ldots, X_p$ 是多个自变量,$\beta_1, \beta_2, \ldots, \beta_p$ 是对应的回归系数。

数学原理

最小二乘法

  • 最常用的线性回归模型参数估计方法是最小二乘法(Ordinary Least Squares,OLS)。最小二乘法的基本思想是选择回归系数,使得模型预测值与真实值之间的误差的平方和最小。具体来说,对于简单线性回归模型,我们希望最小化以下目标函数:

通过求导和解方程组,可以得到回归系数的最优估计值:

其中,$\bar{x}$ 和 $\bar{y}$ 分别是 $x$ 和 $y$ 的均值。

矩阵形式

  • 对于多元线性回归模型,可以使用矩阵形式来表示。设 $X$ 为包含自变量的矩阵,$Y$ 为因变量的向量,$\beta$ 为回归系数向量,则模型可以表示为:

Y=Xβ+ϵ

  • 最小二乘法的目标是最小化以下目标函数:

  • 通过求导,可以得到回归系数的最优估计值:

代码实现

简单线性回归

  • 下面我们使用 Python 语言实现简单线性回归模型。首先,导入必要的库并生成模拟数据:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# 生成模拟数据
np.random.seed(0)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

# 绘制数据散点图
plt.scatter(X, y)
plt.xlabel("X")
plt.ylabel("y")
plt.title("Scatter plot of the data")
plt.show()

  • 接下来,我们使用 sklearn 库中的 LinearRegression 类来拟合简单线性回归模型:
# 拟合线性回归模型
lin_reg = LinearRegression()
lin_reg.fit(X, y)

# 获取回归系数
beta_0 = lin_reg.intercept_
beta_1 = lin_reg.coef_
print(f"Intercept: {beta_0[0]}, Coefficient: {beta_1[0][0]}")

  • 模型拟合完成后,我们可以进行预测并计算模型的性能指标:
# 预测
y_pred = lin_reg.predict(X)

# 计算性能指标
mse = mean_squared_error(y, y_pred)
r2 = r2_score(y, y_pred)
print(f"Mean Squared Error: {mse}, R^2 Score: {r2}")

# 绘制回归线
plt.scatter(X, y)
plt.plot(X, y_pred, color='red')
plt.xlabel("X")
plt.ylabel("y")
plt.title("Linear Regression Fit")
plt.show()

多元线性回归

  • 下面我们实现多元线性回归模型。首先,生成模拟数据:
# 生成模拟数据
np.random.seed(0)
X = 2 * np.random.rand(100, 2)
y = 4 + 3 * X[:, 0] + 5 * X[:, 1] + np.random.randn(100)

# 绘制数据散点图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X[:, 0], X[:, 1], y)
ax.set_xlabel("X1")
ax.set_ylabel("X2")
ax.set_zlabel("y")
plt.title("Scatter plot of the data")
plt.show()

  • 然后,使用 LinearRegression 类来拟合多元线性回归模型:
# 拟合线性回归模型
lin_reg = LinearRegression()
lin_reg.fit(X, y)

# 获取回归系数
beta_0 = lin_reg.intercept_
beta_1 = lin_reg.coef_
print(f"Intercept: {beta_0}, Coefficients: {beta_1}")

  • 同样地,进行预测并计算性能指标:
# 预测
y_pred = lin_reg.predict(X)

# 计算性能指标
mse = mean_squared_error(y, y_pred)
r2 = r2_score(y, y_pred)
print(f"Mean Squared Error: {mse}, R^2 Score: {r2}")

模型评估

残差分析

  • 残差是指实际值与预测值之间的差异。通过分析残差,可以判断模型的拟合效果。残差图可以帮助我们识别模型是否存在系统性误差。
# 计算残差
residuals = y - y_pred

# 绘制残差图
plt.scatter(y_pred, residuals)
plt.axhline(y=0, color='red', linestyle='--')
plt.xlabel("Predicted Values")
plt.ylabel("Residuals")
plt.title("Residual Plot")
plt.show()

性能指标

  • 除了均方误差(MSE)和 $R^2$ 值,我们还可以使用其他性能指标来评估模型,如平均绝对误差(MAE)和均方根误差(RMSE):
from sklearn.metrics import mean_absolute_error

# 计算MAE和RMSE
mae = mean_absolute_error(y, y_pred)
rmse = np.sqrt(mse)
print(f"Mean Absolute Error: {mae}, Root Mean Squared Error: {rmse}")


希望这些能对刚学习算法的同学们提供些帮助哦!!!

标签:plt,模型,reg,beta,详解,线性,回归
From: https://blog.csdn.net/2302_76516899/article/details/139159660

相关文章

  • 鸿蒙HarmonyOS实战-Stage模型(应用上下文Context)
    ......
  • 如何使用语音情感基座模型emotion2vec+
        emotion2vec是一个由上海交通大学、阿里巴巴、复旦大学和香港中文大学的研究者们共同开发的通用语音情感表征模型。该模型通过自监督学习方法,在大量无标记的公开情感数据上进行预训练,以学习到高度通用的语音情感特征。模型旨在训练语音情感识别领域的“耳语”,通过......
  • 使用本地大语言模型和Langchain手搓免费的AI搜索问答助手
    1概述大语言模型虽然已经有了很多的背景知识,但针对模型训练之后新产生的内容,或者领域内的知识进行提问,大模型本身通常无法准确给出回应,一个常用的解决方法是,借助检索增强生成(RAG),将能够用于回答问题的相关上下文给到大模型,利用大模型强大的理解和生成能力,来缓解这个问题。本文主......
  • 线段(线性dp)
     题目链接:https://www.luogu.com.cn/problem/P3842思路:f[i][0]表示走完第i行且停在第i行的左端点最少用的步数f[i][1]同理,停在右端点的最少步数。那么转移就很简单了,走完当前行且停到左端点,那么一定是从右端点过来的,那么从上一行左端点转移的话就是f[i][0]=abs(上一行左端......
  • 利用Python训练手势模型代码
    importcv2ascvimportosimportnumpyasnpfromsklearn.decompositionimportPCAfromsklearn.model_selectionimporttrain_test_splitfromsklearn.svmimportSVCfromsklearn.treeimportDecisionTreeClassifierfromsklearn.neighborsimportKNeighborsClassifie......
  • three-gltf-viewer 3d模型展示
    因为工作需要开发了一个通用的3d模型模板展示 内容包含背景颜色、环境光、自动旋转、以及资源监视器,只需要把模型传进去即可。然后我发布到npm上面。目前更新到了1.0.5,喜欢的话就去下载吧。 需要源码的联系我。 yarn add three-gltf-viewer main.js使用importglt......
  • SAM视觉大模型的finetune
    随着Meta发布的SegmentAnythingModel(SAM),计算机视觉迎来了ChatGPT时刻。SAM经过超过110亿个分割掩码的训练,是预测性人工智能用例而非生成性人工智能的基础模型。虽然它在广泛的图像模式和问题空间上表现出了令人难以置信的灵活性,但它的发布没有“微调”功能。本教程将概述使用掩......
  • JavaScript中reduce()详解及使用方法。
    一、定义和用法reduce()方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。reduce()可以作为一个高阶函数,用于函数的compose。reduce()方法为归并类方法,最常用的场景就是,计算数组中的每一项的总和。注意:reduce()对于空数组是不会执行回调函数的......
  • three.js之加载模型
    加载各种模型<canvasid="mainCanvas"></canvas><scripttype="importmap">{"imports":{"three":"./js/build/three.module.js","three/addons/":"./js/jsm/"......
  • 详解MVCC以及尽可能解决幻读的两种方案
    MVCC通过「版本链」来控制并发事务访问同一个记录时的行为并行事务问题+隔离级别幻读:在一个事务内多次查询某个符合查询条件的「记录数量」,如果出现前后两次查询到的记录数量不一样的情况,就意味着发生了「幻读」现象。脏读:读到其他事务未提交的数据;不可重复读:前后读取......