如何在Python中进行二次回归

yizhihongxing

在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中常用的九种预处理方法分享 介绍 在数据分析和机器学习的过程中,预处理数据是非常重要的一步。这个过程包括了数据清洗,数据转换,特征提取和特征选择等等。本文将介绍Python中常用的九种预处理方法,以帮助读者更好的处理数据。 九种预处理方法 以下是Python中常用的九种预处理方法: 数据清洗 数据清洗包括了数据缺失值的处理、异常值的处理、重复值的…

    python 2023年5月13日
    00
  • pip报错“ModuleNotFoundError: No module named ‘pip._vendor.certifi’”怎么处理?

    当使用 pip 安装 Python 包时,可能会遇到 “FileNotFoundError: [Errno 2] No such file or directory: ‘pip'” 错误。这个错误通常是由于 pip 安装不正确或者环境变量配置不正确导致的。以下是详细讲解 pip 报错 “FileNotFoundError: [Errno 2] No such…

    python 2023年5月4日
    00
  • Python性能优化的20条建议

    Python是一种高级编程语言,它的易用性和灵活性使得它成为了数据科学和机器学习领域的首选语言之一。然而Python的解释性质和动态类型检查也使得它的性能相对较慢。在本攻略中,我们将介绍20条Python能优化的建议,以帮助您提高Python代码的性能。 1. 使用局部变量 在Python中,局部变量全局变量更快。因此,尽可能使用局部变量,而不是全局变量。 …

    python 2023年5月14日
    00
  • 一些Python 5行代码的神奇操作汇总

    那么现在我将为您讲解“一些Python 5行代码的神奇操作汇总”的完整攻略。 一些Python 5行代码的神奇操作汇总 简介 这篇文章主要介绍一些Python 5行代码的神奇操作,让大家在编写Python代码时更加高效。 内容 列表去重 new_list = list(set(old_list)) 有时候我们会遇到需要对列表进行去重的情况,这里给出了用5行代…

    python 2023年5月19日
    00
  • Python探针完成调用库的数据提取

    为了让讲解更加详细,我将分为以下几个步骤来讲解Python探针完成调用库的数据提取的完整攻略: 安装Python探针 安装依赖库 调用库进行数据提取 示例说明 下面分别来进行讲解。 1. 安装Python探针 安装Python探针是从源头开始进行数据提取的必要步骤。可以使用一些常用的Python探针,如pyinstrument、cProfile等。在这里以p…

    python 2023年6月3日
    00
  • Python编程快速上手——强口令检测算法案例分析

    下面是详细讲解“Python编程快速上手——强口令检测算法案例分析”的完整攻略,包括算法原理、Python实现和两个示例说明。 算法原理 强口令检测法是一种基于规则的算法,其主要思想是通过一系列规则来判断口令是否强壮。强口令通常包括大小写字母、数字和特殊字符,长度较长,且不易被猜测。强口令检测算法的实现过程如下: 判断口令长度是否符合要求。 判断口令是否包含…

    python 2023年5月14日
    00
  • python-str,list,set间的转换实例

    以下是“Python中str、list、set间的转换实例”的完整攻略。 1. str、list、set的概念 在Python中str、list、set都是常用的数据。 str:字符串类型,用于表示文本数据。 list:列表类型,用于存储一有序的元素。 set:集合类型用于存储一组无序的、唯一的元素。 2. str、list、set间的转换 在Python中…

    python 2023年5月13日
    00
  • python实现输入任意一个大写字母生成金字塔的示例

    实现输入任意一个大写字母生成金字塔的示例,可以通过以下代码来实现: def pyramid(letter): ascii_value = ord(letter) for i in range(1, ascii_value – 64 + 1): print(" " * (ascii_value – i – 64), end="&q…

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