Python实现最小二乘法:原理、视角与代码解析

陆遥
陆遥
发布时间:2026-10-12| 2人浏览过
原创

本文深入解析Python中最小二乘法的实现原理,涵盖其历史背景、核心功能及“多线一点”与“多点一线”两种视角。通过Python代码示例,展示如何利用矩阵运算求解线性回归参数,适用于数据拟合与模型训练场景。

在Python中实现一元线性回归时,最小二乘法是核心工具。你是否清楚最小二乘法的本质?作为分类与回归算法的基石,其思想贯穿从求解线性透视图中消失点、m元n次函数拟合,直至神经网络的学习过程,归根结底均源于最小二乘法。本文将详细解读Python环境下的最小二乘法应用。

一、最小二乘法的定义

最小二乘法(Least Square Method)作为分类与回归算法的基础,拥有悠久的历史,最早由马里·勒让德于1806年提出。

二、最小二乘法的实现原理

其核心原理是通过最小化误差的平方和,寻找与数据最佳匹配的函数模型。

三、最小二乘法的主要功能

利用该方法可以简便地估算未知数据,并确保估算值与实际数据之间误差的平方和达到最小。

此外,最小二乘法广泛应用于曲线拟合领域。其他一些优化问题,如通过最小化能量或最大化熵来表达的问题,也可借助最小二乘法求解。

四、最小二乘法的两种视角描述:“多线→一点”与“多点→一线”

1、“多线→一点”视角:已知多条近似交汇于同一点的直线,目标是求解出一个近似交点。方法是寻找一个距离所有直线距离平方和最小的点,该点即为最小二乘解。

2、“多点→一线”视角:已知多个近似分布于同一直线上的点,目标是拟合出一个直线方程。设直线方程为y=kx+b,通过调整参数k和b,使得所有点到该直线的距离平方之和最小。设满足要求的参数为k=k0,b=b0,则最终直线方程为y=k0x+b0。

实例扩展:

最小二乘法矩阵实现

#! /usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
def calc_left_k_mat(k):
 """
 获得左侧k矩阵
 :param k:
 :return:
 """
 k_mat = []
 for i in range(k + 1):
  now_line = []
  for j in range(k + 1):
   now_line.append(j + i)
  k_mat.append(now_line)
 return k_mat
def calc_right_k_mat(k):
 """
 计算右侧矩阵
 :param k:
 :return:
 """
 k_mat = []
 for i in range(k + 1):
  k_mat.append([i, i + 1])
 return k_mat
def pow_k(x, k):
 """
 计算x列表中的k次方和
 :param x: 点集合的x坐标
 :param k: k值
 :return:
 """
 sum = 0
 for i in x:
  sum += i ** k
 return sum
def get_left_mat_with_x(k_mat, k):
 """
 将 左侧k矩阵运算得到左侧新的矩阵
 :param k_mat:
 :param k:
 :return:
 """
 left_mat = []
 for kl in k_mat:
  now_data = []
  for k in kl:
   now_data.append(pow_k(x, k))
  left_mat.append(now_data)
 return left_mat
def get_right_mat_with(right_k_mat):
 """
 将 右侧k矩阵运算得到右侧新的矩阵
 :param right_k_mat:
 :return:
 """
 right_mat = []
 for i in range(len(right_k_mat)):
  sum = 0
  for xL, yL in zip(x, y):
   a = (xL ** right_k_mat[i][0]) * (yL ** right_k_mat[i][1])
   sum += a
  right_mat.append(sum)
 return right_mat
def fuse_mat(left, right):
 """
 融合两个矩阵
 :param left:
 :param right:
 :return:
 """
 new_mat = []
 for i in range(len(left)):
  asd = np.append(left[i], right[i])
  new_mat.append(list(asd))
 return new_mat
if __name__ == '__main__':
 k = 3
 x = [1, 2, 3]
 y = [1, 2, 3]
 # 计算原始左侧K矩阵
 left_k_mat = calc_left_k_mat(k)
 print("原始左侧K矩阵")
 print(left_k_mat)
 # 计算原始右侧K矩阵
 right_k_mat = calc_right_k_mat(k)
 print("原始右侧k矩阵")
 print(right_k_mat)
 # 计算左侧 k 矩阵
 new_left_mat = get_left_mat_with_x(k_mat=left_k_mat, k=k)
 # 计算右侧 k 矩阵
 new_right_mat = get_right_mat_with(right_k_mat=right_k_mat)
 print("计算后左侧K矩阵")
 print(new_left_mat)
 print("计算后右侧侧K矩阵")
 print(new_right_mat)
 print("-----" * 10)
 # 融合两个矩阵 左侧 矩阵每一行增加 右侧矩阵的对应行
 new_all = fuse_mat(new_left_mat, new_right_mat)
 print("完整矩阵")
 print(new_all)

至此,关于Python中最小二乘法的详细讲解已完成。如需了解更多相关Python最小二乘法内容,请搜索本站历史文章或继续浏览后续相关文章。感谢大家的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。