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

让我来详细讲解一下“Python中实现最小二乘法思路及实现代码”的完整攻略。

什么是最小二乘法

最小二乘法是一种回归分析方法,通过对一组数据进行拟合,得到一条通过这些点的直线,使得这些点到这条直线的距离之和最小。而距离是指每个点到直线的垂线距离。通过最小二乘法我们可以得到一个最优解,这个最优解是基于误差平方和最小化的。

应用最广泛的应该是线性回归了,下面我们就以线性回归为例子讲解一下如何在 Python 中实现最小二乘法。

线性回归模型

在一元线性回归中,假设我们有一个因变量 $y$,一个自变量 $x$,则线性回归模型可以表示为:

$$y = \beta_0 + \beta_1x + \epsilon$$

其中,$\beta_0$ 表示 $x=0$ 时 $y$ 的值,$\beta_1$ 表示 $y$ 随着 $x$ 的变化所增加的量,$\epsilon$ 是误差项。

我们希望对于给定的自变量 $x_i$ 和因变量 $y_i$,通过最小二乘法来确定模型的参数 $\beta_0, \beta_1$。

最小二乘法思路

最小二乘法的思路是:

  1. 确定线性关系:$y=\beta_0+\beta_1 x$
  2. 给出样本数据集 $(x_1,y_1), (x_2,y_2),\ldots,(x_n,y_n)$
  3. 确定误差函数:$E=\sum_{i=1}^{n}{(y_i-\hat{y}_i)^2}$,其中 $\hat{y}_i=\beta_0+\beta_1 x_i$ 表示模型预测的值
  4. 对误差函数求导,得到模型参数 $\beta_0, \beta_1$ 的最优解。

下面,我们将根据上述的四个步骤,来进行 Python 代码实现。

实现代码

首先需要导入 NumPy 和 Matplotlib 这两个库。其中,NumPy 将用于计算矩阵的逆和相关操作,Matplotlib 则用于绘制图形。

import numpy as np
import matplotlib.pyplot as plt

然后我们定义一个函数来实现最小二乘法:

def linear_regression(x, y):
    n = np.size(x)
    m_x, m_y = np.mean(x), np.mean(y)
    SS_xy = np.sum(y * x - n * m_y * m_x)
    SS_xx = np.sum(x * x - n * m_x * m_x)
    beta_1 = SS_xy / SS_xx
    beta_0 = m_y - beta_1 * m_x
    return beta_0, beta_1

这里需要注意,在计算相关系数时,需要使用 NumPy 库中的 sum() 函数。该函数会按照给定参数进行求和操作。

最后,我们可以生成一组虚构的数据,然后进行拟合,绘制图形:

x = np.array([2, 4, 6, 8, 10])
y = np.array([4, 7, 8, 9, 12])

b_0, b_1 = linear_regression(x, y)
plt.scatter(x, y, color = "m", marker = "o", s = 30)

y_pred = b_0 + b_1 * x
plt.plot(x, y_pred, color = "g")

plt.xlabel('x')
plt.ylabel('y')

plt.show()

其中,我们首先定义了一组虚构的数据 $x$ 和 $y$,通过之前的 linear_regression 函数计算得到拟合的直线,最后使用 Matplotlib 绘制图形。

下面展示另一个示例,使用最小二乘法预测房价:

import pandas as pd
from sklearn import linear_model
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score

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

# 分割自变量和因变量
X = house_data.iloc[:, :-1]
y = house_data.iloc[:, -1]

# 分割训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 定义线性回归模型并训练
regr = linear_model.LinearRegression()
regr.fit(X_train, y_train)

# 模型预测
y_pred = regr.predict(X_test)

# 计算误差和准确率
print('Mean squared error: %.2f'
      % mean_squared_error(y_test, y_pred))
print('Coefficient of determination: %.2f'
      % r2_score(y_test, y_pred))

以上代码中,我们使用了一个名为 house_data 的数据集。首先我们将数据集读入数据框中,然后分割自变量和因变量,然后将训练集和测试集分割开来。接下来我们定义了一个线性回归模型 regr,并将训练数据集 X_trainy_train 传递到模型中进行训练。最后,我们可以用 regr 对测试集 X_test 进行预测,然后计算误差和准确率。

上述两个示例,一个是手动实现了最小二乘法,而另一个则使用了 Scikit-learn 库中的线性回归模型,只需调用相关库即可,无需手动实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中实现最小二乘法思路及实现代码 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • Python内置模块turtle绘图详解

    Python内置模块turtle绘图详解 turtle是Python内置的一个绘图模块,它可以绘制各种形状和图案,包括线条、圆形、多边形等。本文将详细讲如何使用turtle模块制图形,并提供两个示例。 准备工作 在开始之前,需要安装turtle模块。turtle模块是Python内置的块,无需额外安装。 示例一:绘制正方形 可以使用以下代码绘制一个正方形: …

    python 2023年5月14日
    00
  • python-numpy-指数分布实例详解

    以下是关于“Python NumPy指数分布实例详解”的完整攻略。 NumPy指数分布简介 指数分布是一种连续概率分布,通常用于描述时间间隔或到达事件之间的时间间隔。在NumPy中,可以使用exponential()函数生成指数分布的随机数。 生成指数分布的随机数 可以使用NumPy的exponential()函数生成指数分布的随机数。下面是一个示例代码,演…

    python 2023年5月14日
    00
  • NumPy之矩阵向量线性代数等操作示例

    NumPy是Python中用于科学计算的一个重要库,它提供了许多用于矩阵、向量、线性代数等操作的函数和方法。以下是对NumPy中矩阵、向量、线性代数等操作的详细讲解: 创建矩阵和向量 在NumPy中,我们可以使用numpy.array()函数创建矩阵和向量。以下是一个创建矩阵和向量的示例: import numpy as np # 创建一个二维矩阵 a = …

    python 2023年5月14日
    00
  • Jetson NX 配置 pytorch的问题及解决方法

    下面我将介绍如何在Jetson NX上配置PyTorch,并提供两个示例说明。 Jetson NX配置PyTorch的问题 由于Jetson NX使用的是ARM架构,而PyTorch官方只提供了x86和AMD64架构下的二进制包,所以我们需要手动编译安装PyTorch,或使用第三方提供的二进制包来进行安装。另外,需要注意的是,Jetson NX上需要使用具有…

    python 2023年5月13日
    00
  • Python 实现将大图切片成小图,将小图组合成大图的例子

    我将为您提供Python实现将大图切片成小图,将小图组合成大图的完整攻略。 1. 切片大图 1.1 导入相关库 首先我们需要导入相关库,这里我们需要用到PIL库,PIL(Python Imaging Library)是Python下最常用的图像处理库之一,可以帮助我们完成图像的读取、处理、保存等操作。 from PIL import Image 1.2 读取…

    python 2023年5月13日
    00
  • numpy稀疏矩阵的实现

    NumPy稀疏矩阵的实现 NumPy是Python中一个重要的科学计算库,提供了高效的多维数组和各种派生对象及计算各种函数。在NumPy中,可以使用稀疏矩阵来处理大规模的数据集,以节省内存空间和提高计算效率。本文将详细讲解NumPy稀疏矩阵的实现方法,并提供了两个示例。 稀疏矩阵的实现 稀疏矩阵是指矩阵中大部分元素为0的矩阵。在NumPy中,可以使用稀疏矩阵…

    python 2023年5月13日
    00
  • python numpy矩阵信息说明,shape,size,dtype

    以下是关于“Python NumPy矩阵信息说明的完整攻略”。 shape 在NumPy中,shape是一个元组,它表示数组的维度。例如,一个二维数组的shape为(m,n),其中m表示行数,n表示列数。下面是一个示例: import numpy as np # 创建一个二维数组 a = np.array([[1, 2,3], [4, 5, 6]]) # 输…

    python 2023年5月14日
    00
  • NumPy 与 Python 内置列表计算标准差区别详析

    NumPy 与 Python 内置列表计算标准差区别详析 标准差是统计学中常用的一种测量数据离散程度的方法。在 Python 中,我们可以使用 NumPy 和内置列表来计算标准差。本文将详细介绍 NumPy 和内置列表计算标准差的区别。 NumPy 计算标准差 NumPy 是 Python 中用于科学计算的一个重要库,其中包含了许多用于数组计算的函数。下面是…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部