【分类|回归】深度学习中的分类和回归?离散数据or连续数值?

【分类|回归】深度学习中的分类和回归?离散数据or连续数值?

【分类|回归】深度学习中的分类和回归?离散数据or连续数值?


文章目录


前言

在机器学习和深度学习中,分类问题和回归问题是两类基本任务。两者的区别在于输出的类型:分类问题的输出是离散的类别标签,而回归问题的输出是连续的数值

1.分类问题

1.1分类问题的定义

分类问题是指给定输入数据,模型需要将其划分为多个类别中的一个。例如,判断一张图片是猫还是狗,这是一个二分类问题(Binary Classification);而预测一幅手写数字图片的数字是0到9中的哪个,这是多分类问题(Multiclass Classification)。

1.2深度学习中的分类问题

深度学习处理分类问题的常用方法是使用神经网络 模型,尤其是卷积神经网络(CNN) ,如果是图像处理问题。在分类问题中,最后一层通常是Softmax激活函数,将网络输出转换为概率分布,表示属于每个类别的概率。

1.3实际分类问题及代码示例:手写数字识别(MNIST)

MNIST 是一个手写数字数据集,包含 28x28 的灰度图像和对应的类别标签(0-9)。

代码示例:

csharp 复制代码
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader

# 定义一个简单的卷积神经网络
class SimpleCNN(nn.Module):
    def __init__(self):
        super(SimpleCNN, self).__init__()
        self.conv1 = nn.Conv2d(1, 32, 3, padding=1)
        self.conv2 = nn.Conv2d(32, 64, 3, padding=1)
        self.fc1 = nn.Linear(64*7*7, 128)
        self.fc2 = nn.Linear(128, 10)

    def forward(self, x):
        x = torch.relu(self.conv1(x))
        x = torch.max_pool2d(torch.relu(self.conv2(x)), 2)
        x = x.view(-1, 64*7*7)
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return torch.log_softmax(x, dim=1)

# 数据预处理和加载
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
train_loader = DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)

# 定义模型、损失函数和优化器
model = SimpleCNN()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 训练模型
for epoch in range(1, 6):
    for batch_idx, (data, target) in enumerate(train_loader):
        optimizer.zero_grad()
        output = model(data)
        loss = criterion(output, target)
        loss.backward()
        optimizer.step()
        if batch_idx % 100 == 0:
            print(f'Epoch {epoch}, Batch {batch_idx}, Loss: {loss.item()}')

代码解释:

  • 1.定义卷积神经网络SimpleCNN 是一个简单的CNN,用于处理图像数据,包含两个卷积层和两个全连接层。最后一层输出的维度为10,表示10个类别(数字0到9)。
  • 2.前向传播(forward) :图像输入后经过卷积、池化、展平,再经过全连接层,最后通过 log_softmax 输出每个类别的对数概率。
  • 3.数据预处理 :使用 transforms.ToTensor 将图像数据转换为张量,并进行归一化。
  • 4.损失函数 :使用交叉熵损失函数 CrossEntropyLoss,适合多分类问题。
  • 5.优化器:Adam优化器用于梯度更新。
  • 6.模型训练:循环训练模型,计算损失并进行梯度更新。

1.4分类问题的处理方法

  • 模型选择:适合分类的模型有逻辑回归(LR)、支持向量机(SVM)、决策树、随机森林等,深度学习中常用的是神经网络。
  • 激活函数 :最后一层通常使用 Softmax 激活函数,将模型输出的值转换为概率分布。
  • 损失函数:交叉熵损失函数适合分类任务。

2.回归问题

2.1回归问题的定义

回归问题的目标是预测一个连续的数值。典型的回归问题包括预测房价、股票价格、温度等。例如,给定一个地区的房屋面积、卧室数量等特征,预测房屋的价格。

2.2深度学习中的回归问题

在回归问题中,深度学习模型通常使用全连接神经网络(Fully Connected Neural Networks),输出层的激活函数可以是线性函数(Linear Activation),输出一个连续值。

2.3实际回归问题及代码示例:房价预测

假设我们使用一个简化的数据集,包含房屋面积、卧室数量等特征,来预测房价。

代码示例:

csharp 复制代码
import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np

# 创建简单的回归模型
class SimpleRegressionModel(nn.Module):
    def __init__(self):
        super(SimpleRegressionModel, self).__init__()
        self.fc1 = nn.Linear(2, 128)
        self.fc2 = nn.Linear(128, 64)
        self.fc3 = nn.Linear(64, 1)

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = torch.relu(self.fc2(x))
        x = self.fc3(x)  # 回归输出不需要激活函数
        return x

# 模拟房价数据 (面积, 卧室数量)
data = np.array([[1200, 3], [1500, 4], [1700, 3], [2100, 4], [2500, 5]], dtype=np.float32)
prices = np.array([300000, 400000, 425000, 525000, 600000], dtype=np.float32)

# 转换为PyTorch的张量
data_tensor = torch.from_numpy(data)
prices_tensor = torch.from_numpy(prices).view(-1, 1)

# 定义模型、损失函数和优化器
model = SimpleRegressionModel()
criterion = nn.MSELoss()  # 均方误差损失
optimizer = optim.Adam(model.parameters(), lr=0.01)

# 训练模型
for epoch in range(1, 101):
    optimizer.zero_grad()
    output = model(data_tensor)
    loss = criterion(output, prices_tensor)
    loss.backward()
    optimizer.step()
    if epoch % 10 == 0:
        print(f'Epoch {epoch}, Loss: {loss.item()}')

代码解释:

  • 1.定义回归模型SimpleRegressionModel 是一个简单的三层全连接网络,输入维度为2(房屋面积和卧室数量),输出维度为1(房价)。
  • 2.数据准备:模拟了一个小的房屋数据集,包含面积和卧室数量作为特征,房价作为标签。将数据转换为PyTorch的张量。
  • 3.损失函数:使用均方误差损失(MSELoss),这是回归问题的常用损失函数,衡量预测值与真实值的差异。
  • 4.优化器:Adam优化器,用于更新模型的权重。
  • 5.模型训练:每个epoch中,计算预测结果与实际值的损失,通过反向传播更新权重。

2.4回归问题的处理方法

  • 模型选择:适合回归的模型包括线性回归、决策树回归、支持向量回归(SVR)、深度学习中的全连接神经网络等。
  • 激活函数:回归任务的输出层通常不使用激活函数,直接输出一个连续值。
  • 损失函数:常用均方误差损失函数(MSE)来优化回归模型。

总结

  • 分类问题的输出是离散的类别标签,处理方法包括Softmax激活函数和交叉熵损失函数,常用于图像分类、文本分类等任务。
  • 回归问题的输出是连续值,处理方法包括线性激活函数和均方误差损失函数,适用于房价预测、股票价格预测等连续值预测问题。
相关推荐
武子康2 分钟前
AI研究-119 DeepSeek-OCR PyTorch FlashAttn 2.7.3 推理与部署 模型规模与资源详细分析
人工智能·深度学习·机器学习·ai·ocr·deepseek·deepseek-ocr
Sirius Wu1 小时前
深入浅出:Tongyi DeepResearch技术解读
人工智能·语言模型·langchain·aigc
忙碌5441 小时前
AI大模型时代下的全栈技术架构:从深度学习到云原生部署实战
人工智能·深度学习·架构
LZ_Keep_Running1 小时前
智能变电巡检:AI检测新突破
人工智能
InfiSight智睿视界2 小时前
AI 技术助力汽车美容行业实现精细化运营管理
大数据·人工智能
没有钱的钱仔3 小时前
机器学习笔记
人工智能·笔记·机器学习
听风吹等浪起3 小时前
基于改进TransUNet的港口船只图像分割系统研究
人工智能·深度学习·cnn·transformer
化作星辰3 小时前
深度学习_原理和进阶_PyTorch入门(2)后续语法3
人工智能·pytorch·深度学习
boonya4 小时前
ChatBox AI 中配置阿里云百炼模型实现聊天对话
人工智能·阿里云·云计算·chatboxai
8K超高清4 小时前
高校巡展:中国传媒大学+河北传媒学院
大数据·运维·网络·人工智能·传媒