ML 系列:机器学习和深度学习的深层次总结(05)非线性回归

news2024/11/17 4:31:45

图 1.不同类型的回归

一、说明

        非线性回归是指因变量和自变量之间存在非线性关系的模型。该模型比线性模型更准确、更灵活,可以获取两个或多个变量之间复杂关系的各种曲线。

二、关于

        当数据之间的关系无法用直线预测并且呈曲线形式时,我们应该使用非线性模型。与线性回归不同,非线性模型中没有数据线性的假设。图 2 显示了线性和非线性数据。

图 2.线性数据(左侧)和非线性数据(右侧)

        在图 2 中,横轴上与工作位置 (Position level) 和纵轴上的薪金 (Salary) 相关的数据表明这些数据具有非线性属性,线性回归显示了数据之间的关系。

图 3.线性回归的数据(左侧)和拟合模型(右侧)

        很明显,线性回归无法为数据拟合一条好的线,我们需要训练一个可以从数据中发现更复杂的关系的模型。因此,我们引入多项式回归来克服这个问题,这有助于识别自变量和因变量之间的曲线关系。

        多项式回归是线性回归的一种形式,由于因变量和自变量之间的非线性关系,我们向线性回归添加了许多项以将其转换为多项式回归。这种方法是这样的,在训练模型之前,在预处理阶段,使用一种称为特征转换的方法,我们将线性回归转换为多项式。图 4 显示了从第一次(简单线性回归)到第四次的多项式。

图 4.不同程度的多项式回归

        在图 4 中,“Degree” 是指多项式次数,如您所见,一阶多项式是简单的线性回归,多项式次数越高,数据可以拟合的曲线就越复杂。

        模型参数是在训练期间通过机器学习算法学习的值,例如线性回归中从原点开始的斜率和宽度;而超参数是由人类在训练之前确定的。多项式度是一个超参数,我们应该根据数据的复杂度来确定它。在学习过程中,高次多项式会导致过拟合,而低次多项式可能会导致欠拟合,因此我们必须为多项式选择最优的次数值(我将解释欠拟合和过拟合的精确和科学含义)。

三、理解多项式回归模型

3.1 监督机器学习

在监督学习中,算法使用标记数据集进行训练,并学习每个输入类别。我们使用测试数据(训练集的子集)评估该方法,并在完成训练阶段后预测结果。监督机器学习有两种类型:

  • 分类
  • 回归

3.2 分类与回归

回归分类
预测连续变量对输出变量进行分类
连续的分类
天气预报、市场趋势性别分类、疾病诊断
链接输入和连续输出将输入分类

3.3 为什么我们需要回归?

        回归分析有助于执行以下任务:

  • 为了解解释成分的人预测因变量的值
  • 评估解释变量对因变量的影响

3.4 什么是多项式回归?

        在多项式回归中,我们使用 x 的 n 次多项式来描述独立变量 x 和因变量 y 之间的关系。多项式回归,表示为 E(y | x),表示拟合 x 值和 y 的条件均值之间的非线性关系。通常,这对应于最小二乘法。最小二乘法根据高斯-马尔可夫定理最小化系数方差。这代表一种线性回归,其中因变量和独立变量呈现曲线关系,并且多项式方程适合数据。

        我们将在文章后面深入探讨这个概念。机器学习也是多元线性回归的一个子集,通过将额外的多项式元素纳入方程式,将其转换为多项式回归方程来实现。

四、 多项式回归的类型

        二次方程是二阶多项式方程的统称。另一方面,这个次数可以达到 n 次。以下是多项式回归的分类:

  1. 线性 – 如果次数为 1
  2. 二次函数 – 如果次数为 2
  3. 三次——若次数为 3,则以次数为基础继续计算。

4.2 多项式回归假设

我们无法处理所有数据集并使用多项式回归机器学习来做出更好的判断。我们仍然可以做到这一点,但应该对数据集进行特定的约束,以便获得最佳的多项式回归结果。

  • 因变量的行为可以通过因变量和一组 k 个独立因素之间的线性或曲线(加性联系)来描述。
  • 独立变量之间缺乏任何相互关系。
  • 我们采用具有独立分布误差的数据集,其服从正态分布,平均值为零,方差为常数。

4.3 用简单数学来理解多项式回归

这里我们处理数学,而不是深入研究,只需了解基本结构,我们都知道线性方程的方程是一条直线,如果我们有很多特征,那么我们选择多元回归,只增加特征部分,那么多项式怎么样,它不是增加而是将结构改变为二次方程,你可以从图中直观地理解:

4.4 线性回归与多项式回归

        与其关注线性回归和多项式回归之间的区别,不如先从线性回归开始,这样我们就可以理解多项式回归的重要性。我们建立了模型,并意识到它的表现非常糟糕。我们检查实际值和我们预测的最佳拟合线之间的差异,看起来真实值在图表上有一条曲线,但我们的线远没有达到点的平均值。这就是多项式回归发挥作用的地方;它预测与数据模式(曲线)相匹配的最佳拟合线。

        线性回归和多项式回归之间的一个重要区别是,多项式回归不需要数据集中的独立变量和因变量之间存在线性关系。当线性回归模型无法捕捉数据中的点,而线性回归无法充分表示最优值时,我们使用多项式回归。

        在深入研究该主题之前,让我们首先通过编程和可视化来了解为什么在某些情况下我们更喜欢多项式回归而不是线性回归,比如数据集的非线性条件。

Python 代码

让我们使用回归分析来分析随机数据:

x = x[:, np.newaxis]
 y = y[:, np.newaxis]
 model = LinearRegression()
 model.fit(x, y)

y_pred = model.predict(x)
plt.scatter(x, y, s=10)
plt.plot(x, y_pred, color='r')
plt.show()

直线无法捕捉数据中的模式。这是欠拟合的一个例子。

让我们从技术角度来看这个问题,使用均方根误差 (RMSE) 和判别系数 (R2) 等指标。RMSE 表示回归模型能够以绝对值预测响应变量的值,而 R2 表示模型能够以百分比形式预测响应变量的值。

import sklearn.metrics as metrics
mse = metrics.mean_squared_error(x,y)
rmse = np.sqrt(mse) 
r2 = metrics.r2_score(x,y)

print('RMSE value:',rmse)
print('R2 value:',r2)

RMSE value: 93.47170875128153
R2 value: -786.2378753237103

4.5 多项式回归中的非线性数据

我们需要增强模型的复杂性来克服欠拟合。从这个意义上讲,我们需要以非线性的方式进行线性分析,在统计上,使用多项式,

因为与特征相关的权重仍然是线性的,所以这仍然是一个线性模型。x2(x 平方)只是一个函数。然而,我们试图拟合的曲线本质上是二次的。

让我们直观地看一下上述概念,以便更好地理解,一张图片比文字更有力,

from sklearn.preprocessing import PolynomialFeatures
polynomial_features1 = PolynomialFeatures(degree=2)
x_poly1 = polynomial_features1.fit_transform(x)
model1 = LinearRegression()
model1.fit(x_poly1, y)
y_poly_pred1 = model1.predict(x_poly1)

from sklearn.metrics import mean_squared_error, r2_score
rmse1 = np.sqrt(mean_squared_error(y,y_poly_pred1))
r21 = r2_score(y,y_poly_pred1)
print(rmse1)
print(r21)

49.66562739942289
0.7307277801966172

图中清楚地显示二次曲线比直线更能吻合数据。

import operator
plt.scatter(x, y, s=10)
# sort the values of x before line plot
sort_axis = operator.itemgetter(0)
sorted_zip = sorted(zip(x,y_poly_pred), key=sort_axis)
x, y_poly_pred1 = zip(*sorted_zip)
plt.plot(x, y_poly_pred1, color='m')
plt.show()

polynomial_features2= PolynomialFeatures(degree=3)
x_poly2 = polynomial_features2.fit_transform(x)
model2 = LinearRegression()
model2.fit(x_poly2, y)
y_poly_pred2 = model2.predict(x_poly2)

rmse2 = np.sqrt(mean_squared_error(y,y_poly_pred2))
r22 = r2_score(y,y_poly_pred2)
print(rmse2)
print(r22)

48.00085922331635
0.7484769902353146

plt.scatter(x, y, s=10)
# sort the values of x before line plot
sort_axis = operator.itemgetter(0)
sorted_zip = sorted(zip(x,y_poly_pred2), key=sort_axis)
x, y_poly_pred2 = zip(*sorted_zip)
plt.plot(x, y_poly_pred2, color='m')
plt.show()

多项式回归的散点图

polynomial_features3= PolynomialFeatures(degree=4)
x_poly3 = polynomial_features3.fit_transform(x)
model3 = LinearRegression()
model3.fit(x_poly3, y)
y_poly_pred3 = model3.predict(x_poly3)

rmse3 = np.sqrt(mean_squared_error(y,y_poly_pred3))
r23 = r2_score(y,y_poly_pred3)
print(rmse3)
print(r23)

40.009589710152866
0.8252537381840246

plt.scatter(x, y, s=10)

# sort the values of x before line plot

sort_axis = operator.itemgetter(0)

sorted_zip = sorted(zip(x,y_poly_pred3), key=sort_axis)

x, y_poly_pred3 = zip(*sorted_zip)

plt.plot(x, y_poly_pred3, color='m')

plt.show()

与线性相比,我们可以观察到 RMSE 下降而 R2 分数增加。

五、过度拟合与欠拟合

我们不断增加度数,我们会看到最好的结果,但是如果我们得到的某个特定值的 r2 值为 100,就会出现过度拟合的问题。

在线性分析数据集时,我们遇到欠拟合问题

多项式回归可以纠正这个问题。

然而,当将度参数微调到最优值时,我们遇到了过拟合问题,导致 r2 值为 100%。结论是,我们必须避免过拟合和欠拟合问题。

注意:为了避免过度拟合,我们可以增加训练样本的数量,这样算法就不会学习系统的噪声,变得更加泛化。

5.1 偏差与方差的权衡

我们如何选择最佳模型?要解决这个问题,我们必须首先理解偏差和方差之间的权衡。

错误是由于模型在拟合数据时做出的简单假设而导致的,这种假设被称为偏差。偏差过大表明模型无法捕捉数据模式,从而导致拟合不足。

复杂模型试图匹配数据时所导致的错误称为方差。当模型方差较大时,它会忽略大多数数据点,从而导致数据过度拟合。

从上面的程序中,当度为 1 时(即在线性回归中),它表示欠拟合,即高偏差和低方差。而当我们得到 r2 值 100 时,即低偏差和高方差,即过拟合

随着模型复杂度的增加,偏差会减少,而方差会增加,反之亦然。理论上,机器学习模型应该具有最小的方差和偏差。然而,两者兼具几乎是不可能的。因此,必须做出权衡,以建立一个在训练数据和未知数据上都表现良好的强大模型。

5.2 维度 —— 如何找到适合自己的维度?

我们需要找到正确的多项式参数次数,以避免过度拟合和欠拟合问题:

  • 前向选择:增加度参数,直到得到最优结果
  • 向后选择:降低度参数,直到达到最优

六、损失和成本函数——多项式回归

成本函数是一种评估机器学习模型对给定数据集的性能的函数。成本函数是一个实数,用于计算预期值和期望值之间的差异。很多人不知道成本函数和损失函数之间的区别。换句话说,成本函数是数据中 n 个样本误差的平均值,而损失函数是单个数据点的误差。换句话说,损失函数指的是单个训练示例,而成本函数指的是完整的训练集。

均方误差也可以用作多项式回归的成本函数;但是,方程会有所不同。

我们现在知道成本函数的最优值是 0 或者接近于 0。为了得到最优的成本函数,我们可以使用梯度下降法,它可以改变权重,从而减少错误。

6.1 梯度下降 - 多项式回归

梯度下降是一种确定函数参数(系数)值的方法,目的是最小化成本函数(成本)。它可以降低成本函数(最小化 MSE 值)并实现最佳拟合线。

在函数开始时,斜率 (m) 和斜率截距 (b) 的值将设置为 0,并引入学习率 (α)。学习率 (α) 设置为一个极低的数字,可能在 0.01 和 0.0001 之间。学习率是优化算法中的一个调整参数,它设置每次迭代向成本函数最小值移动时的步长。然后根据成本函数方程的 m 确定偏导数,以及关于 b 的导数。

借助于下列方程,一旦确定了导数,a 和 b 就会得到更新。m 和 b 的导数已在上文推导完毕,为 α。

梯度表示损失函数最陡峭的上升,但最陡峭的下降是梯度的倒数,这就是为什么梯度从权重(m 和 b)中减去的原因。更新 m 和 b 值的过程一直持续到成本函数达到或接近理想值 0。m 和 b 的当前值将是最佳拟合线的最优值。

6.2 多项式回归的实际应用

我们将从导入库开始:

#with dataset
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
dataset = pd.read_csv('Position_Salaries.csv')
dataset

Segregating the dataset into dependent and independent features,

X = dataset.iloc[:,1:2].values  
y = dataset.iloc[:,2].values

Then trying with linear regression,

from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
lin_reg.fit(X,y)

视觉线性回归:

plt.scatter(X,y, color='red')
plt.plot(X, lin_reg.predict(X),color='blue')
plt.title("Truth or Bluff(Linear)")
plt.xlabel('Position level')
plt.ylabel('Salary')
plt.show()

线性回归图

from sklearn.preprocessing import PolynomialFeatures
poly_reg = PolynomialFeatures(degree=2)
X_poly = poly_reg.fit_transform(X)

lin_reg2 = LinearRegression()

lin_reg2.fit(X_poly,y)

七、多项式回归的应用

        该方程通过各种实验技术获得结果。独立变量和因变量具有明确的联系。

  • 用于查明沉积物中存在哪些同位素。
  • 用于观察各种疾病在人群中的传播情况
  • 合成创造的研究。

7.1 多项式回归的优势

        因变量和自变量之间联系的最佳近似是多项式。它可以容纳各种各样的函数。多项式是一种可以容纳各种曲率的曲线。

7.2 多项式回归的缺点

        数据中的一个或两个异常值可能会对非线性分析的结果产生重大影响。这些结果过于依赖异常值。此外,用于检测非线性回归中异常值的模型验证方法比线性回归中的方法要少。

八、结论

        监督式机器学习包括分类和回归,其中回归对于预测连续值至关重要。多项式回归是一种回归形式,它捕捉复杂的关系,需要仔细选择度数以避免过度拟合或欠拟合。梯度下降优化了多项式模型,尽管存在固有的缺点,但仍在各个领域找到了实际应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2154096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL篇(索引)(持续更新迭代)

目录 一、简介 二、有无索引情况 1. 无索引情况 2. 有索引情况 3. 优劣势 三、索引结构 1. 简介 2. 存储引擎对于索引结构的支持情况 3. 为什么InnoDB默认的索引结构是Btree而不是其它树 3.1. 二叉树(BinaryTree) 3.2. 红黑树(RB&a…

6、等级保护政策内容

数据来源:6.等级保护政策内容_哔哩哔哩_bilibili 信息安全产品管理与响应 等级管理 对信息系统中使用的信息安全产品实行按等级管理,信息安全事件应分等级响应与处置。 预测评服务由测评公司和咨询公司提供预测评服务,根据技术要求和测评要…

高校心理辅导系统:Spring Boot技术实现指南

目 录 摘 要 I ABSTRACT II 1绪 论 1 1.1研究背景 1 1.2设计原则 1 1.3论文的组织结构 2 2 相关技术简介 3 2.1Java技术 3 2.2B/S结构 3 2.3MYSQL数据库 4 2.4Springboot框架 4 3 系统分析 6 3.1可行性分析 6 3.1.1技术可行性 6 3.1.2操作可行性 6 3.1.3经济可行性 6 3.1.4法律…

[OpenGL]使用OpenGL绘制带纹理三角形

一、简介 本文介绍了如何使用使用OpenGL绘制带纹理三角形。 在绘制带纹理的三角形时, 首先使用.h读取准备好的.png格式的图片作为纹理,然后在fragment shader中使用 ... in vec2 textureCoord; uniform sampler2D aTexture1; void main() {FragColor …

嵌入式 开发技巧和经验分享

文章目录 前言嵌入式 开发技巧和经验分享目录1.1嵌入式 系统的 定义1.2 嵌入式 操作系统的介绍1.3 嵌入式 开发环境1.4 编译工具链和优化1.5 嵌入式系统软件开发1.6 嵌入式SDK开发2.1选择移植的系统-FreeRtos2.2FreeRtos 移植步骤2.3 系统移植之中断处理2.4系统移植之内存管理2…

奥比中光深度相机相关使用内容

奥比中光深度相机相关使用内容 Windows平台测试官方软件关于python环境的配置1、安装CMake2、安装Visual Studio3、项目地址下载4、配置Visual Studio5、完成基于Python的SDK配置官网教学视频地址 3D视觉开发者社区 官方文档地址 效果: Windows平台测试官方软件 Window…

《高等代数》线性相关和线性无关(应用)

说明:此文章用于本人复习巩固,如果也能帮到大家那就更加有意义了。 注:1)线性相关和线性无关的证明方法中较为常用的方法是利用秩和定义来证明。 2)此外,线性相关和线性无关的证明常常也会用到反证法。 3&…

简单水印通过python去除

简单水印通过python去除 先看效果,如果效果不是你需要的就可以不用浪费时间。 注意:这种主要还是对应的文字在水印上方的情况,同时最好不要有渐变水印否则可能最后输出的图片的水印还会有所残留,不过还是学习使用,相信…

DOS(Disk Operating System,磁盘操作系统)常用指令

目录 背景: 早期探索: DOS之父: 发展历程: 常用指令: 进入命令: 操作1.进入和回退: 操作2.增、删: 操作3.其它: 总结: 背景: 早期探索: DOS(Disk Operating System,磁盘操作系统)在…

【Web】PolarCTF2024秋季个人挑战赛wp

EZ_Host 一眼丁真命令注入 payload: ?host127.0.0.1;catf* 序列一下 exp: <?phpclass Polar{public $lt;public $b; } $pnew Polar(); $p->lt"system"; $p->b"tac /f*"; echo serialize($p);payload: xO:5:"Polar":2:{s:2:"…

VSCode C++ Tasks.json基本信息介绍

前言 上文介绍了VSCode在Windows环境下如果创建C项目和编译多个文件项目&#xff0c;但是只是粗略的说明了一下Tasks.json文件。今天对tasks.json进行进一步的了解。 内容 Tasks文件 {"version": "2.0.0","tasks": [{"type": &quo…

C#进阶-基于雪花算法的订单号设计与实现

在现代电商系统和分布式系统中&#xff0c;高效地生成全局唯一的订单号是一个关键需求。订单号不仅需要唯一性&#xff0c;还需要具备一定的趋势递增性&#xff0c;以满足数据库索引和排序的需求。本文将介绍如何在C#中使用雪花算法&#xff08;Snowflake&#xff09;设计和实现…

IntelliJ IDEA 2024创建Java项目

一、前言 本文将带领大家手把手创建纯Java项目&#xff0c;不涉及Maven。如有问题&#xff0c;欢迎大家在评论区指正说明&#xff01; 二、环境准备 名称版本jdk1.8idea2024 1.4操作系统win10 jdk的安装教程 idea的安装教程 三、创建项目 首先我们点击新建项目 然后我们…

基于SpringBoot+Vue+MySQL的国产动漫网站

系统展示 用户前台界面 管理员后台界面 系统背景 随着国内动漫产业的蓬勃发展和互联网技术的快速进步&#xff0c;动漫爱好者们对高质量、个性化的国产动漫内容需求日益增长。然而&#xff0c;市场上现有的动漫平台大多以国外动漫为主&#xff0c;对国产动漫的推广和展示存在不…

网页聊天——测试报告——Selenium自动化测试

一&#xff0c;项目概括 1.1 项目名称 网页聊天 1.2 测试时间 2024.9 1.3 编写目的 对编写的网页聊天项目进行软件测试活动&#xff0c;揭示潜在问题&#xff0c;总结测试经验 二&#xff0c;测试计划 2.1 测试环境与配置 服务器&#xff1a;云服务器 ubuntu_22 PC机&am…

十六、电压比较电路

电压比较电路 1、电压比较器的作用和工作过程 2、比较器的输入-输出特性曲线, 3、如何构成迟滞比较器。

Transformer模型-7- Decoder

概述 Decoder也是N6层堆叠的结构&#xff0c;每层被分3层: 两个注意力层和前馈网络层&#xff0c;同Encoder一样在主层后都加有Add&Norm&#xff0c;负责残差连接和归一化操作。 Encoder与Decoder有三大主要的不同&#xff1a; 第一层 Masked Multi-Head Attention: 采用…

SpringCloud Alibaba 工程搭建详细教程

使用 Spring Cloud Alibaba 的主要目的是解决单体应用的痛点&#xff0c;并利用微服务架构的优势来构建高扩展性、可靠的分布式系统。 1. 单体应用的痛点 单体应用虽然在小型项目中优势明显&#xff0c;但随着业务复杂性增加&#xff0c;逐渐暴露出许多问题&#xff1a; 代码…

Python | Leetcode Python题解之第420题强密码检验器

题目&#xff1a; 题解&#xff1a; class Solution:def strongPasswordChecker(self, password: str) -> int:n len(password)has_lower has_upper has_digit Falsefor ch in password:if ch.islower():has_lower Trueelif ch.isupper():has_upper Trueelif ch.isdi…

Datawhale X 南瓜书 task02学习笔记

算法原理引入 样本点通常应该在模型的2侧&#xff0c;原因&#xff1a;在实际中&#xff0c;因为某种不可控的因素&#xff0c;测出来的样本点肯定是有误差的。如果样本数据点都在模型上&#xff0c;则说明在建立模型时&#xff0c;把误差也考虑进去了&#xff0c;这就是我们说…