机器学习之监督学习

监督学习(Supervised Learning)是机器学习中最常见和广泛应用的分支之一。它的核心思想是通过带有标签的数据来训练模型,使模型能够学习输入特征与输出标签之间的映射关系,从而对新的未见数据进行预测。监督学习广泛应用于分类、回归等任务。


1. 监督学习的核心概念

1.1 输入与输出

  • 输入(特征) :模型的输入数据,通常表示为

  • 输出(标签) :模型的预测目标,通常表示为

1.2 训练数据

监督学习依赖于标注数据集 D={(​,​​),(​​,​​),...,(​​,​​)},其中:

  • 是输入特征。

  • 是对应的标签。

1.3 模型的目标

监督学习的目标是学习一个函数 ,使得 能够尽可能准确地预测


2. 监督学习的任务类型

监督学习主要分为两类任务:

2.1 分类(Classification)

  • 目标:预测离散的类别标签。

  • 示例:

    • 二分类:垃圾邮件分类(是/否)。

    • 多分类:手写数字识别(0-9)。

2.2 回归(Regression)

  • 目标:预测连续的数值。

  • 示例:

    • 房价预测。

    • 股票价格预测。


3. 监督学习的常见算法

3.1 线性模型

  • 线性回归(Linear Regression):用于回归任务,拟合线性关系。

  • 逻辑回归(Logistic Regression):用于分类任务,输出概率值。

3.2 决策树

  • 决策树(Decision Tree):通过树状结构进行决策。

  • 随机森林(Random Forest):基于多个决策树的集成方法。

  • 梯度提升树(Gradient Boosting Trees):通过逐步优化残差提升模型性能。

3.3 支持向量机(SVM)

  • 用于分类和回归任务,通过最大化间隔找到最优分离超平面。

3.4 神经网络

  • 多层感知机(MLP):基础的前馈神经网络。

  • 卷积神经网络(CNN):用于图像分类等任务。

  • 循环神经网络(RNN):用于序列数据(如文本、时间序列)。


4. 监督学习的流程

4.1 数据准备

  • 收集和清洗数据。

  • 划分数据集为训练集、验证集和测试集。

4.2 特征工程

  • 提取和选择特征。

  • 对特征进行标准化或归一化。

4.3 模型选择

  • 根据任务类型选择合适的算法。

4.4 模型训练

  • 使用训练数据拟合模型。

4.5 模型评估

  • 使用验证集评估模型性能。

  • 常用指标:

    • 分类任务:准确率、精确率、召回率、F1 分数。

    • 回归任务:均方误差(MSE)、平均绝对误差(MAE)。

4.6 模型调优

  • 通过超参数调优和交叉验证提升模型性能。

4.7 模型部署

  • 将训练好的模型应用于实际场景。

5. 监督学习的代码示例

5.1 线性回归(回归任务)

python 复制代码
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import numpy as np

# 创建一些随机数据
X = np.random.rand(100, 1)
y = 2 * X + 1 + 0.1 * np.random.randn(100, 1)

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 评估
mse = mean_squared_error(y_test, y_pred)
print("Mean Squared Error:", mse)

5.2 逻辑回归(分类任务)

python 复制代码
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np

# 创建一些随机数据
X = np.random.rand(100, 2)
y = (X[:, 0] + X[:, 1] > 1).astype(int)  # 简单二分类

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 训练模型
model = LogisticRegression()
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 评估
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

5.3 使用 PyTorch 实现神经网络

python 复制代码
import torch
import torch.nn as nn
import torch.optim as optim

# 定义一个简单的神经网络
class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.fc1 = nn.Linear(10, 50)
        self.fc2 = nn.Linear(50, 1)

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

# 初始化模型、损失函数和优化器
model = SimpleNN()
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

# 创建一些随机数据
X = torch.randn(100, 10)
y = torch.randn(100, 1)

# 训练模型
for epoch in range(100):
    optimizer.zero_grad()
    outputs = model(X)
    loss = criterion(outputs, y)
    loss.backward()
    optimizer.step()

    if (epoch + 1) % 10 == 0:
        print(f"Epoch [{epoch+1}/100], Loss: {loss.item():.4f}")

6. 监督学习的挑战

6.1 数据质量

  • 标签错误或缺失会影响模型性能。

  • 数据不平衡可能导致模型偏向多数类。

6.2 过拟合

  • 模型在训练集上表现良好,但在测试集上表现较差。

  • 解决方法:正则化、交叉验证、增加数据量。

6.3 特征工程

  • 特征选择和提取对模型性能至关重要。

  • 自动化特征工程(如深度学习)可以缓解这一问题。

相关推荐
StarPrayers.1 分钟前
损失函数(Loss Function)、反向传播(Backward Propagation)和优化器(Optimizer)学习笔记
人工智能·笔记·深度学习·学习
IT_陈寒5 分钟前
Vite 5个隐藏技巧让你的项目构建速度提升50%,第3个太香了!
前端·人工智能·后端
孤廖8 分钟前
吃透 C++ 栈和队列:stack/queue/priority_queue 用法 + 模拟 + STL 标准实现对比
java·开发语言·数据结构·c++·人工智能·深度学习·算法
麦麦麦造26 分钟前
有了 MCP,为什么Claude 还要推出 Skills?
人工智能·aigc·ai编程
jerryinwuhan29 分钟前
利用舵机实现机器人行走
人工智能·机器人
武子康31 分钟前
AI-调查研究-107-具身智能 强化学习与机器人训练数据格式解析:从状态-动作对到多模态轨迹标准
人工智能·深度学习·机器学习·ai·系统架构·机器人·具身智能
沫儿笙31 分钟前
KUKA库卡焊接机器人二氧化碳节气
人工智能·机器人
insight^tkk1 小时前
【Docker】记录一次使用docker部署dify网段冲突的问题
运维·人工智能·docker·ai·容器
攻城狮7号1 小时前
AI+大数据时代:如何从架构到生态重构时序数据库的价值?
大数据·人工智能·时序数据库·apache iotdb·sql大模型
智能化咨询1 小时前
AI+大数据时代:时序数据库的生态重构与价值跃迁——从技术整合到行业落地
人工智能