首页 > 编程语言 >最小二乘回归算法原理及Python实践

最小二乘回归算法原理及Python实践

时间:2024-09-08 22:53:18浏览次数:10  
标签:Python 模型 beta 最小 算法 np 回归 二乘

最小二乘回归算法原理主要基于最小化误差平方和的思想,以找到数据的最佳函数匹配。以下是对其原理的详细阐述:

一、基本原理

最小二乘法(Least Squares Method,简称LS)是一种数学优化技术,它通过最小化误差的平方和来寻找数据的最佳函数匹配。在回归分析中,最小二乘法被广泛应用于估计回归系数,从而构建回归方程。

二、核心思想

最小二乘法的核心思想是:对于给定的数据集,假设存在一个模型(如线性模型、多项式模型等),该模型能够描述自变量(X)与因变量(Y)之间的关系。通过调整模型中的参数,使得模型预测值与实际观测值之间的误差平方和达到最小,从而得到最优的模型参数。

三、计算步骤

以简单线性回归为例,最小二乘法的计算步骤通常包括以下几个方面:

  1. 设定模型:首先,需要设定一个线性模型,如 Y = β 0 + β 1 X + ϵ Y = \beta_0 + \beta_1X + \epsilon Y=β0​+β1​X+ϵ,其中 β 0 \beta_0 β0​ 和 β 1 \beta_1 β1​ 是待求的回归系数, ϵ \epsilon ϵ 是误差项。

  2. 计算残差:对于数据集中的每一个观测值,计算其残差,即实际观测值与模型预测值之差,记为 e i = Y i − ( β 0 + β 1 X i ) e_i = Y_i - (\beta_0 + \beta_1X_i) ei​=Yi​−(β0​+β1​Xi​)。

  3. 最小化残差平方和:通过调整 β 0 \beta_0 β0​ 和 β 1 \beta_1 β1​ 的值,使得所有观测值的残差平方和 Q = ∑ i = 1 n e i 2 Q = \sum_{i=1}^{n}e_i^2 Q=∑i=1n​ei2​ 达到最小。

  4. 求解回归系数:根据最小二乘法的原理,可以通过求解正规方程组来得到 β 0 \beta_0 β0​ 和 β 1 \beta_1 β1​ 的估计值。正规方程组通常表示为:

    { ∑ i = 1 n X i ( Y i − β 0 − β 1 X i ) = 0 ∑ i = 1 n ( Y i − β 0 − β 1 X i ) = 0 \begin{cases} \sum_{i=1}^{n}X_i(Y_i - \beta_0 - \beta_1X_i) = 0 \\ \sum_{i=1}^{n}(Y_i - \beta_0 - \beta_1X_i) = 0 \end{cases} {∑i=1n​Xi​(Yi​−β0​−β1​Xi​)=0∑i=1n​(Yi​−β0​−β1​Xi​)=0​

    解这个方程组,就可以得到 β 0 \beta_0 β0​ 和 β 1 \beta_1 β1​ 的最小二乘估计值 β ^ 0 \hat{\beta}_0 β^​0​ 和 β ^ 1 \hat{\beta}_1 β^​1​。

  5. 构建回归方程:最后,利用求得的回归系数 β ^ 0 \hat{\beta}_0 β^​0​ 和 β ^ 1 \hat{\beta}_1 β^​1​,构建回归方程 Y = β ^ 0 + β ^ 1 X Y = \hat{\beta}_0 + \hat{\beta}_1X Y=β^​0​+β^​1​X,用于预测或解释自变量与因变量之间的关系。

四、优势与局限

优势

  • 最小二乘法原理简单,计算方便,是回归分析中最常用的方法之一。
  • 它能够最大程度地减小残差平方和,使得回归方程的预测结果更加准确。

局限

  • 最小二乘法对异常值较为敏感,如果数据集中存在较大的异常值,可能会影响回归系数的估计结果。
  • 它假设误差项 ϵ \epsilon ϵ 服从正态分布且方差恒定,这在某些实际应用中可能不成立。

综上所述,最小二乘回归算法是一种基于最小化误差平方和原理的回归分析方法,具有广泛的应用场景和重要的实用价值。然而,在使用时也需要注意其局限性和适用条件。

五、Python实践

在Python中,实现最小二乘回归算法的一个非常直接和常用的方法是利用numpy库进行矩阵运算,或者使用更高级的库如scikit-learn中的LinearRegression类。下面我将分别给出这两种方法的实践示例。

使用Numpy实现最小二乘回归

import numpy as np

# 示例数据
X = np.array([[1], [2], [3], [4], [5]])  # 注意这里X是二维的,因为后续要做矩阵乘法
y = np.array([2, 4, 5, 4, 5])

# 最小二乘回归
# 系数矩阵 = (X^T * X)^(-1) * X^T * y
X_b = np.c_[np.ones((5, 1)), X]  # 添加x0 = 1 到每个实例
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)

print("最优参数(包括截距):", theta_best)

# 使用模型进行预测
X_new = np.array([[0], [2], [3], [4]])
X_new_b = np.c_[np.ones((4, 1)), X_new]  # 同样为新数据添加x0 = 1
y_predict = X_new_b.dot(theta_best)
print("预测结果:", y_predict)

使用Scikit-learn实现最小二乘回归

Scikit-learn是Python的一个非常流行的机器学习库,它提供了大量的算法实现,包括线性回归。

from sklearn.linear_model import LinearRegression
import numpy as np

# 示例数据
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 5, 4, 5])

# 创建线性回归模型
model = LinearRegression()

# 训练模型
model.fit(X, y)

# 打印截距和斜率
print("模型截距:", model.intercept_)
print("模型斜率:", model.coef_)

# 使用模型进行预测
X_new = np.array([[0], [2], [3], [4]])
y_predict = model.predict(X_new)
print("预测结果:", y_predict)

注意事项

  • 在使用numpy手动实现时,需要确保X是二维的,因为我们需要进行矩阵乘法。同时,为了计算截距项,我们需要在X中添加一列全为1的列(X_b)。
  • scikit-learnLinearRegression类会自动处理截距项,因此你不需要在X中添加额外的列。
  • 两种方法都能有效地实现最小二乘回归,但scikit-learn提供了更多的功能和更好的封装,因此在实际应用中更为常用。

标签:Python,模型,beta,最小,算法,np,回归,二乘
From: https://blog.csdn.net/u013571432/article/details/142034852

相关文章

  • 偏最小二乘回归算法原理及Python实践
    偏最小二乘回归(PartialLeastSquaresRegression,PLS回归)是一种统计学和机器学习中的多元数据分析方法,特别适用于处理因变量和自变量之间存在多重共线性问题的情况。其原理主要可以归纳为以下几点:一.原理概述PLS回归通过投影分别将预测变量(自变量X)和观测变量(因变量Y)投......
  • 如何在Java服务中实现分布式ID生成:雪花算法与UUID的对比
    如何在Java服务中实现分布式ID生成:雪花算法与UUID的对比大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代分布式系统中,唯一标识符(ID)的生成是一个关键问题。常见的ID生成方案包括雪花算法(Snowflake)和UUID(通用唯一识别码)。本文将对这两种方案进行详......
  • 二,PyCharm软件的使用,Python运算符,变量的介绍与运用,以及本章综合测试
    学习:知识的初次邂逅复习:知识的温故知新练习:知识的实践应用目录一,本章知识简介二,PyCharm软件的使用1,修改背景颜色和字体大小2,软件界面的使用3,PyCharm的常用快捷键三,Python运算符1,Python中常见的运算符有哪些?2,算术运算符如何运用?3,赋值运算符如何运用?4,......
  • 一,邂逅Python,搭建python环境,基础语法介绍:python注释,关键字,标识符,变量,数据类型
    学习:知识的初次邂逅复习:知识的温故知新练习:知识的实践应用目录一,本章知识简介1,本章主要的语法:二,邂逅Python1,什么是编程语言2,编程语言经历了哪些时代?3,学习Python有哪些优势呢?4.为什么要学习python呢?4,python的诞生与发展4.1,python的创始人是谁?4.2,什......
  • MATLAB实现Dijkstra算法和Floyd算法
    目录1、文件功能介绍2、代码执行效果展示3、Dijkstra算法求图的单源最短路径4、DijkstrafullPath的更新逻辑5、DIjkstra算法流程图6、Floyd算法实现图的任意两点间最短路径7、Floyd算法流程图8、FloydfullPath的更新逻辑(非递归算法)1、文件功能介绍代码文件功能wor......
  • UCB算法(帮助做出最优选择的算法)
    UCB(UpperConfidenceBound)算法是一种用于解决多臂老x虎机问题的启发式方法。多臂老x虎机问题是一种用以模拟现实世界决策问题的数学模型,其中“臂”代表不同的行动或选择,而“老x虎机”代表这些行动的随机结果。UCB算法的目标是在探索(exploration)和利用(exploitation)之间找到最佳平......
  • Python ttkbootstrap学习
    HelloWorldtkinter知识记录一些tkinter库的知识。pack布局个人觉得布局其实是很负责的,因此这里对布局进行一个补充说明。pack布局是根据添加组件的顺序依次排列所有组件。pack()方法的参数有:side,fill,padx/pady,ipadx/ipady,anchor,expandside:决定组件停靠的方向......
  • TensorRT-For-YOLO-Series项目:实现yolov10模型的python-tensorrt推理(对比int8与fp16推
    项目地址:https://github.com/Linaom1214/TensorRT-For-YOLO-Series/tree/cuda-python算法支持状态:2024.6.16SupportYOLOv9,YOLOv10,changingtheTensorRTversionto10.02023.8.15Supportcuda-python2023.5.12Update2023.1.7supportYOLOv82022.11.29fixs......
  • 非官方python二进制包 https://www.lfd.uci.edu/~gohlke/pythonlibs/ 替代
    前两年的时候,由于偶尔会使用LFD中的二进制python包,但是下载地址都是加密的,不能直接给pip使用,因此为了方便自己把地址解密后做了一个目录页,并自动更新。今天看了一下页面发现包的更新时间都是前两年的,以为是自动更新程序出问题了,一番求证后发现原来是LFD的服务关闭了,幸好只关闭了......
  • Python Matplotlib绘制柏拉图以及在ax.table上绘制矩形、直线、椭圆
    快速入门指南官网官方网址:Matplotlib—VisualizationwithPython官方教程:Tutorials—Matplotlib3.9.2documentation官方指南:UsingMatplotlib—Matplotlib3.9.2documentation官方示例:Examples—Matplotlib3.9.2documentation官方API说明:APIReference—Mat......