如何在Python中进行二次回归

在Python中进行二次回归可以使用scikit-learn库中的PolynomialFeatures类和LinearRegression类。

下面是进行二次回归的完整步骤:

1. 导入所需库

import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression

2. 准备数据

准备数据,包括训练集和测试集。首先生成样本数据,以y=x^2为规律生成y的数据。

# 生成样本数据
x = np.arange(-5, 5, 0.1)
y = x**2
y += np.random.randn(len(x)) * 5

将数据划分为训练集和测试集:

# 划分数据集
split_index = int(len(x) * 0.7)

x_train = x[:split_index].reshape(-1, 1) # 将数据变为列向量
y_train = y[:split_index].reshape(-1, 1)

x_test = x[split_index:].reshape(-1, 1)
y_test = y[split_index:].reshape(-1, 1)

3. 特征工程

使用PolynomialFeatures类进行特征工程,将一维的特征数据转化为二维的特征数据,增加训练时的精度。这里使用二次特征转换,即将一维的特征转换为二次的特征。

# 特征工程
poly = PolynomialFeatures(degree=2)
x_train_poly = poly.fit_transform(x_train)
x_test_poly = poly.fit_transform(x_test)

4. 模型训练和预测

使用LinearRegression类进行模型训练和预测。

# 模型训练和预测
lr = LinearRegression()
lr.fit(x_train_poly, y_train)
y_train_predict = lr.predict(x_train_poly)
y_test_predict = lr.predict(x_test_poly)

5. 结果展示

使用Matplotlib进行结果展示,把训练集、测试集和拟合的结果都可视化出来。

# 结果展示
plt.figure(figsize=(12, 8))
plt.scatter(x_train, y_train, color='red')
plt.plot(x_train, y_train_predict, color='blue')

plt.scatter(x_test, y_test, color='green')
plt.plot(x_test, y_test_predict, color='yellow')

plt.title('Polynomial Regression')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

以上就是Python中进行二次回归的完整步骤。接下来我们来看两个示例。

示例1

首先生成100个在[-3,3]之间的随机数作为$x$,然后计算出对应的值$y=3x^2-2x+1$,再加上一些噪声。

# 生成样本数据
np.random.seed(1)
x = np.linspace(-3, 3, 100)
y = 3*x**2 - 2*x + 1 + np.random.randn(100)

进行特征工程和模型训练:

poly = PolynomialFeatures(degree=2) # 二次特征转换
x_poly = poly.fit_transform(x.reshape(-1, 1))
model = LinearRegression()
model.fit(x_poly, y) # 训练模型

得到拟合的结果:

# 显示结果
x_line = np.linspace(-3, 3, 100)
x_line_poly = poly.fit_transform(x_line.reshape(-1, 1))
y_line = model.predict(x_line_poly)

plt.scatter(x, y)
plt.plot(x_line, y_line, color='red')
plt.show()

下图为拟合结果:

示例1

示例2

生成1000个在[0, 2]之间的随机数作为$x$,然后计算出对应的值$y=4x^2-3x+1$,再加上一些噪声。

# 生成样本数据
np.random.seed(2)
x = np.linspace(0, 2, 1000)
y = 4*x**2 - 3*x + 1 + np.random.randn(1000)

进行特征工程和模型训练:

poly = PolynomialFeatures(degree=2) # 二次特征转换
x_poly = poly.fit_transform(x.reshape(-1, 1))
model = LinearRegression()
model.fit(x_poly, y) # 训练模型

得到拟合的结果:

# 显示结果
x_line = np.linspace(0, 2, 1000)
x_line_poly = poly.fit_transform(x_line.reshape(-1, 1))
y_line = model.predict(x_line_poly)

plt.scatter(x, y)
plt.plot(x_line, y_line, color='red')
plt.show()

下图为拟合结果:

示例2

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何在Python中进行二次回归 - Python技术站

(0)
上一篇 2023年3月25日
下一篇 2023年3月25日

相关文章

  • python实现屏保计时器的示例代码

    下面就是Python实现屏保计时器的攻略: 1. 确定界面风格和UI设计 首先,需要考虑屏保计时器的界面风格和UI设计。一般而言,屏保计时器都是比较简单的界面设计,主要包括一个计时器和一些附加信息(如日期、时间、天气等)。因此,可以根据自己的需要确定相关的UI设计,如字体、颜色、布局等。 2. 使用Python实现计时器功能 Python中有多种方式实现计时…

    python 2023年5月19日
    00
  • Python重试库 Tenacity详解(推荐)

    Python重试库Tenacity详解(推荐) 什么是Tenacity Tenacity是一款Python模块,它能够让你轻松地在Python应用程序中实现重试逻辑。这意味着,你可以利用Tenacity重复执行那些可能会失败的操作,例如,网络请求、数据库操作,直到它们成功为止。 Tenacity还支持非常灵活的重试策略,例如通过时间间隔、指定重试次数等方式,…

    python 2023年5月13日
    00
  • python 包 requests 实现请求操作

    1. 什么是 requests 包 requests 是一个 Python 第三方库,用于发送 HTTP 请求。它非常简单易用,但功能强大,并且具有丰富的请求和响应数据处理能力。 2. 安装 requests 包 为了使用 requests,首先需要安装它。可以使用以下命令在终端或命令提示符中安装: pip install requests 3. 发送 GE…

    python 2023年6月3日
    00
  • 利用Python实现某OA系统的自动定位功能

    利用Python实现某OA系统的自动定位功能攻略 前言 随着大数据时代的到来,数据已经成为了企业决策的重要依据,并且数据的采集和处理也越来越需要自动化的方式。而其中OA系统是企业中数据收集的重要来源之一,因此实现自动化定位OA系统的功能也变得尤为重要。但是要想实现OA系统的自动化测试,需要掌握一定的知识。 本篇攻略主要介绍了如何使用Python实现某OA系统…

    python 2023年5月19日
    00
  • python函数实例万花筒实现过程

    下面我将详细讲解 “Python函数实例万花筒” 的实现过程。 什么是 “Python函数实例万花筒” “Python函数实例万花筒” 是一种通过函数实现不同效果的代码组合。该技巧可以更好地组织代码,并避免相似功能代码的重复编写。通过改变函数的参数、输入、输出等,可以让该技巧适用于更多的应用场景。 实现步骤 步骤 1:定义函数 首先需要定义不同的函数,这些函…

    python 2023年5月19日
    00
  • Python中在脚本中引用其他文件函数的实现方法

    在Python中,常常需要在脚本中引用其他文件的函数。为了实现这一目标,可以使用Python的模块化编程方式。模块是一个包含Python定义和语句的文件,其扩展名为.py。Python模块可以包括变量、函数、类和其他Python对象。可以将Python模块看做是一个包含可在其他Python程序中使用的Python代码的集合。 以下是Python中在脚本中引用…

    python 2023年6月3日
    00
  • 对Python多线程读写文件加锁的实例详解

    我们来详细讲解“对Python多线程读写文件加锁的实例详解”的完整攻略。 本文主要是介绍如何使用Python多线程读写文件,并在多线程并发操作时加锁,以保证文件的数据写入不会出问题。常见的场景是,在数据量大的情况下,使用多线程加快数据的插入和查询速度,而在文件读写时,我们需要考虑到多个线程操作同一个文件时,可能会因为竞争出现数据不一致的问题。 下面我们就来看…

    python 2023年5月18日
    00
  • 详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题

    详解Python3安装Pillow后报错没有Pillow模块以及没有PIL模块问题 在Python3中,安装Pillow模块后,可能会出现以下两个问题: 报错没有Pillow模块。 报没有PIL模块。 以下是解决这两个问题的方法: 问题1:报错没有Pillow模块 如果在Python3中安装Pillow模块后,使用import语句导入Pillow模块时,出现…

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