深度学习常见回归分支算法逐步分析,各种回归之间的优缺点,适用场景,举例演示
文章目录
- 1、线性回归(Linear Regression)
- 1.1 优点
- 1.2 缺点
- 1.3 适用场景
- 1.4 图例说明
- 2、多项式回归(Polynomial Regression)
- 2.1 优点
- 2.2 缺点
- 2.3 适用场景
- 2.4 图例说明
- 3、决策树回归(Decision Tree Regression)
- 3.1 优点
- 3.2 缺点
- 3.3 适用场景
- 4、随机森林回归(Random Forest Regression)
- 4.1 优点
- 4.2 缺点
- 4.3 适用场景
- 5、逻辑斯蒂回归(Logistic Regression)
- 5.1 优点
- 5.2 缺点
- 5.3 适用场景
- 6、弹性网络回归(Elastic Net Regression)
- 6.1 优点
- 6.2 缺点
- 6.3 适用场景
- 7、岭回归(Ridge Regression)
- 7.1 优点
- 7.2 缺点
- 7.3 适用场景
- 8、Lasso回归(Lasso Regression)
- 8.1 优点
- 8.2 缺点
- 8.3 适用场景
回归的概念:回归算法是一种用于预测连续数值输出的监督学习算法,可以根据输入特征预测一个或多个目标变量。它有多个分支,每个分支都有其独特的优缺点。下面是深度学习中几类回归变种:
1、线性回归(Linear Regression)
线性回归算法可以说是回归算法里面最简单的一种。
1.1 优点
- 简单且易于解释。
- 计算效率高,适用于大规模数据集。
- 在特征与目标之间存在线性关系时效果良好。
1.2 缺点
- 无法处理非线性关系。对于一些异常值,无法做到拟合曲线。
- 对异常值敏感。
- 需要满足线性回归假设(如线性关系、残差正态分布等)。
1.3 适用场景
适用场景:预测数值型目标,建立输入特征和输出之间的线性关系。
案例:预测房价。根据房屋特征(面积、卧室数量等),建立线性关系来估计房价。
1.4 图例说明
代码:
import matplotlib.pyplot as plt
import numpy as np# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 数据
area = np.array([50, 75, 100, 120, 150])
price = np.array([120, 180, 220, 250, 300])# 执行线性回归
coefficients = np.polyfit(area, price, 1)
m, b = coefficients# 创建预测模型
predict_model = np.poly1d(coefficients)# 生成预测值
predicted_price = predict_model(area)# 绘制原始数据点
plt.scatter(area, price, label='实际数据点')# 绘制线性回归线
plt.plot(area, predicted_price, label=f'线性回归: y = {m:.2f}x + {b:.2f}', color='red')# 添加标签和图例
plt.xlabel('房屋面积(平方米)')
plt.ylabel('价格(万元)')
plt.title('线性回归')
plt.legend()
# 显示图形
plt.show()
生成对应图像:
深度学习中的线性回归
代码:
import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
import matplotlib.pyplot as plt# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 生成模拟数据
np.random.seed(42)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)# 转换为PyTorch的Tensor
X_tensor = torch.from_numpy(X).float()
y_tensor = torch.from_numpy(y).float()# 定义线性回归模型
class LinearRegressionModel(nn.Module):def __init__(self, input_size, output_size):super(LinearRegressionModel, self).__init__()self.linear = nn.Linear(input_size, output_size)def forward(self, x):return self.linear(x)# 实例化模型
input_size = 1
output_size = 1
model = LinearRegressionModel(input_size, output_size)# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)# 训练模型
num_epochs = 100
for epoch in range(num_epochs):# Forward passoutputs = model(X_tensor)loss = criterion(outputs, y_tensor)# Backward pass and optimizationoptimizer.zero_grad()loss.backward()optimizer.step()# 打印训练过程中的损失if (epoch+1) % 10 == 0:print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')# 绘制模型预测结果和真实数据
predicted = model(X_tensor).detach().numpy()
plt.scatter(X, y, label='实际数据点')
plt.plot(X, predicted, label='模型预测', color='red')
plt.xlabel('房屋面积(平方米)')
plt.ylabel('价格(万元)')
plt.title('线性回归')
plt.legend()
plt.show()
生成对应的图像:
是不是看着比简单的回归复杂很多,深度模型解决的回归问题还要比这复杂得多。
2、多项式回归(Polynomial Regression)
2.1 优点
- 可以捕捉特征和目标之间的非线性关系。
- 相对简单实现。
2.2 缺点
- 可能会过度拟合数据,特别是高阶多项式。
- 需要选择适当的多项式阶数。
2.3 适用场景
适用场景:处理非线性关系,通过添加多项式特征来拟合曲线。
案例:预测股票价格。使用多项式回归来拟合价格与时间之间的非线性关系。
2.4 图例说明
代码:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.metrics import mean_squared_error# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 生成模拟数据
np.random.seed(42)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)# 选择多项式次数
degree = 2# 构建设计矩阵
poly_features = PolynomialFeatures(degree=degree, include_bias=False)
X_poly = poly_features.fit_transform(X)# 使用线性回归拟合多项式特征
lin_reg = LinearRegression()
lin_reg.fit(X_poly, y)# 预测
X_new = np.linspace(0, 2, 100).reshape(-1, 1)
X_new_poly = poly_features.transform(X_new)
y_new = lin_reg.predict(X_new_poly)# 绘制结果
plt.scatter(X, y, label='True data')
plt.plot(X_new, y_new, 'r-', label='Predictions', linewidth=2)
plt.xlabel('X')
plt.ylabel('y')
plt.title('多项式线性回归')
plt.legend()
plt.show()# 评估模型
y_pred = lin_reg.predict(X_poly)
mse = mean_squared_error(y, y_pred)
print(f'Mean Squared Error: {mse:.4f}')
生成对应图像:
3、决策树回归(Decision Tree Regression)
3.1 优点
- 能够处理非线性关系。
- 不需要对数据进行特征缩放。
- 结果易于可视化和解释。
3.2 缺点
- 容易过拟合。树越深,越可能发生过拟合现象。
- 对数据中的噪声敏感。
- 不稳定,小的数据变化可能导致不同的树结构。
3.3 适用场景
适用场景:适用于非线性数据,创建树状结构进行回归预测。
案例:天气预测。基于多个天气因素,预测温度。
4、随机森林回归(Random Forest Regression)
4.1 优点
- 降低了决策树回归的过拟合风险。
- 能够处理高维数据。
4.2 缺点
- 失去了部分可解释性。
- 难以调整模型参数。
4.3 适用场景
适用场景:用于回归任务,具有高度的鲁棒性。
案例:股票价格预测。使用多个随机森林树来预测未来的股票价格。
5、逻辑斯蒂回归(Logistic Regression)
5.1 优点
- 用于二分类问题,广泛应用于分类任务。
- 输出结果可以解释为概率。
5.2 缺点
- 仅适用于二分类问题。这是它的优点,也是它的缺点。
- 对于复杂的非线性问题效果可能不佳。对线性问题解答较好。
5.3 适用场景
适用场景:用于二分类或多分类任务,预测概率分布。
案例:垃圾邮件分类。根据邮件内容来判断是否是垃圾邮件。
6、弹性网络回归(Elastic Net Regression)
6.1 优点
- 综合了岭回归和Lasso回归的优点。
- 可以应对多重共线性和特征选择。
6.2 缺点
- 需要调整两个正则化参数。
6.3 适用场景
适用场景:结合了 Ridge 和 Lasso 的优点,适用于高维数据和特征选择。
案例:医学诊断。处理具有大量特征的患者数据,选择最相关的特征。
7、岭回归(Ridge Regression)
7.1 优点
- 可以解决多重共线性问题。
- 对异常值不敏感。
7.2 缺点
- 不适用于特征选择,所有特征都会被考虑。
- 参数需要调整。
7.3 适用场景
适用场景:处理多重共线性问题,添加L2正则化以防止过拟合。
案例:预测学生成绩。处理多个高度相关的特征,如学习时间、家庭支持等。
8、Lasso回归(Lasso Regression)
8.1 优点
- 可以用于特征选择,趋向于将不重要的特征的系数推到零。
- 可以解决多重共线性问题。
8.2 缺点
- 对于高维数据,可能会选择较少的特征。
- 需要调整正则化参数。
8.3 适用场景
适用场景:用于特征选择和稀疏性,通过L1正则化将一些特征的权重设为零。
案例:预测产品销量。确定哪些产品特征对销售额的影响最大。
相关文章:

深度学习常见回归分支算法逐步分析,各种回归之间的优缺点,适用场景,举例演示
文章目录 1、线性回归(Linear Regression)1.1 优点1.2 缺点1.3 适用场景1.4 图例说明 2、多项式回归(Polynomial Regression)2.1 优点2.2 缺点2.3 适用场景2.4 图例说明 3、决策树回归(Decision Tree Regression&#…...

Programming Contest 2023(AtCoder Beginner Contest 331)D题 Tile Pattern --- 题解
目录 D - Tile Pattern 题目大意: 思路: 代码: D - Tile Pattern D - Tile Pattern (atcoder.jp) 题目大意: 给你一个n和q,n为局部棋盘大小(n*n) 并且给出局部棋盘中黑白子位置的放置情况,q为查询次数…...

Google测试框架googletest简介与使用方法
环境准备(Ubuntu) 下载 git clone https://github.com/google/googletest.git 安装 cd googletest // 创建build目录 mkdir build cd build //编译安装 cmake .. make sudo make install 检查是否安装成功 ls /usr/local/lib// 存在以下文件则说明…...

进程的创建:fork()
引入 创建进程的方式我们已经学习了一个!在我们运行指令(或者运行我们自己写的可执行程序)的时候不就是创建了一个进程嘛?那个创建进程的方式称为指令级别的创建子进程! 那如果我们想要在代码中创建进程该怎么办呢? fork() for…...

Fabric:创建应用通道
搭建自定义网络可以参考文章: https://blog.csdn.net/yeshang_lady/article/details/134113296 1 创建通道 网络搭建完成之后,就可以开始创建通道了。Fabric V2.5.4中可以在不创建系统通道的情况下直接创建应用通道。 1.1 修改配置文件 先创建配置文…...

力扣每日一题(2023-11-30)
力扣每日一题 题目:1657. 确定两个字符串是否接近 日期:2023-11-30 用时:21 m 07 s 时间:11ms 内存:43.70MB 代码: class Solution {public boolean closeStrings(String word1, String word2) {if(word1.…...

内部类Lambda
静态内部类 /*** 静态成员是在类加载成字节码时就已经存在的,静态只能访问静态*/ public class Demo {public static void main(String[] args) {Outer.Inner.show();} }class Outer {int num1 10;static int num2 20;static class Inner {static void show() {Outer outer …...

设一棵二叉树中各结点的值互不相同,其先序遍历序列和中序遍历序列分别存于两个一维数组A[1...n]和 Bfl...n]中,试编写算法建立该二叉树的二叉链表。
题目描述:设一棵二叉树中各结点的值互不相同,其先序遍历序列和中序遍历序列分别存于两个一维数组A[1…n]和 B[1…n]中,试编写算法建立该二叉树的二叉链表。 分析: 对于一颗二叉树,知道其中序和先序序列就可以完全确定…...

什么是Daily Scrum?
Daily Scrum(每日站会),Scrum Master要确保这个会在每天都会开。这个会的目的就是检查正在做的东西和方式是否有利于完成Sprint目的,并及时做出必要的调整。 每日站会一般只开15分钟,为了让事情更简单些,这…...

逆波兰表达式求值[中等]
优质博文:IT-BLOG-CN 一、题目 给你一个字符串数组tokens,表示一个根据 逆波兰表示法 表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。 有效的算符为 ‘’、‘-’、‘*’ 和 ‘/’ 。 每个操作数(运算对象)都…...

Oracle连接和使用
5. Oracle连接和使用 5.1. sqlplus sqlplus作为甲骨文公司提供的一款本族工具产品,有着悠久的历史和积淀,它几乎伴随着Oracle数据库产生至今的整个生命周期,而且,还会继续和Oracle数据库产品相伴一直发展下去。该工具看似简单灵活的背后,却为广大用户使用Oracle数据库提…...

redis单线程为什么这么快
redis单线程为什么这么快 redis是使用的单线程来进行操作的,因为所有的数据都是在内存中的,内存操作特别快。而且单线程避免了多线程切换性能损耗问题 单线程如何处理并发客户端连接? redis利用epoll来实现IO多路复用,将连接信息和…...

工业机器视觉megauging(向光有光)使用说明书(五,轻量级的visionpro)
这个说明主要介绍抓线功能。 第一步,添加线工具,鼠标双击工具箱“抓线”,出现如下界面: 第二步,我们拉一条,“九点标定”到“抓线1”的线,和visionpro操作一样: 第三步,…...

【LittleXi】2023年广东工业大学腾讯杯新生程序设计竞赛
文章目录 【LittleXi】2023年广东工业大学腾讯杯新生程序设计竞赛A.星期几考试?C.信件D、乘除法E、不知道叫什么名字F.我要学会盾反!G.闪闪发光心动不已!H.不想想背景的gcdI.uu爱玩飞行棋J.火柴人小游戏K .有趣的BOSS 【LittleXi】2023年广东…...

【C语言:数据在内存中的存储】
文章目录 1.整数在内存中的存储1.1整数在内存中的存储1.2整型提升 2.大小端字节序2.1什么是大小端2.2为什么有大小端之分 3.整数在内存中的存储相关题目题目一题目二题目三题目四题目五题目六题目七 4.浮点数在内存中的存储4.1浮点数存的过程4.2浮点数取得过程 在这之前呢&…...

每日一练:阿姆斯特朗数
如果一个 n 位正整数等于其各位数字的 n 次方之和,则称该数为阿姆斯特朗数。 例如 1^3 5^3 3^3 153。 1000 以内的阿姆斯特朗数: 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407。...

fatal: remote error: upload-pack: not our ref (未解决问题)
PX4使用 git submodule update --init --recursive报错 fatal: remote error: upload-pack: not our ref解决办法参考:https://stackoverflow.com/questions/61163082/why-does-git-submodule-update-fail-with-fatal-remote-error-upload-pack-not-o 感觉就是清…...

Python 3 使用 read()、readline()、readlines() 函数 读取文件
1 样例文件 example.txt 春晓 孟浩然〔唐代〕 春眠不觉晓,处处闻啼鸟。 夜来风雨声,花落知多少。 2 分别使用 read()、readline()、readlines() 函数 2.1 # read() -------- 一次性读取所有文本,以字符串的形式返回结果。 # read() ----…...

勒索解密后oracle无法启动故障处理----惜分飞
客户linux平台被勒索病毒加密,其中有oracle数据库.客户联系黑客进行解密【勒索解密oracle失败】,但是数据库无法正常启动,dbv检查数据库文件报错 [oraclehisdb ~]$ dbv filesystem01.dbf DBVERIFY: Release 11.2.0.1.0 - Production on 星期一 11月 27 21:49:17 2023 Copyrig…...

Leetcode144. 二叉树的前序遍历-C语言
文章目录 题目介绍题目分析解题思路1.创建一个数组来储存二叉树节点的值2.根据二叉树的大小来开辟数组的大小3.边前序遍历边向创建的数组中存入二叉树节点的值 完整代码 题目介绍 题目分析 题目要求我们输出二叉树按前序遍历排列的每个节点的值。 解题思路 1.创建一个数组来…...

dmesg命令在软件测试中的实际应用
简介:当你想要了解 Linux 系统在启动时究竟发生了什么?或者当硬件设备不工作时,如何进行调试?这就是 dmesg 命令的用武之地。本文将介绍 dmesg 的基本功能,并深入探讨其在软件测试中的实际应用。 历史攻略:…...

【渗透】记录阿里云CentOS一次ddos攻击
文章目录 发现防御 发现 防御 流量清洗 使用高防...

前端面试提问(3)
1、js两个数相加会不会丢精度? 可能会遇到精度丢失的问题。JavaScript 使用的是 IEEE 754 浮点数标准,即一种二进制表示法,有时不能准确地表示十进制小数。如果你需要进行精确的十进制数值计算,可以使用一些处理精确数值的库&…...

fl studio21.2最新汉化中文完整版网盘下载
fl studio 21中文版是Image-Line公司继20版本之后更新的水果音乐制作软件,很多用户不太理解,为什么新版本不叫fl studio 21或fl studio2024,非得直接跳到21.2版本,其实该版本是为了纪念该公司22周年,所以该版本也是推出…...

差分数组相关知识点以及刷题
差分数组 差分数组是什么? **举例:**对于数组考虑数组 a[1,3,3,5,8],对其中的相邻元素两两作差(右边减左边),得到数组 [2,0,2,3]。然后在开头补上 a[0],得到差分数组: d[1,2,0…...

使用 DMA 在 FPGA 中的 HDL 和嵌入式 C 之间传输数据
使用 DMA 在 FPGA 中的 HDL 和嵌入式 C 之间传输数据 该项目介绍了如何在 PL 中的 HDL 与 FPGA 中的处理器上运行的嵌入式 C 之间传输数据的基本结构。 介绍 鉴于机器学习和人工智能等应用的 FPGA 设计中硬件加速的兴起,现在是剥开几层“云雾”并讨论 HDL 之间来回传…...

uniapp地图基本使用及解决添加markers不生效问题?
uniapp地图使用 App端 通过 nvue 页面实现地图 文章目录 uniapp地图使用效果图templatejs添加 marker使用地图查看位置移到到当前位置 效果图 template <template><view class"mapWrap"><!-- #ifdef APP-NVUE --><map class"map-containe…...

使用系统ProgressBar实现三色进度条
使用系统ProgressBar实现如图三色进度条: //布局中<ProgressBarandroid:layout_width"0dp"android:layout_height"8dp"android:layout_marginLeft"16dp"app:layout_constraintBottom_toBottomOf"id/photo"app:layout_c…...

Vue3中的组合式API的详细教程和介绍
文章目录 前言介绍组合式 API 基础setup 组件选项 带 ref 的响应式变量生命周期钩子注册内部 setupwatch 响应式更改独立的 computed 属性后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:vue.js 🐱👓博主在前端…...

Java后端开发——JDBC(万字详解)
Java后端开发——JDBC(万字详解) 今日目标 掌握JDBC的的CRUD理解JDBC中各个对象的作用掌握Druid的使用 1,JDBC概述 在开发中我们使用的是java语言,那么势必要通过java语言操作数据库中的数据。这就是接下来要学习的JDBC。 1.1 …...