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

yizhihongxing

让我来详细讲解一下“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日

相关文章

  • 解决numpy数组互换两行及赋值的问题

    下面是关于“解决Numpy数组互换两行及赋值的问题”的完整攻略,包含了两个示例。 互换两行 在Numpy中,可以使用切片操作来互换数组的两行。下面是一个示例,演示如何互换数组的第1行和第2行。 import numpy as np # 创建一个二维数组 a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 互换第…

    python 2023年5月14日
    00
  • Python numpy有哪些常用数据类型

    Python NumPy 常用数据类型 NumPy是Python中一个非常流行的学计算库,提供了许多常用函数和工具。NumPy的要点是提供高效的多维数组,可以快速进行数学运算和数据处理。本攻略将详细讲解NumPy中常用的数据类型。 NumPy中的数据类型 NumPy中的数据类型是指数组中元素的类型。NumPy中的数据类型包括以下几种: bool:布尔类型,只…

    python 2023年5月13日
    00
  • Tensorflow加载Vgg预训练模型操作

    TensorFlow是一个强大的机器学习框架,可以用来搭建深度学习模型。其中VGG是非常常用的深度卷积神经网络之一,在TensorFlow中预训练的VGG模型也已经被提供。在本文中,我们将详细介绍如何在TensorFlow中加载VGG预训练模型,以及如何使用它来进行图像分类。 1. 下载预训练模型 首先需要下载VGG预训练模型。可以从TensorFlow官网…

    python 2023年5月13日
    00
  • 详解python如何通过numpy数组处理图像

    以下是关于“详解Python如何通过NumPy数组处理图像”的完整攻略。 背景 NumPy是Python中常用的科学计算库,可以用于处理大量的数值数据。在图像处理中,我们可以使用NumPy数组来表示图像,并使用NumPy提供的函数和工具来处理图像。本攻略将介绍如何使用NumPy数组处理图像,并提供两个示例来演示如何使用这些库。 示例1:读取和显示图像 在Py…

    python 2023年5月14日
    00
  • 使用NumPy读取MNIST数据的实现代码示例

    以下是关于“使用NumPy读取MNIST数据的实现代码示例”的完整攻略。 MNIST数据集简介 MNIST数据集是一个手写数字别数据集,包含60000个训练样本和10000个测试样本。每个样本是一个28x的灰度图像,标签为0-9之间的数字。 NumPy读取MNIST数据集 使用NumPy可以方便地读取MN数据集。下面是一个示例代码,演示了如何使用NumPy读…

    python 2023年5月14日
    00
  • numpy中的converters和usecols用法详解

    在NumPy中,loadtxt()函数是一个常用的函数,用于从文本文件中加载数据到NumPy数组中。在使用loadtxt()函数时,可以使用converters和usecols参数来指数据类型转换和读取列数。本文将详细讲解“numpy中的converters和usecols用法详解”,包括如何使用这个参数的方法。 示例1:使用converters参数 在这个…

    python 2023年5月14日
    00
  • 支持python的分布式计算框架Ray详解

    支持Python的分布式计算框架Ray详解 Ray是一个支持Python的分布式计算框架,它可以帮助用户轻松地编写并行和分布式应用程序。Ray提供了一组API,使得编写行和分布式应用程序变得更加容易。本文将详细介绍Ray的特点、使用方法和示例。 Ray的特点 Ray具有以下特点: 简单易用:Ray提供了一组简单易用的API,使得编写并行和分布式应用程序变得更…

    python 2023年5月14日
    00
  • Python&&GDAL实现NDVI的计算方式

    NDVI(归一化植被指数)是一种用于评估植被生长和覆盖程度的指标。在遥感图像处理中,可以使用Python和GDAL库来计算NDVI。本文将介绍如何使用Python和GDAL算NDVI,并提供两个示例。 示例一:计算单张遥感图像的NDVI 要计算单遥感图像的VI,可以使用以下步骤: 导入必要的库 import gdal import numpy as np 打…

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