深度学习常见回归分支算法逐步分析,各种回归之间的优缺点,适用场景,举例演示

文章目录

  • 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 pass
    outputs = model(X_tensor)
    loss = criterion(outputs, y_tensor)

    # Backward pass and optimization
    optimizer.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正则化将一些特征的权重设为零。
案例:预测产品销量。确定哪些产品特征对销售额的影响最大。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

疫苗接种(链表练习)

很明显&#xff0c;数组也可以做&#xff0c;但是我想练习链表 这道题我上交的时候&#xff0c;同一份代码&#xff0c;三个编译器&#xff0c;三个成绩&#xff0c;有点搞心态 代码如下&#xff1a; #include<stdio.h> #include<math.h> #include<stdlib.h&…

线上CPU飙高问题排查!

https://v.douyin.com/iRTqH5ug/ linux top命令 top 命令是 Linux 下一个强大的实用程序&#xff0c;提供了系统资源使用情况的动态、实时概览。它显示了当前正在运行的进程信息&#xff0c;以及有关系统性能和资源利用情况的信息。 以下是 top 命令提供的关键信息的简要概述…

面试数据库八股文十问十答第一期

面试数据库八股文十问十答第一期 作者&#xff1a;程序员小白条&#xff0c;个人博客 1.MySQL常见索引、 MySQL常见索引有: 主键索引、唯一索引、普通索引、全文索引、组合索引(最左前缀)主键索引特点&#xff1a;唯一性&#xff0c;非空&#xff0c;自增&#xff08;如果使用…

Linux中的UDEV机制与守护进程

Linux中的UDEV守护进程 udev简介守护进程守护进程概念守护进程程序设计守护进程的应用守护进程和后台进程的区别 UDEV的配置文件自动挂载U盘 udev简介 udev是一个设备管理工具&#xff0c;udev以守护进程的形式运行&#xff0c;通过侦听内核发出来的uevent来管理/dev目录下的设…

cnpm 安装后无法使用怎么办?

问题的原因 cnpm 安装成功&#xff0c;但是却无法使用&#xff0c;一般分为两种情况&#xff0c;一种是提示无法执行命令&#xff0c;另一种是可以执行但是执行时报错&#xff0c;下面分别说明遇到这两种情况的解决方案。 解决方案 问题一&#xff1a;无法执行相关命令 首先…

零基础打靶—CTF4靶场

一、打靶的主要五大步骤 1.确定目标&#xff1a;在所有的靶场中&#xff0c;确定目标就是使用nmap进行ip扫描&#xff0c;确定ip即为目标&#xff0c;其他实战中确定目标的方式包括nmap进行扫描&#xff0c;但不局限于这个nmap。 2.常见的信息收集&#xff1a;比如平常挖洞使用…

jionlp :一款超级强大的Python 神器!轻松提取地址中的省、市、县

在日常数据处理中&#xff0c;如果你需要从一个完整的地址中提取出省、市、县三级地名&#xff0c;或者乡镇、村、社区两级详细地名&#xff0c;你可以使用一个第三方库来实现快速解析。在使用之前&#xff0c;你需要先安装这个库。 pip install jionlp -i https://pypi.douba…

LeetCode - 965. 单值二叉树(C语言,二叉树,配图)

二叉树每个节点都具有相同的值&#xff0c;我们就可以比较每个树的根节点与左右两个孩子节点的值是否相同&#xff0c;如果不同返回false&#xff0c;否则&#xff0c;返回true。 如果是叶子节点&#xff0c;不存在还孩子节点&#xff0c;则这个叶子节点为根的树是单值二叉树。…

【算法通关村】链表基础经典问题解析

【算法通关村】链表基础&经典问题解析 一.什么是链表 链表是一种通过指针将多个节点串联在一起的线性结构&#xff0c;每一个节点&#xff08;结点&#xff09;都由两部分组成&#xff0c;一个是数据域&#xff08;用来存储数据&#xff09;&#xff0c;一个是指针域&…

每日一练:冒泡排序

1. 概述 冒泡排序&#xff08;Bubble Sort&#xff09;也是一种简单直观的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已经排…

【集合篇】Java集合概述

Java 集合概述 集合与容器 容器&#xff08;Container&#xff09;是一个更广泛的术语&#xff0c;用于表示可以容纳、组织和管理其他对象的对象。它是一个更高层次的概念&#xff0c;包括集合&#xff08;Collection&#xff09;在内。集合&#xff08;Collection&#xff0…

CSS 选择器优先级,!important 也会被覆盖?

目录 1&#xff0c;重要性2&#xff0c;专用性3&#xff0c;源代码顺序 CSS 属性值的计算过程中。其中第2步层叠冲突只是简单说明了下&#xff0c;这篇文章来详细介绍。 层叠冲突更广泛的被称为 CSS选择器优先级计算。 为什么叫层叠冲突&#xff0c;可以理解为 CSS 是 Cascadi…

HarmonyOS开发工具安装

目录 下载与安装DevEco Studio DevEco Studio下载官网&#xff0c;点击下载 下载完成后&#xff0c;双击下载的“deveco-studio-xxxx.exe” 进入DevEco Studio安装向导 选择安装路径 如下安装选项界面勾选DevEco Studio后&#xff0c;单击“Next” 点击Install 安装完…

什么是Daily Scrum?

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

Python遥感开发之批量拼接

Python遥感开发之批量拼接 1 遥感图像无交错的批量拼接2 遥感图像有交错的批量拼接 前言&#xff1a;主要借助python实现遥感影像的批量拼接&#xff0c;遥感影像的批量拼接主要分为两种情况&#xff0c;一种是遥感图像无交错&#xff0c;另一种情况是遥感图像相互有交错。具体…

【送书活动三期】解决docker服务假死问题

工作中使用docker-compose部署容器&#xff0c;有时候会出现使用docker-compose stop或docker-compose down命令想停掉容器&#xff0c;但是依然无法停止或者一直卡顿在停止中的阶段&#xff0c;这种问题很让人头疼啊&#xff01; 目录 问题描述问题排查问题解决终极杀招-最粗暴…

c语言调用free,提示已触发了一个断点。

在用c语言写数据结构的链表的时候&#xff0c;执行也没有什么大错&#xff0c;逻辑也是对的&#xff0c;但是一道free函数会自动触发一个断点。如图&#xff1a; 这个断点产生的原因是由于分配的内存太小了在使用的时候没有任何问题&#xff0c;但是在执行程序的时候&#xff0…

【并发编程】volatile实现原理解析

&#x1f4eb;作者简介&#xff1a;小明Java问道之路&#xff0c;2022年度博客之星全国TOP3&#xff0c;专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化&#xff0c;文章内容兼具广度、深度、大厂技术方案&#xff0c;对待技术喜欢推理加验证&#xff0c;就职于…

【嵌入式-51单片机】常见位运算和数据类型以及sbit使用

51单片机中 数据类型如下&#xff1a; 位运算符如下&#xff1a; 按位左移<<&#xff1a;低位补零&#xff0c;高位移出 按位右移>>&#xff1a;高位补零&#xff0c;低位移出 按位与&&#xff1a;对应位上的值必须同时为1才为1&#xff0c;可以用来对指定位…

uniapp实现文件预览过程

H5实现预览 <template><iframe :src"_url" style"width:100vw; height: 100vh;" frameborder"0"></iframe> </template> <script lang"ts"> export default {data() {return {_url: ,}},onLoad(option…