机器学习期末复习笔记

news2024/11/29 12:57:16

markdown文件下载:https://github.com/1037827920/SCUT-Notes/tree/main/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0

机器学习期末复习笔记

1. 机器学习简介

1.1 什么是机器学习

如图所示:

在这里插入图片描述

几乎所有的机器学习都包括以下三个部分:数据、模型和损失函数

  • 数据:不同的应用需要处理不同的数据
  • 模型:根据实际情况训练出特定的模型
  • 评估:通过损失函数来对模型进行统一的评价,主要包括三种:Hinge Loss、Logistic Loss、Softmax Loss

1.2 机器学习的分类

1.2.1 有监督学习

概述: superviseed learning 的核心是利用标注好的数据进行训练,也就是输入数据(features)和对应的目标输出(labels)是已知的。目标是学习一个映射函数f(x),可以将输入x映射到输出y

步骤:

  1. 数据准备:收集和标注数据集,包括输入和输出树
  2. 模型训练:用训练数据让模型学习输入和输出之间的关系
  3. 模型验证:用测试数据评估模型的泛化能力

常见任务:

  • 分类问题:将输入分配到离散的类比(例如垃圾邮箱检测、图片分类)
  • 回归问题:预测连续值(例如,房价预测、天气预测)

常用算法:

  • 线性回归
  • 逻辑回归
  • 支持向量机(SVM)
  • 决策树、随机森林
  • 神经网络
1.2.2 无监督学习

概述: Unsupervised Learning 的输入数据没有标注(没有目标输出),目标是从数据中发掘隐藏的结构、模式或分布

步骤:

  1. 数据分析:分析数据中的结构或分布
  2. 模型训练:寻找数据的潜在模式(如聚类或降维)
  3. 结果解释:将模式用于可视化或进一步分析

常用算法:

  • K均值
  • DBSCAN
  • 主成分分析(PCA)
  • 自编码器
1.2.3 强化学习

概述: Reinforcement Learning 模拟的是智能体(Agent)和环境(Environment)的交互过程。智能体通过观察环境状态(State)采取动作(Action),从环境中接收奖励(Reward)并调整策略,以最大化累计奖励

特点:

  • 数据不是预先标注的,而是通过与环境的交互产生
  • 需要权衡探索(Explore)和利用(Exploit)

步骤:

  1. 智能体感知当前环境状态
  2. 智能体根据策略选择动作
  3. 环境根据动作反馈奖励和下一个状态
  4. 智能体通过学习调整策略以优化未来行为

常见任务:

  • 游戏AI(例如AlphaGo、强化学习玩Atari游戏)
  • 自动驾驶
  • 机器人控制
  • 动态资源分配(例如云计算资源管理)

常用算法:

  • Q学习
  • 深度Q网络(DQN)
  • 策略梯度方法(Policy Gradient)
  • Actor-Critic 方法
1.2.4 对比总结
特性Supervised LearningUnsupervised LearningReinforcement Learning
数据类型有标签数据无标签数据与环境交互生成数据
目标学习输入到输出的映射发现隐藏结构或模式最大化长期累计奖励
应用场景分类、回归聚类、降维、异常检测游戏AI、自动驾驶
反馈形式数据中提供明确反馈数据无明确反馈奖励信号作为反馈

1.3 机器学习与概率统计

贝叶斯理论:
P ( Y , X ) = P ( X ∣ Y ) ∗ P ( Y ) P ( X , Y ) = P ( Y ∣ X ) ∗ P ( X ) P(Y, X) = P(X|Y) * P(Y) \\ P(X, Y) = P(Y|X) * P(X) P(Y,X)=P(XY)P(Y)P(X,Y)=P(YX)P(X)

P ( Y ∣ X ) = P ( X ∣ Y ) P ( Y ) P ( X ) P ( X ) = ∑ Y P ( X ∣ Y ) P ( Y ) P(Y|X) = \frac{P(X|Y)P(Y)}{P(X)} \\ P(X) = \sum_YP(X|Y)P(Y) P(YX)=P(X)P(XY)P(Y)P(X)=YP(XY)P(Y)

  • 先验概率:在没有新信息之前,我相信的概率
  • 后验概率:在考虑新信息之后,我相信的概率
  • 边缘概率:在不考虑其因素的情况下,某个因素发生的概率

牙科例子:

  1. 定义事件:

    • A:患者有智齿发炎
    • B:患者有蛀牙
    • X:患者牙疼
  2. 先验概率:

    • P(A):患者智齿发炎的先验概率
    • P(B):患者有蛀牙的先验概率
  3. 似然性:

    • P(X|A):给定患者有智齿发炎的情况下牙疼的概率
    • P(X|B):给定患者有蛀牙的情况下牙疼的概率
  4. 边缘概率:

    • P(X):患者牙疼的总概率,可以通过全概率公式计算:
      P ( X ) = P ( X ∣ A ) P ( A ) + P ( X ∣ B ) P ( B ) P(X) = P(X|A)P(A) + P(X|B)P(B) P(X)=P(XA)P(A)+P(XB)P(B)
  5. 后验概率:

    • P(A|X):给定患者牙疼的情况下,患者有智齿发炎的后验概率
    • P(B|X):给定患者牙疼的情况下,患者有蛀牙的后验概率
  6. 贝叶斯定理:

    • 计算后验概率:
      P ( A ∣ X ) = P ( X ∣ A ) P ( A ) P ( X ) P ( B ∣ X ) = P ( X ∣ B ) P ( B ) P ( X ) P(A|X) = \frac{P(X|A)P(A)}{P(X)} \\ P(B|X) = \frac{P(X|B)P(B)}{P(X)} P(AX)=P(X)P(XA)P(A)P(BX)=P(X)P(XB)P(B)

1.4 信息论简介

对于一个事件的信息度量:
I ( A ) = − l o g b P ( A ) I(A) = -log_bP(A) I(A)=logbP(A)

  • I(A):表示信息的内容,是一个随机的变量
  • P(A):表示事件发生的概率
  • b:基底

熵(Entropy):

熵是一个用于表示预期平均信息含量的变量
H ( A ) = − E [ l o g 2 P ( A ) ] = − ∑ A P ( A ) l o g 2 P ( A ) H(A) = -E[log_2P(A)] = -\sum_AP(A)log_2P(A) H(A)=E[log2P(A)]=AP(A)log2P(A)

2. 线性回归和梯度下降

线性回归是拟合数据的方法,梯度下降是寻找最优解的技巧

2.1 线性回归

概述:

在一元线性回归中,我们假设目标变量y与特征变量x存在线性关系,模型表达式为:
y = W 0 + W 1 x 1 + W 2 x 2 + ⋯ + W n x n + ϵ y=W_0+W_1x_1+W_2x_2+\cdots+W_nx_n+\epsilon y=W0+W1x1+W2x2++Wnxn+ϵ
其中:

  • W 0 W_0 W0是截距(bias)
  • W 1 , W 2 , . . . , W n W_1,W_2,...,W_n W1,W2,...,Wn是回归系数(权重)
  • ε是噪声或误差项

对于多个样本的情况,可以将特征表示为矩阵X,目标值为向量y。在这种情况下,线性回归模型可以写作:
y ^ = X W \hat{y}=XW y^=XW
其中:

  • X是输入特征矩阵(包含所有样本)
  • W是权重向量
  • y ^ \hat{y} y^是模型的预测值向量

损失函数(MSE):

为了让模型拟合数据,通常我们会使用均方误差(MSE)作为损失函数,来度量模型的预测值 y ^ \hat{y} y^与实际值y之间的差异:
J ( W ) = 1 2 m ∑ i = 1 m ( y ^ i − y i ) 2 = 1 2 m ( X W − y ) T ( X W − y ) J(W)=\frac1{2m}\sum_{i=1}^m(\hat{y}_i-y_i)^2=\frac1{2m}(XW-y)^T(XW-y) J(W)=2m1i=1m(y^iyi)2=2m1(XWy)T(XWy)

  • m:样本数
  • 损失函数越小,说明这个函数拟合越好。

2.2 闭式解

概述: 指通过直接求解方程组,得到回归模型的参数(即权重向量)的解析解,而不需要通过迭代的优化算法(如梯度下降)来找到最优解

闭式解的推导:

最小化损失函数 J ( W ) J(W) J(W)以找到最优权重W。通过对 W W W求导并让导数为0,可以得到线性回归的解析解。首先对损失函数求导:
∂ J ( W ) ∂ W = 1 m X T ( X W − y ) \frac{\partial J(W)}{\partial W}=\frac1mX^T(XW-y) WJ(W)=m1XT(XWy)
将导数设置为0,求解 W W W
X T ( X W − y ) = 0 X T X W = X T y \begin{gathered} X^T(XW-y)=0 \\ X^TXW=X^Ty \end{gathered} XT(XWy)=0XTXW=XTy
可以通过矩阵求逆的方式得到 W W W
W = ( X T X ) − 1 X T y W=(X^TX)^{-1}X^Ty W=(XTX)1XTy
这就是线性回归的闭式解公式

闭式解的核心思想:

  • 直接求解:通过解析方法一次性求出最优权重 W W W,不需要像梯度下降一样逐步优化
  • 线性代数运行:通过矩阵转置、乘法和求逆等线性代数运算实现
  • 适用场景:对于小规模数据集、闭式解可以快速得到结果。然而当数据量非常大时,计算 X T X X^TX XTX的逆矩阵可能非常耗时,因此在大数据集上通常采用梯度下降等数据优化方法

优点与缺点:

  • 优点:直接得到最优解,计算速度快(适合小数据集
  • 缺点:对于高维度数据集,矩阵求逆的计算复杂度较高 O ( n 3 ) O(n^3) O(n3),在数据量过大时不适用

RLS(正则化最小方差)回归算法: 在损失函数中增加一个常量用于处理正则化,从而避免了矩阵的逆无法求解的问题,线性回归是唯一一个可以正确找到正则化关系的机器学习回归方法。

【没有详细了解】

2.3 梯度下降

概述: 除了求解闭式解外,还可以通过梯度下降的方法逼近最佳的w值

通用的优化方法:

for k in range (1, epoches + 1):
    1. 寻找一个可行的搜索方向d(找起来有难度
    2. 寻找一个好的步长η[k]
    3. 更新w的值:w[k+1] = w[k] + η[k] * d[k]

可以将三步走扩展到五步走:

w[0] = 0
for k in range (1, epoches + 1):
    1. 构造前向传播,用于求解损失函数L[w[k]]
    2. 构造反向传播,用于计算梯度 w[k] = derication(L[w[k]], w[k])
    3. d = -w[k]
    4. 定义一个好的步长η[k](步长过长会导致发散,步长过短会导致收敛过慢,所以需要开发者调节)。一般来说,调节方案可以是η[k+1] = η[k]/(k+1)
    5. 更新w的值:w[k+1] = w[k] + η[k] * d[k]

3. 线性分类,SVM,随机梯度下降,多分类

3.1 线性分类

概述: 线性分类器是基于线性决策边界进行分类的模型,形式上它会学到一个权重向量W和一个偏置b,其决策规则可以表示为:
f ( x ) = w T x + b f(\mathbf{x})=\mathbf{w}^T\mathbf{x}+b f(x)=wTx+b
在这种情况下,分类是根据f(X)的符号来进行的:

  • 如果f(x) > 0,则将数据点分类为正类
  • 否则为负类

这种方式只输出一个硬分类的结果,没有给出分类的概率

3.1.1 线性可分数据

概述: 指的是数据集中的不同类别可以通过一条直线(在二维空间中)或一个超平面(在高维空间中)完全分开,没有任何重叠或错误分类

特点:

  • 可以找到一个线性决策边界(如一条直线或一个超平面),使得数据集中所有点都可以准确分到正确的类别
  • 这种类比的数据适合使用线性分类器,如感知器、线性支持向量机(SVM)等

二维平面中的例子:

类别 A: (蓝色点)   类别 B: (红色点)

蓝   蓝   蓝   蓝
                (直线)
红   红   红   红

在这种情况下,直线可以完全分开这两类点,没有任何交错

3.1.2 线性不可分数据

概述: 是指数据集中不同类别的点不能通过一条直线(或超平面)来完全分开,一些数据会落在错误的边界一侧,导致无法完美分类

特点:

  • 没有单一的线性边界可以准确分隔数据类别
  • 线性分类器在这种情况下表现不佳,因为它们依赖于线性分界线
  • 处理线性不可分数据的常用方法包括使用非线性模型(如核化支持向量机、决策树)或者对特征进行转换,,使数据在更高维空间中线性可分

二维平面中的例子:

类别 A: (蓝色点)   类别 B: (红色点)

蓝   红   蓝   红
红   蓝   红   蓝

在这种情况下,无论如何放置一条直线,总会有一部分点被错误分类。

解决线性不可分问题:

  • 引入非线性分类器:如使用核支持向量机(SVM),将数据映射到高维空间,使其在高维空间中线性可分。
  • 增加特征:通过添加多项式特征或交互特征,可以在输入空间中创建一个更复杂的模型。
  • 使用核技巧 (Kernel Trick):这是 SVM 的一个重要特性,通过核函数将低维数据映射到高维空间,使原本线性不可分的数据在高维空间中变得线性可分。

3.2 支持向量机(线性可分)

概述: Support Vector Machine是一种更为强大的分类算法,特别适合于线性不可分的数据集。SVM的目标是在特征空间中找到一个最优的决策边界(超平面),并且它有一个非常独特的特点:最大化分类边界的间隔

原理:

  • 超平面:SVM在特征空间中寻找一个超平面,将数据点分类。对于线性可分数据,超平面的方程是:
    w T x + b = 0 w^Tx+b=0 wTx+b=0

  • 最大化间隔:SVM不仅寻找一个可以分开数据的超平面,还要找到那个离两类数据点最远的超平面,确保间隔最大化。这被称为最大化分类边界的间隔(Margin)。这样可以增强模型的鲁棒性,减少过拟合

  • 支持向量:距离决策边界最近的那些数据点被称为支持向量。这些点对决策边界有最重要的影响

损失函数:

  • 合页损失函数(Hinge Loss):是用于分类函数的损失函数,用来惩罚错误分类或分类边界附件的样本
    L ( y i , f ( x i ) ) = max ⁡ ( 0 , 1 − y i f ( x i ) ) L(y_i,f(x_i))=\max(0,1-y_if(x_i)) L(yi,f(xi))=max(0,1yif(xi))
    其中:

    • y i ∈ { − 1 , 1 } y_i \in \{-1, 1\} yi{1,1} 是样本i的真实标签(SVM通常处理二分类问题)
    • f ( x i ) = w ⊤ x i + b f(x_i)=\mathbf{w}^\top x_i+b f(xi)=wxi+b 是模型对样本 x i x_i xi的预测结果,表示超平面w和 x i x_i xi的内积再加上偏置b
    • 1 − y i f ( x i ) 1-y_if(x_i) 1yif(xi) 是衡量样本离决策边界的距离
    • 如果样本被正确分类且距离边界大于 1,损失为 0;否则,损失随着样本距离边界的接近或错误分类而增加。
  • 正则化项:SVM 模型的目标是找到能够最大化分类间距(margin)的超平面。因此,为了平衡分类误差和间距的最大化,损失函数通常还包括一个正则化项,用来控制模型的复杂度(即防止过拟合)。常见的正则化项是L2 正则化,其形式为:
    R ( w ) = 1 2 ∥ w ∥ 2 R(\mathbf{w})=\frac12\|\mathbf{w}\|^2 R(w)=21w2

  • 总损失函数:
    J ( w , b ) = 1 2 ∥ w ∥ 2 + C ∑ i = 1 m max ⁡ ( 0 , 1 − y i ( w ⊤ x i + b ) ) J(\mathbf{w},b)=\frac12\|\mathbf{w}\|^2+C\sum_{i=1}^m\max(0,1-y_i(\mathbf{w}^\top x_i+b)) J(w,b)=21w2+Ci=1mmax(0,1yi(wxi+b))

    • 其中:
      • C 是一个超参数,用于控制正则化项和合页损失之间的权衡。较大的 C 会减少分类错误,但可能导致过拟合;较小的 C 会增加容错性,防止过拟合。
      • m 是训练样本的数量。

梯度公式:

  • 对权重向量W的梯度:
    ∂ J ( w , b ) ∂ w = w − C ∑ i ∈ M y i x i \frac{\partial J(\mathbf{w},b)}{\partial\mathbf{w}}=\mathbf{w}-C\sum_{i\in\mathcal{M}}y_ix_i wJ(w,b)=wCiMyixi

  • 对偏置b的梯度:
    ∂ J ( w , b ) ∂ b = − C ∑ i ∈ M y i \frac{\partial J(\mathbf{w},b)}{\partial b}=-C\sum_{i\in\mathcal M}y_i bJ(w,b)=CiMyi

核技巧(kernel Trick): 当数据无法通过线性超平面分割时,SVM使用核技巧将数据映射到高维空间。常见的核函数包括:

  • 多项式核(Polynomial Kernel):将原始数据通过多项式映射到高维空间
  • 高斯核/径向基核(RBF Kernel):将数据点投影到无穷维空间,使得非线性数据在高维空间中变得线性可分

3.3 支持向量机(线性不可分)

概述: 松弛变量(Slack Variable)是用来处理非线性可分情况的一种机制,它通过引入松弛变量允许一定程度的分类错误,从而使SVM能够在线性不可分的情形下仍然能找到一个较优的分类超平面

定义: 假设训练样本为 ( x i , y i ) (x_i, y_i) (xi,yi),其中 x i x_i xi是输入特征, y i ∈ − 1 , 1 y_i \in {-1, 1} yi1,1是类比额标签。SVM的分类条件是 :
y i ( w ⋅ x i + b ) ≥ 1 y_i(w \cdot x_i + b) \geq 1 yi(wxi+b)1
对于线性不可分的情况,引入松弛变量 ξ i ≥ 0 \xi_i \geq 0 ξi0,允许某些点违反上述条件:
y i ( w ⋅ x i + b ) ≥ 1 − ξ i y_i(w \cdot x_i + b) \geq 1 - \xi_i yi(wxi+b)1ξi
这里:

  • ξ i = 0 \xi_i = 0 ξi=0:点 x i x_i xi被正确分类且位于分类边界之外
  • $0 < \xi_i \leq 1 :点 :点 :点x_i$被正确分类且位于分类边界之内
  • ξ i > 1 \xi_i > 1 ξi>1:点 x i x_i xi被错误分类

优化目标(软边界SVM):

引入松弛变量后,SVM的优化目标需要平衡两部分:

  • 最大化边界(Margin),即最小化 1 2 ∣ ∣ w ∣ ∣ 2 \frac{1}{2}||w||^2 21∣∣w2
  • 最小化分类错误的代价,即最小化 ∑ i ξ i \sum_i\xi_i iξi

最终目标函数为:
m a x w , b , ξ 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i ξ i \mathop{max}\limits_{w,b,\xi} \frac{1}{2}||w||^2 + C\sum_i\xi_i w,b,ξmax21∣∣w2+Ciξi
C 是正则化参数,用来权衡分类边界的宽度与分类错误的代价。

  • 较大的 C:更注重减少分类错误,容忍较小的边界。
  • 较小的 C:更注重增加边界宽度,容忍更多的分类错误。

3.4 梯度下降

是一种用于优化线性回归模型的迭代方法,通过计算损失函数的梯度,并沿着梯度的反方向迭代更新参数 W W W,逐步逼近最优解。梯度下降有三种主要变体:

  • 批量梯度下降(Batch Gradient Descent, BGD)
  • 随机梯度下降(Stochastic Gradient Descent, SGD)
  • 随机批量梯度下降(Mini-Batch Gradient Descent, MBGD)

样本数的对梯度公式的影响:

  • 如果不除以样本数,计算得到的梯度是累计的梯度,也就是每个样本的误差对权重的累积影响
  • 如果除以样本数,计算得到的是平均梯度,每次更新会使用平均误差对权重进行更新

参数更新公式:
W = W − η ∇ L ( W ) W=W-\eta\nabla L(W) W=WηL(W)
其中:

  • W W W是参数向量
  • η \eta η是学习率,控制更新的步长
  • 损失函数 J ( W ) J(W) J(W),在线性回归中有介绍,不同的模型可以选取不同的损失函数
  • ∇ L ( W ) \nabla L(W) L(W)是损失函数 J ( W ) J(W) J(W)对参数W的梯度(也就是求导,一般来说,如果损失函数是每个样本损失的平均值,也就是除以了样本数m,那损失的函数的梯度就不再需要除以样本数m了
3.4.1 批量梯度下降

概述: 在每次迭代中,使用整个训练集来计算梯度

过程:

  1. 首先,初始化模型参数
  2. 定义损失函数 J ( W ) J(W) J(W)
  3. 求解损失函数的导数,也就是损失函数的梯度函数 L ( W ) L(W) L(W)
  4. 根据上面给的参数更新公式更新W
  5. 重复迭代

优点:

  • 更新稳定,避免了由样本噪声引起的波动
  • 收敛到全局最优解,梯度方向更精确

缺点:

  • 计算成本高
  • 不适合大规模数据集
3.4.2 随机梯度下降

概述: 在每次迭代中,只使用一个样本计算梯度

SGD优缺点:

  • 优点:
    • 效率高:对于大规模数据集,SGD不需要每次都遍历整个数据集,它每次只对一个样本进行更新,使得计算更快
    • 内存友好:由于它只需要处理一个样本,内存消耗相对较低,适合处理大数据
    • 在线学习:SGD可以随着新数据的到来在线更新模型, 而不需要每次都从头开始训练
  • 缺点:
    • 噪声较大:由于每次更新使用的是单个样本,更新方向可能不是全局最优,因此SGD的收敛路径往往比较噪声且不稳定
    • 需要调整学习率:学习率 η \eta η的选择至关重要。如果学习率过大,参数更新可能会错过最优点;如果学习率过小,收敛速度将非常慢

学习率衰减策略:

为了解决噪声问题,常见的做法是在训练过程中逐渐减低学习率,这种方法可以在训练初期进行较大步长的更新,使得模型快速接近最优解,而在后期逐渐减小步长,使得模型在最优解附件收敛

学习率衰减公式的常见形式是:
KaTeX parse error: Expected 'EOF', got '_' at position 40: …1 + \text{decay_̲rate} \cdot t}
其中:

  • η 0 \eta_0 η0是初始学习率
  • t t t是当前的迭代次数
  • KaTeX parse error: Expected 'EOF', got '_' at position 12: \text{decay_̲rate}是学习率的衰减系数

伪代码:

初始化 W
for epoch in range(num_epochs):
    for i in range(m):  # m是样本数量
        随机选取一个样本 (x_i, y_i)
        计算该样本的梯度: grad = x_i * (x_i W - y_i)
        取负梯度方向更新参数: W = W - η * grad
        记录训练集或验证集的损失
3.4.3 批量随机梯度下降

概述: 每次使用一小批随机样本计算梯度

过程:

  1. 初始化权重W和b

  2. 选择批量大小B(比如32,64等

  3. 每次迭代时,从训练集中随机抽取一批样本,计算该批样本上的损失函数梯度,然后更新权重:
    W = W − η ∇ L ( W ) W=W-\eta\nabla L(W) W=WηL(W)
    其中 η \eta η是学习率, η ∇ L ( W ) \eta\nabla L(W) ηL(W)是对权重的梯度

优点:

  • 在每次更新时引入随机性,避免陷入局部最优解
  • 更新效率较高,能在大规模数据集上加速训练
  • 在批量计算中还可以利用并行化处理,进一步提高效率

3.5 多类别分类问题

概述: Multi-class classification 是指预测一个实例属于多个类别中的某一个类别的问题。与二分类(Binary Classification)不同,二分类问题只有两个类比额,而多类别分类问题有三个或更多类比

3.5.1 问题定义

给定一个包含n个样本的数据集,每个样本有m个特征,并且每个样本都属于k个类别中的某一个类别。目标是构建一个分类模型,能够根据输入特征预测该样本的类别

3.5.2 常见的多类别分类方法

一对多(One-vs-Rest, OvR)/一对其他(One-vs-All, OvA):

  • 原理:这种方法将多类别问题转换为多个二分类问题。对于每一个类别,都训练一个二分类模型,该模型用于判断样本是否属于该类别(”是“或”不是“)。最终预测结果是选择得分最高的类别

    • 假设有k个类别,对于每个类别i,构建一个二分类模型 h i ( x ) h_i(x) hi(x),其输出是”属于类别i“或”不属于类别i“
    • 在预测时,对于每个类别,计算其分类模型的输出得分,最终选择得分最高的类别作为预测类别
  • 优缺点:

    • 优点:实现简单,能够与现有的二分类模型结合(如逻辑回归、支持向量机)
    • 缺点:如果类别数很大,每个类别需要训练一个二分器。可能会导致训练时间和计算开销增加

一对一(One-vs-One, OvO):

  • 原理:与一对多方法不同,一对一方法将多类别问题转换为多个二分类问题,但这里每对类别都会训练一个分类器,也就是说,对于每两个类别i和j,训练一个二分类模型 h i , j ( x ) h_{i,j}(x) hi,j(x),用于判断一个样本是属于类别i还是类别j
    • 对于k个类别,所有可能的类别对都会训练一个分类器,总共需要训练 k ( k − 1 ) 2 \frac{k(k-1)}{2} 2k(k1)个分类器
    • 在预测时,所有的二分类器都会给出一个预测类别,最终通过投票机制选择的票最多的类别作为最终分类结果
  • 优缺点:
    • 优点:可以利用现有的二分类模型,并且每个模型只需处理少量类别之间的区别
    • 缺点:需要训练的分类器数量较多,计算开销大

直接多类别分类(Direct Multi-class Classification):

  • 原理:这种方法直接训练一个多类别分类器,避免将问题分解为多个二分类问题。常见的多类别分类算法包括:
    • Sofrmax回归:这是逻辑回归的扩展,适用于多类别分类问题。模型的输出是每个类别的概率,预测时选择概率最高的类别
    • 多类别支持向量机(C-SVC with multi-class strategy):SVM本身是二分类算法,但可以通过直接使用多类别支持向量机来解决多类别问题,如使用”一对一“策略或”一对多“策略
    • 决策树:决策树自然适应多类别分类问题,因为每个节点的决策可以基于多个类别进行选择
  • 优缺点:
    • 优点:在训练时直接处理多类别问题,不需要分解为多个二分类问题,计算上通常较为高效
    • 缺点:对于复杂的多类别问题,可能需要更复杂的模型和调优

基于神经网络的方法:

  • 原理:神经网络可以自然地处理多类别分类问题,特别是通过使用 softmax激活函数将网络的输出转换为每个类别的概率分布,具体做法是在网络的最后一层使用softmax激活函数,将网络的输出映射到每个类别的概率值

    • softmax函数:softmax将一个向量转换为一个概率分布,输出中每个元素的值都在0到1之间,且所有元素的和为1,具体公式为:
      Softmax ⁡ ( z i ) = e z i ∑ j e z j \operatorname{Softmax}\left(z_{i}\right)=\frac{e^{z_{i}}}{\sum_{j} e^{z_{j}}} Softmax(zi)=jezjezi
      其中 z i z_i zi是模型输出的第i个类别的得分

    • 在训练时,使用交叉熵损失函数来优化模型的参数,目标是最小化真实类别与预测类别之间的差异

  • 优缺点:

    • 优点:神经网络能够自动提取特征并进行非线性映射,适合复杂的多类别问题
    • 缺点:训练过程可能需要更多的数据和计算资源
3.5.3 性能评估

评估指标:

  • 准确率(Accuracy):所有正确分类的样本占总样本的比例
  • 宏平均(Macro Average):对每个类别计算精度(precision)、召回率(recall)和F1-score,然后取这些指标的平均值
  • 加权平均(Weighted Average):对每个类别的精度、召回率和F1-score计算加权平均,权重是类别的支持度(样本数)
  • 混淆矩阵(Confusion Matrix):对于每个类别,记录预测正确和错误的样本数,混淆矩阵帮助分析分类器的错误模式

4. 逻辑回归和多分类逻辑回归

4.1 逻辑回归

概述: 是一种用于二分类问题的线性模型,尽管名字里有回归,它实际上用于分类任务。可以说是线性分类的一种特例,但它采用了概率的方式进行分类决策。

核心思想:

逻辑回归的目标是通过学习到的模型预测某个输入属于某个类别的概率。其基本形式是将线性回归的输出通过Sigmoid函数转换为一个介于0到1之间的概率值

  • 线性部分:给定一个输入向量X和模型参数W,线性部分的输出为:
    z = W T X + b z=W^TX+b z=WTX+b
    这个W是权重向量,b是偏置

  • Sigmoid函数:将线性输出z转换为概率值p:
    p = 1 1 + e − z p=\frac1{1+e^{-z}} p=1+ez1
    这个p表示预测结果为正类的概率

  • 损失函数:逻辑回归的损失函数通常是交叉熵损失,用于评估模型预测的概率分布和实际标签之间的差异:
    J ( W ) = − 1 m ∑ i = 1 m [ y i log ⁡ ( y ^ i ) + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] J(W)=-\frac1m\sum_{i=1}^m\left[y_i\log(\hat{y}_i)+(1-y_i)\log(1-\hat{y}_i)\right] J(W)=m1i=1m[yilog(y^i)+(1yi)log(1y^i)]
    其中, y ^ i \hat{y}_i y^i是第i个样本的预测概率, y i y_i yi是实际标签,m是样本数

  • Logistic回归的梯度公式:
    ∇ L ( W ) = X T ( sigmoid ( X W ) − y ) \nabla L(W)=X^T(\text{sigmoid}(XW)-y) L(W)=XT(sigmoid(XW)y)

训练逻辑回归的过程: 通过最小化损失函数的值,调整权重W和偏置b。最常用的优化算法是梯度下降,其中包括不同的变体。

4.2 多分类逻辑回归

基本原理: 基于softmax函数,将输入样本映射到多个类别的概率分布。softmax函数的公式如下:
P ( y = c ∣ X ) = e x p ( W c T X + b c ) ∑ k = 1 K e x p ( w k T X + b k ) P(y=c|X) = \frac{exp(W_c^TX + b_c)}{\sum_{k=1}^Kexp(w_k^TX+b_k)} P(y=cX)=k=1Kexp(wkTX+bk)exp(WcTX+bc)

  • x是输入样本的特征向量
  • y是类别标签,取值范围为{1,2,…,K},K是类别数
  • w c w_c wc b c b_c bc是类别c的权重向量和偏置
  • P ( y = c ∣ X ) P(y=c|X) P(y=cX)是样本属于类别c的概率

损失函数: 为了优化模型,多分类逻辑回归使用交叉熵损失函数:
L = − 1 N ∑ i = 1 N ∑ c = 1 K ( y i = c ) l o g P ( y i = c ∣ X i ) \mathcal{L}=-\frac{1}{N}\sum_{i=1}^N\sum_{c=1}^K(y_i=c)logP(y_i=c|X_i) L=N1i=1Nc=1K(yi=c)logP(yi=cXi)

  • N是样本数量
  • 1( y i = c y_i=c yi=c)是指示函数,当样本i的真实标签为c时取值为1,否则为0
  • P ( y i = c ∣ X i ) P(y_i=c|X_i) P(yi=cXi)时通过softmax函数计算的概率

优化方法: 通过梯度下降或其变种(如SGD、Adam等)优化损失函数,调整参数w和b来最小化误差

特点:

  • 概率输出:模型输出类别概率,提供了不确定性信息
  • 可解释性强:权重w的大小和方向可以解释特征对分类的影响
  • 计算效率较高:适合小规模和中等规模的数据集

5. 欠拟合、过拟合、交叉验证

5.1 欠拟合和过拟合

欠拟合(Underfitting):

  • loss_train和loss_val都很高,且无法持续下降到理想的范围。欠拟合表明模型对训练数据的学习不足,可能是由于模型过于简单(例如参数太少,模型不够复杂)
  • 解决方案:增加模型复杂度(例如增加特征、增加模型层数或参数),或者使用更强的模型

过拟合(Overfitting):

  • loss_traing持续下降,但loss_val开始上升,这是典型的过拟合现象,意味着模型在训练集上表现良好,但在验证集上的表现变差,这表明模型在过度拟合训练集的细节和噪声,而没有学到验证集中的一般规律
  • 解决方案:
    • 使用正则化方法来限制模型的复杂度
    • 增加训练集数据量或使用数据增强技术
    • 提前停止训练,即当loss_val开始上升时停止训练,以防止过拟合

在这里插入图片描述

5.2 偏差-方差权衡

概述: 用于描述模型的复杂度与预测误差之间的关系

偏差(Bias): 描述了模型的预测值与真实值之间的偏离成都。反映了模型对数据的系统性错误,通常是由于模型假设过于简单导致的

  • 高偏差:模型无法很好地捕捉数据的复杂结果(欠拟合)
    • 例如,用线性模型拟合非线性数据,模型无法表达数据中的非线性关系
  • 低偏差:模型能够准确地拟合训练数据,捕捉了数据的主要模式

方差(Variance): 描述了模型对数据变化的敏感性,反映了模型的预测结果在不同的训练数据集上的波动性

  • 高方差:模型过于复杂,过度拟合训练数据,对训练集中的噪声特别敏感(过拟合)
    • 例如,用高阶多项式拟合简单线性关系的数据,模型可能对训练集表现和那后,但对测试集表现很差
  • 低方差:模型对数据的变化不敏感,预测稳定

偏差-方差分解: 总误差 = 偏差2+方差+噪声

  • 偏差:模型假设的错误,与模型复杂度负相关
  • 方差:模型对数据扰动的敏感性,与模型复杂度正相关
  • 噪声:数据中的固有随机性,不可通过建模减少

偏差-方差权衡:

  • 简单模型
  • 复杂模型
  • 最佳模型

5.3 交叉验证

主要目的:

  • 评估模型的泛化能力:交叉验证可以更全面地评估模型在未见数据上的表现,避免仅依赖单一训练集和测试集可能导致的评估偏差
  • 减少过拟合风险:如果模型在特定训练集上表现良好,但在其他数据上效果不佳,可能是过拟合的表现。交叉验证通过多次训练和验证,帮助检测和减少过拟合的风险
  • 优化模型参数:在交叉验证的过程中,可以调整模型的超参数,选择在不同的数据子集上表现最优的参数组合,从而提升模型的整体性能

常用的基奥查验证方法:

  • 留出法(Holdout Method):将数据集随机划分为训练集和测试集,通常按一定比例划分
  • K折交叉验证(K-Fold Cross-Validation):将数据集划分为K个子集,每次使用其中一个子集作为验证集,其余K-1个子集作为训练集,重复K次,确保每个子集都被用作验证集一次
  • 留一法(Leave-One-Out Cross-Validation, LOOCV):当数据集较小,每次将一个样本作为验证集,其余样本作为训练集,重复进行,直到每个样本都被用作训验证集一次

6. 非线性机器学习与集成方法

6.1 决策树

请添加图片描述
请添加图片描述

请添加图片描述

请添加图片描述
请添加图片描述

6.2 集成学习

概述: 通过组合多个模型的预测结果来提高整体性能。核心思想是多个弱学习器(Weak Learners)结合起来可以形成一个强学习器(Strong Learner)

核心思想:

  • 多样性:通过不同的模型或数据生成方式,确保其模型具有差异性
  • 组合策略:通过投票、加权平均或其他方法,将多个模型的预测结果进行融合
  • 提高性能:集成学习通常能够降低模型的方差和偏差,从而提高准确性和鲁棒性

分类:

  • Bagging:
    • 全称:Bootstrap Aggregation
    • 原理:
      • 从训练集随机采样(有放回地抽样,生成多个子数据集)
      • 每个子数据集训练一个模型(通常是同一种模型,如决策树)
      • 最终通过平均(回归)或投票(分类)的方式融合多个模型的预测结果
    • 特点:
      • 减少方差,提升模型的稳定性
      • 基于独立训练的模型,易于并行化
    • 代表算法:随机森林(Random Forest)
    • 示例:数据集有100个样本,Bagging会随机抽样生成多个大小为100的数据子集,每个子集训练一个决策树模型,最后通过多数投票决定分类结果
  • Boosting:
    • 原理:
      • 通过逐步训练模型,将重点放在之前模型容易出错的样本上
      • 每轮训练一个模型,并更根据该模型的错误情况调整样本的权重(错误的样本权重增加)
      • 最终通过加权平均的方式组合多个模型
    • 特点:
      • 减少偏差,提升模型的预测能力
      • 各模型依赖顺序训练,串行化了
    • 代表算法:AdaBoost,Gradient Boosting,XGBoost,LightGBM
    • 示例:初始化所有样本的权重相同,训练第一个模型后,错误分类的样本权重增加;再用调整后的权重训练第二个模型,如此迭代,最后通过加权投票或加权求和得到最终结果
  • Stacking
    • 原理:
      • 使用多个不同类型的模型作为基础学习器
      • 这些基础学习器的输出作为输入,训练一个"元学习器"来学习如何组合这些模型
    • 特点:
      • 灵活性强,可以结合多种类型的基模型
      • 通常需要交叉验证来防止过拟合
    • 代表算法:无固定框架算法,常见于竞赛(如Kaggle )
    • 示例:使用逻辑回归、随机森林、支持向量机作为基学习器,将它们的预测输出输入到一个线性回归模型中,最终生成预测结果

7. 无监督学习:聚类问题

7.1 聚类基础

概述: 是一种无监督学习方法,目的是将一组数据点划分为若干个子集(称为簇,cluster),使得同一个簇内的数据点具有较高的相似性,而不同簇之间的数据点差异显著。聚类应用于数据没有明确标签的场景,例如客户细分、文本聚类、图像分割等

特点

  • 无监督学习:没有标签,完全依赖数据的内在特征
  • 相似性衡量:通过某种距离度量(欧几里得距离、余弦相似度等)来判断数据点之间的相似性)
  • 簇的定义:不同算法对簇的定义可能不同,例如基于密度、基于距离或基于概率分布等

常见算法: K-Means算法、层次聚类、基于密度的聚类(DBSCAN)、高斯混合模型(Gaussiaan Mixture Model, GMM)

评价指标:

  • 内部指标:
    • 只是用数据本身和聚类结果,不依赖外部标签
    • 常见指标:
      • 轮廓系数(Silhouette Coefficient):
        • 衡量簇内点的紧密性和簇间的分离度
        • 值范围:[-1, 1],越接近1表明聚类效果越好
      • 簇内平方和(Inertia):簇内点到簇中心的总平方和,值越小越好
  • 外部指标:
    • 如果有标签,可以根据真实标签和聚类结果进行比较
    • 常见指标:
      • 调整兰德指数(ARI):真实标签和聚类结果的一致性
      • 归一化互信息(NMI):聚类结果和标签的互信息值

应用场景:

  • 文本分析:文本聚类(新闻分类、主题检测)
  • 图像处理:图像分割、相似图片检索
  • 市场营销:客户细分,发现具有相似购买行为的群体
  • 生物信息学:基因表达数据分析,发现基因簇
  • 推荐系统:通过聚类用户行为数据,推荐类似内容

7.2 K-Means聚类【重点】

概述: 用于将数据集划分为k个cluster,以最小化簇内的样本与簇中心之间的距离。每个簇由其质心(中心点)表示

主要思想:

  • 将数据集划分为k个cluster ,使得:

    • 同一cluster内的数据点批次相似
    • 不同cluster之间的数据点差异较大
  • 使用一种迭代优化方法最小化簇内平方和,即:
    J = ∑ i = 1 k ∑ x ∈ C i ∣ ∣ x − μ i ∣ ∣ 2 J=\sum_{i=1}^k\sum_{x\in C_i}||x-\mu_i||^2 J=i=1kxCi∣∣xμi2

    • C i C_i Ci:第i个cluster
    • μ i \mu_i μi:第i个簇的中心
    • ∣ ∣ x − μ i ∣ ∣ 2 ||x-\mu_i||^2 ∣∣xμi2:数据点x到簇中心的欧几里得距离

算法流程:

  1. 初始化:随机选取k个点作为初始簇的中心点(质心)
  2. 分配样本:对于每个数据点,计算它到k个簇中心的距离,并将其分配到最近的簇
  3. 更新簇中心:重新计算每个簇的中心顶,作为该簇内所有点的均值
  4. 重复迭代:重复步骤2、3,直到簇中心不再发生变化,或者达到最大迭代粗疏
  5. 输出

示例: 数据集={(1,1),(2,1),(4,3),(5,4)}

  1. 初始化:随机选择k=2个点作为初始化簇中心,例如(1,1)和(5,4)
  2. 计算每个点到中心的距离并分配簇
    1. 点(1,1)(2,1)更接近(1,1)
    2. 点(4,3)(5,4)更接近(5,4)
  3. 更新簇中心:
    1. 第一个簇的中心更新为(1.5, 1)
    2. 第二个簇的中心更新为(4.5, 3.5)
  4. 重复步骤2,3直到中心点不再变化

选择合适的k值:

  • 肘部法则(Elbow Method):
    • 绘制簇内平方和随k变化的曲线
    • 选择肘部点作为最优的k值
  • 轮廓系数:
    • 衡量样本在簇内的紧密性和簇间的分离度
    • 取轮廓系数最大的k值

7.3 层次聚合聚类(HAC)

概述: 是一种基于树状结构的聚类方法,旨在通过递归地合并或分裂簇的方式,将数据组织成一个层次结构(通常表示为树状图)

策略:

  • 自底向上(层次聚合, agglomerative):
    • 每个数据点开始作为一个独立的簇
    • 逐步将最相似的簇合并,直到所有的数据点都属于一个簇
    • 适用于数量较小的情况
  • 自顶向下(层次分裂,divisive):
    • 从一个包含所有数据点的簇开始
    • 逐步将簇分裂成更小的簇,直到每个簇只包含一个数据点

算法步骤:

  1. 初始化:将每个数据点视为单独的一个簇
  2. 计算距离:计算每对簇之间的距离(使用特定的距离度量方法)
  3. 合并最近的簇:找到距离最近的两个簇,将它们合并为一个簇
  4. 更新距离矩阵:重新计算新簇与其他簇之间的距离
  5. 重复:重复步骤3和步骤4,直到所有的点被合并为一个簇,或者达到指定的递归次数

簇间的距离度量方法:

  • 最小距离(单连接,Single Linkage):
    • 定义:两个簇中距离最近的点之间的距离
    • 容易受到噪声影响,可能产生链式簇
  • 最大距离(完全连接,Complete Linkage):
    • 定义:两个簇中距离最远的点之间的距离
    • 倾向于生成紧凑的、球形的簇、但可能分割自然的群体
  • 平均距离(Average Linkage):
    • 定义:每个簇中所有点对之间平均距离的加权平均
    • 在链式簇和紧密簇之间的表现较为平衡
  • 质心距离(Centroid Linkage):
    • 定义:两个簇的质心之间的距离
    • 敏感于簇内样本分布变化
  • Ward方法:
    • 基于最小化簇内的平方误差
    • 更倾向于生成大小相似的簇,适合数据分布均匀的情况

8. 无监督学习:主成分分析

概述: PCA是一种用于数据降维的技术,通过寻找数据中最大方差方向的线性组合,将高维数据映射到一个低维空间,同时尽可能保留数据的主要信息

核心思想: PCA的目标是:

  • 将数据投影到新的正交坐标系(主成分轴),这些轴按照数据的防擦好大小排序
  • 最终保留较少的主成分,用于近似原始数据,从而减少数据的纬度

在降维的同时,PCA通过去除冗余特征和噪声提高模型的效率和泛化能力

PCA的数学步骤:

  1. 数据标准化:为了消除量纲的影响,PCA的第一步通常是对数据进行标准化(如零均值和单位方差标准化)。假设数据集X的大小为 n × d n \times d n×d 其中n是样本数,d是特征数,对每个特征数 x j x_j xj
    x j ′ = x j − μ j δ j x_j'=\frac{x_j - \mu_j}{\delta_j} xj=δjxjμj
    其中 μ j \mu_j μj是特征 x j x_j xj的均值, δ j \delta_j δj是标准差

  2. 计算协方差矩阵:计算标准化后的数据的协方差矩阵 ∑ \sum
    ∑ = 1 n − 1 X T X \sum = \frac{1}{n-1}X^TX =n11XTX
    协方差矩阵描述了特征之间的线性相关性

  3. 求解特征值和特征向量:计算协方差矩阵的特征值和特征向量:
    ∑ v = λ v \sum v = \lambda v v=λv

    • 特征向量v表示新的坐标轴方向(即主成分方向)
    • 特征值 λ \lambda λ表示沿主成分方向的方差大小
  4. 选择主成分:按照特征值大小对特征向量排序,选择前k个对应的特征向量,形成主成分矩阵 W k W_k Wk

  5. 降维:将原始数据X投影到主成分矩阵 W k W_k Wk上:
    Z = X W k Z=XW_k Z=XWk
    Z是降维后的数据

主成分解释:

  • 第一主成分:数据方差最大的方向, 最能反映数据的变化
  • 第二主成分:与第一主成分正交,反映剩余的次要变化

优点:

  • 降维效果显著
  • 去噪能力强
  • 解释性强

缺点:

  • 线性假设
  • 信息丢失
  • 易受异常值影响

应用场景:

  • 数据预处理:用于特征选择和去除冗余特征
  • 可视化:将高维数据降到2D或3D空间进行可视化
  • 压缩:通过降维实现数据压缩
  • 去噪:舍弃低方差成分,降低数据噪声
  • 推荐系统

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

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

相关文章

Spring Boot拦截器(Interceptor)详解

拦截器Interceptor 拦截器我们主要分为三个方面进行讲解&#xff1a; 介绍下什么是拦截器&#xff0c;并通过快速入门程序上手拦截器拦截器的使用细节通过拦截器Interceptor完成登录校验功能 1. 快速入门 什么是拦截器&#xff1f; 是一种动态拦截方法调用的机制&#xff…

Python基础学习-12匿名函数lambda和map、filter

目录 1、匿名函数&#xff1a; lambda 2、Lambda的参数类型 3、map、 filter 4、本节总结 1、匿名函数&#xff1a; lambda 1&#xff09;语法&#xff1a; lambda arg1, arg2, …, argN : expression using arg 2&#xff09; lambda是一个表达式&#xff0c;而不是一个语…

【SpringBoot】Spring Data Redis的环境搭建(win10)

启动redis服务 进入redis安装目录&#xff0c;启动cmd Redis客户端连接redis服务 我用的redis客户端是github上一个大佬写的&#xff0c;叫 Another Redis Desktop Manager Java框架操作Redis 框架有很多&#xff0c;比如Jedis&#xff0c;Spring Data Redis&#xff0c;Let…

联想品牌的电脑 Bios 快捷键是什么?如何进入 Bios 设置?

在某些情况下&#xff0c;您可能需要通过U盘来安装操作系统或进行系统修复。对于联想电脑用户来说&#xff0c;了解如何设置U盘作为启动设备是非常有用的技能之一。本文简鹿办公将指导您如何使用联想电脑的 U 盘启动快捷键来实现这一目标。 联想笔记本 对于大多数联想笔记本电…

51单片机教程(九)- 数码管的动态显示

1、项目分析 通过演示数码管动态显示的操作过程。 2、技术准备 1、 数码管动态显示 4个1位数码管和单片机如何连接 a、静态显示的连接方式 优点&#xff1a;不需要动态刷新&#xff1b;缺点&#xff1a;占用IO口线多。 b、动态显示的连接方式 连接&#xff1a;所有位数码…

windows下安装node.js和pnpm

首先&#xff0c;一定要powershell右键选择管理员身份运行&#xff0c;否则第三个命令报错。 # 安装 fnm (快速 Node 管理器) winget install Schniz.fnm# 配置 fnm 环境 fnm env --use-on-cd | Out-String | Invoke-Expression# 下载并安装 Node.js fnm use --install-if-mis…

【JavaEE初阶】枫叶经霜艳,梅花透雪香-计算机是如何运行的?

本篇博客给大家带来的是与计算机相关的知识点, 包括:计算机的组成, 指令, 进程(重点). 文章专栏: JavaEE初阶 若有问题 评论区见 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 1. 计算机的组成 1.1 计算机的发展史 计算…

基于时间维度优化“开源 AI 智能名片 S2B2C 商城小程序”运营策略:提升触达与转化效能

摘要&#xff1a; 随着数字化商业生态的蓬勃发展&#xff0c;“开源 AI 智能名片 S2B2C 商城小程序”融合前沿技术与创新商业模式&#xff0c;为企业营销与业务拓展带来新机遇。本文聚焦于用户时间场景维度&#xff0c;深入剖析如何依据不同时段用户行为特征&#xff0c;精准适…

自己整理的的java面试题

IO 按照流的流向分类&#xff1a;输入流和输出流 按照操作单元分类&#xff1a;可以分为字节流和字符流 按照流的角色划分&#xff1a;节点流和处理流 所有输入流的基类&#xff1a;InputStream/Reader 字节流/字符流 所有输出流的基类&#xff1a;OutputStream/Reader 字…

安全基线检查

一、安全基线检测基础知识 安全基线的定义 安全基线检查的内容 安全基线检查的操作 二、MySQL的安全基线检查 版本加固 弱口令 不存在匿名账户 合理设置权限 合理设置文件权限 日志审核 运行账号 可信ip地址控制 连接数限制 更严格的基线要求 1、禁止远程连接数据库 2、修改…

不间断电源 (UPS) 对现代技术可靠性的影响

在这个技术型世界里&#xff0c;无论是在个人还是商业环境中&#xff0c;电力供应商提供的稳定供电都变得越来越重要。 不间断电源 (UPS) 系统是一种不可或缺的解决方案&#xff0c;可保证终端设备不受干扰地运行&#xff0c;在出现电源问题或故障时让用户继续工作。 这篇文章…

基于yolov8、yolov5的智能零售柜商品检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要&#xff1a;智能零售柜商品检测在智能零售设备运营、库存管理和消费行为分析中具有重要意义&#xff0c;不仅能帮助相关企业实时监控商品状态&#xff0c;还为智能化零售系统提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的智能零售柜商品检测模…

Java接收LocalDateTime、LocalDatee参数

文章目录 引言I java服务端的实现1.1 基于注解规范日期格式1.2 json序列化和反序列化全局配置自动处理日期格式化II 知识扩展: 枚举的转换和序列化III 签名注意事项引言 应用场景举例:根据时间段进行分页查询数据 前后端交互日期字符串统一是yyyy-MM-dd HH:mm:ss 或者yyyy-M…

Java之String类常用操作

Java之String类 一、String类的理解1、类的声明2、内部声明的属性3、字符串常量的存储位置4、字符串的不可变性的理解5、String实例化的两种方式6、字符串的拼接 二、String的构造器1、构造器2、String和char之间相互转换3、String和byte之间相互转换 三、String中常用方法 一、…

Python语法基础(三)

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 我们这篇文章来说一下函数的返回值和匿名函数 函数的返回值 我们先来看下面的这一段函数的定义代码 # 1、返回值的意义 def func1():print(111111111------start)num166print…

Android11修改摄像头前后置方法,触觉智能RK3568开发板演示

本文介绍在Android11系统下&#xff0c;修改摄像头前后置属性的方法。使用触觉智能EVB3568鸿蒙开发板演示&#xff0c;搭载瑞芯微RK3568&#xff0c;四核A55处理器&#xff0c;主频2.0Ghz&#xff0c;1T算力NPU&#xff1b;支持OpenHarmony5.0及Linux、Android等操作系统&#…

蓝桥杯——递归

1、用递归实现阶乘 5*4*3*2*1120 package day3;public class Demo6 {public static void main(String[] args) {int result f(5);System.out.println(result);}private static int f(int i) {if(i1) {return 1;}return i * f(i-1);}}结果&#xff1a;120 2、爬楼梯 有一个楼…

5G NR:带宽与采样率的计算

100M 带宽是122.88Mhz sampling rate这是我们都知道的&#xff0c;那它是怎么来的呢&#xff1f; 采样率 子载波间隔 * 采样长度 38.211中对于Tc的定义&#xff0c; 在LTE是定义了Ts&#xff0c;在NR也就是5G定义了Tc。 定义这个单位会对我们以后工作中的计算至关重要。 就是在…

无法通过URL:vscode打开使用基于VSCode开源协议的第三方编辑器的问题处理

无法通过URL:vscode打开使用基于VSCode开源协议的第三方编辑器的问题处理 新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建…

U-Mamba/PyTorch WSL环境配置

Mamba的配置要求 LinuxNVIDIA GPUPyTorch 1.12CUDA 11.6https://github.com/state-spaces/mamba 个人版本&#xff1a; 通过Windows中的WSL来实现linux环境CUDA 12.4PyTorch 2.5.1Python 3.9 1、下载并配置WSL 微软应用商店搜索wsl选择合适的ubuntu版本进行下载在主板Bios…