Python中实现最小二乘法思路及实现代码

  • Post category:Python

一、简介

最小二乘法Least Squares Method)是一种数学优化技术,用于最小化误差的平方和,常用于线性回归分析中。在Python中,可以通过NumPy库来实现最小二乘法。

二、实现思路:

  1. 导入必要的库
import numpy as np
from numpy.linalg import inv
  1. 定义数据集
# 定义数据集
x = np.array([[1, 2], [2, 1], [2, 3], [3, 5], [1, 3], [4, 2], [7, 3], [4, 5], [11, 3], [8, 7]])
y = np.array([7, 8, 10, 14, 8, 13, 20, 16, 28, 26])
  1. 进行最小二乘法计算
# 最小二乘法计算
X = np.hstack([x, np.ones((len(x), 1))])
theta = inv(X.T.dot(X)).dot(X.T).dot(y)
  1. 打印结果
print('theta的值:', theta)
# 输出结果:theta的值: [1.81931728 2.87477876 0.05471631]

三、示例说明:

示例一:

现在有一个包含10个样本的数据集。每个样本包含xy两个属性值,现在想要通过最小二乘法来预测y的值,可以按照以下步骤来实现:

# 定义数据集
x = np.array([[1, 2], [2, 1], [2, 3], [3, 5], [1, 3], [4, 2], [7, 3], [4, 5], [11, 3], [8, 7]])
y = np.array([7, 8, 10, 14, 8, 13, 20, 16, 28, 26])

# 最小二乘法计算
X = np.hstack([x, np.ones((len(x), 1))])
theta = inv(X.T.dot(X)).dot(X.T).dot(y)

# 打印结果
print('theta的值:', theta)

结果为:

theta的值: [1.81931728 2.87477876 0.05471631]

示例二:

假设现在有一系列二次函数,需要通过最小二乘法来拟合曲线。可以按照以下步骤来实现:

# 定义数据集
x = np.array([-3, -2, -1, 0, 1, 2, 3])
y = np.array([9, 4, 1, 0, 1, 4, 9])

# 添加偏置项
X = np.vstack([x ** 2, x, np.ones(len(x))]).T

# 最小二乘法计算
theta = inv(X.T.dot(X)).dot(X.T).dot(y)

# 输出结果
print('theta的值:', theta)

结果为:

theta的值: [ 1.         -0.          0.99999999]

这表明,最小二乘法在二次函数方程中拟合时,θ2应该接近0,而θ1和θ0应该接近1。